@iobroker/js-controller-common 7.0.0 → 7.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/lib/common/notificationHandler.d.ts +40 -15
- package/build/cjs/lib/common/notificationHandler.js +71 -58
- package/build/cjs/lib/common/notificationHandler.js.map +3 -3
- package/build/cjs/lib/common/zipFiles.js +51 -57
- package/build/cjs/lib/common/zipFiles.js.map +2 -2
- package/build/esm/lib/common/notificationHandler.d.ts +40 -15
- package/build/esm/lib/common/notificationHandler.d.ts.map +1 -1
- package/build/esm/lib/common/notificationHandler.js +87 -70
- package/build/esm/lib/common/notificationHandler.js.map +1 -1
- package/build/esm/lib/common/zipFiles.d.ts.map +1 -1
- package/build/esm/lib/common/zipFiles.js +52 -62
- package/build/esm/lib/common/zipFiles.js.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +9 -9
|
@@ -93,7 +93,7 @@ async function readDirAsZip(objects, id, name, options, callback) {
|
|
|
93
93
|
}
|
|
94
94
|
options = options || {};
|
|
95
95
|
let adapter = id;
|
|
96
|
-
if (adapter.
|
|
96
|
+
if (adapter.includes(".")) {
|
|
97
97
|
adapter = id.split(".")[0];
|
|
98
98
|
}
|
|
99
99
|
try {
|
|
@@ -140,7 +140,11 @@ async function _checkDir(_options) {
|
|
|
140
140
|
return _checkDir({ id, objects, options, root, parts });
|
|
141
141
|
}
|
|
142
142
|
async function _writeOneFile(objects, zip, id, name, filename, options) {
|
|
143
|
-
|
|
143
|
+
const zipFile = zip.files[filename];
|
|
144
|
+
if (!zipFile) {
|
|
145
|
+
throw new Error(`Cannot write file "${filename}", because JSZip instance is incomplete`);
|
|
146
|
+
}
|
|
147
|
+
let data = await zipFile.async("nodebuffer");
|
|
144
148
|
if (options.parse) {
|
|
145
149
|
data = options.parse(name, filename, data, options ? options.settings : null);
|
|
146
150
|
}
|
|
@@ -172,8 +176,8 @@ async function writeDirAsZip(objects, id, name, data, options) {
|
|
|
172
176
|
}
|
|
173
177
|
try {
|
|
174
178
|
await _writeOneFile(objects, zip, id, name, filename, options);
|
|
175
|
-
} catch (
|
|
176
|
-
errors.push(`Cannot write file "${filename}": ${
|
|
179
|
+
} catch (e) {
|
|
180
|
+
errors.push(`Cannot write file "${filename}": ${e.toString()}`);
|
|
177
181
|
}
|
|
178
182
|
}
|
|
179
183
|
if (errors.length) {
|
|
@@ -193,16 +197,17 @@ async function readObjectsAsZip(objects, rootId, adapter, options = {}) {
|
|
|
193
197
|
}
|
|
194
198
|
const objs = await objects.getObjectsAsync(keys, options);
|
|
195
199
|
const zip = new import_jszip.default();
|
|
196
|
-
for (
|
|
197
|
-
|
|
200
|
+
for (const obj of objs) {
|
|
201
|
+
const id = obj._id;
|
|
202
|
+
let data = { id, data: obj };
|
|
198
203
|
if (options.stringify) {
|
|
199
204
|
try {
|
|
200
205
|
data = options.stringify(data, options ? options.settings : null);
|
|
201
206
|
} catch {
|
|
202
|
-
data.id = `${
|
|
207
|
+
data.id = `${id.replace(/\./g, "/").substring(rootId.length + 1)}.json`;
|
|
203
208
|
}
|
|
204
209
|
} else {
|
|
205
|
-
data.id = `${
|
|
210
|
+
data.id = `${id.replace(/\./g, "/").substring(rootId.length + 1)}.json`;
|
|
206
211
|
}
|
|
207
212
|
if (typeof data.data === "object") {
|
|
208
213
|
data.data = JSON.stringify(data.data, null, 2);
|
|
@@ -212,41 +217,37 @@ async function readObjectsAsZip(objects, rootId, adapter, options = {}) {
|
|
|
212
217
|
const base64 = await zip.generateAsync({ type: "base64" });
|
|
213
218
|
return base64;
|
|
214
219
|
}
|
|
215
|
-
async function _writeOneObject(objects, zip, rootId, filename, options
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
data.id = (rootId ? `${rootId}.` : "") + data.id.replace(/\//g, ".").replace(/\.json$/, "");
|
|
228
|
-
}
|
|
229
|
-
if (data && typeof data.data !== "object") {
|
|
230
|
-
try {
|
|
231
|
-
data.data = JSON.parse(data.data);
|
|
232
|
-
} catch (e) {
|
|
233
|
-
callback(new Error(`Cannot parse "${data.id}": ${e.message}`));
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
220
|
+
async function _writeOneObject(objects, zip, rootId, filename, options) {
|
|
221
|
+
const zipFile = zip.files[filename];
|
|
222
|
+
if (!zipFile) {
|
|
223
|
+
throw new Error(`Cannot write file "${filename}", because JSZip instance is incomplete`);
|
|
224
|
+
}
|
|
225
|
+
const bufferData = await zipFile.async("nodebuffer");
|
|
226
|
+
let data = { data: bufferData.toString(), id: filename };
|
|
227
|
+
if (options.parse) {
|
|
228
|
+
try {
|
|
229
|
+
data = options.parse(data, options ? options.settings : null);
|
|
230
|
+
} catch (e) {
|
|
231
|
+
throw new Error(`Cannot custom parse "${data.id}": ${e}`);
|
|
236
232
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
callback();
|
|
246
|
-
}
|
|
233
|
+
} else {
|
|
234
|
+
data.id = (rootId ? `${rootId}.` : "") + data.id.replace(/\//g, ".").replace(/\.json$/, "");
|
|
235
|
+
}
|
|
236
|
+
if (data && typeof data.data !== "object") {
|
|
237
|
+
try {
|
|
238
|
+
data.data = JSON.parse(data.data);
|
|
239
|
+
} catch (e) {
|
|
240
|
+
throw new Error(`Cannot parse "${data.id}": ${e.message}`);
|
|
247
241
|
}
|
|
248
|
-
}
|
|
249
|
-
|
|
242
|
+
}
|
|
243
|
+
if (data && data.id && data.data) {
|
|
244
|
+
options.ts = new Date().getTime();
|
|
245
|
+
options.from = `system.host.${import_js_controller_common.tools.getHostName()}.cli`;
|
|
246
|
+
await objects.setObject(data.id, data.data, options);
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
if (data?.error) {
|
|
250
|
+
throw data.error;
|
|
250
251
|
}
|
|
251
252
|
}
|
|
252
253
|
async function writeObjectsAsZip(objects, rootId, adapter, data, options, callback) {
|
|
@@ -258,31 +259,24 @@ async function writeObjectsAsZip(objects, rootId, adapter, data, options, callba
|
|
|
258
259
|
}
|
|
259
260
|
}
|
|
260
261
|
const zip = new import_jszip.default();
|
|
262
|
+
const error = [];
|
|
261
263
|
try {
|
|
262
264
|
await zip.loadAsync(data);
|
|
263
|
-
let count = 0;
|
|
264
|
-
const error = [];
|
|
265
265
|
for (const filename of Object.keys(zip.files)) {
|
|
266
266
|
if (filename[filename.length - 1] === "/") {
|
|
267
267
|
continue;
|
|
268
268
|
}
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
if (!--count && callback) {
|
|
275
|
-
callback(error.length ? new Error(error.join(", ")) : null);
|
|
276
|
-
callback = null;
|
|
277
|
-
}
|
|
278
|
-
});
|
|
269
|
+
try {
|
|
270
|
+
await _writeOneObject(objects, zip, rootId, filename, options);
|
|
271
|
+
} catch (e) {
|
|
272
|
+
error.push(e.toString());
|
|
273
|
+
}
|
|
279
274
|
}
|
|
280
275
|
} catch (e) {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
callback = null;
|
|
284
|
-
}
|
|
276
|
+
callback(e.toString());
|
|
277
|
+
return;
|
|
285
278
|
}
|
|
279
|
+
callback(error.length ? new Error(error.join(", ")) : null);
|
|
286
280
|
}
|
|
287
281
|
// Annotate the CommonJS export names for ESM import in node:
|
|
288
282
|
0 && (module.exports = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/common/zipFiles.ts"],
|
|
4
|
-
"sourcesContent": ["import { tools } from '@iobroker/js-controller-common';\nimport JSZip from 'jszip';\nimport type { Client as ObjectsClient } from '@iobroker/db-objects-redis';\n\nfunction _getAllFilesInDir(\n objects: ObjectsClient,\n id: string,\n name: string,\n options: any,\n callback: (errs: null | string[], res: string[]) => void,\n result?: string[],\n): void {\n objects.readDir(id, name, options, (err, files) => {\n result = result || [];\n\n let count = 0;\n const errors: string[] = [];\n if (files) {\n for (const file of files) {\n if (file.isDir) {\n count++;\n _getAllFilesInDir(\n objects,\n id,\n `${name}/${file.file}`,\n options,\n (errs, _result) => {\n errs && errors.push(...errs);\n if (!--count) {\n callback(errors.length ? errors : null, _result);\n }\n },\n result,\n );\n } else {\n result.push(`${name}/${file.file}`);\n }\n }\n }\n\n if (!count) {\n callback(null, result);\n }\n });\n}\n\nfunction _addFile(\n objects: ObjectsClient,\n id: string,\n name: string,\n options: any,\n zip: JSZip,\n callback: (err: Error | null | undefined) => void,\n): void {\n objects.readFile(id, name, options, (err, data, _mime) => {\n if (err) {\n console.log(err);\n callback(new Error(`Cannot read file \"${name}\": ${err.message}`));\n } else {\n // if handler installed\n if (options.stringify) {\n try {\n data = options.stringify(name, data, options ? options.settings : null);\n } catch (e) {\n console.error(`Cannot stringify file \"${name}\": ${e.message}`);\n if (!err) {\n err = new Error(`Cannot stringify file \"${name}\": ${e.message}`);\n }\n }\n }\n const parts = name.split('/');\n if (parts.length > 1) {\n parts.shift();\n name = parts.join('/');\n }\n\n zip.file(name, data!);\n setImmediate(() => callback(err));\n }\n });\n}\n\n// pack all files as zip and send it back\nexport async function readDirAsZip(\n objects: ObjectsClient,\n id: string,\n name: string,\n options: any,\n callback: (err?: Error | null, base64?: string) => void,\n): Promise<void> {\n if (typeof options === 'function') {\n callback = options;\n options = null;\n }\n if (name[0] === '/') {\n name = name.substring(1);\n }\n options = options || {};\n let adapter = id;\n if (adapter.indexOf('.') !== -1) {\n adapter = id.split('.')[0];\n }\n\n // try to load processor of adapter\n try {\n options.stringify = (await import(`${tools.appName.toLowerCase()}.${adapter}/lib/convert.js`)).stringify;\n } catch {\n // OK\n }\n\n _getAllFilesInDir(objects, id, name, options, (errs, files) => {\n let count = 0;\n if (files) {\n const zip = new JSZip();\n for (const file of files) {\n count++;\n _addFile(objects, id, file, options, zip, async err => {\n if (!--count) {\n try {\n const base64 = await zip.generateAsync({ type: 'base64' });\n callback(err, base64);\n } catch (e) {\n callback(e.message);\n }\n }\n });\n }\n }\n\n if (!count) {\n callback(errs?.length ? new Error(errs.join(', ')) : null);\n }\n });\n}\n\ninterface CheckDirOptions {\n objects: ObjectsClient;\n id: string;\n root: string;\n parts: string[];\n options: any;\n}\n\n/**\n * Check that directory exists recursive\n *\n * @param _options directory information and objects db\n */\nasync function _checkDir(_options: CheckDirOptions): Promise<void> {\n const { parts, id, options, objects } = _options;\n let { root } = _options;\n\n if (!parts?.length) {\n return;\n }\n\n root += `/${parts.shift()}`;\n\n try {\n await objects.readDirAsync(id, root, options);\n } catch (e) {\n if (e.message === tools.ERRORS.ERROR_NOT_FOUND) {\n await objects.mkdirAsync(id, root, options);\n }\n }\n\n return _checkDir({ id, objects, options, root, parts });\n}\n\nasync function _writeOneFile(\n objects: ObjectsClient,\n zip: JSZip,\n id: string,\n name: string,\n filename: string,\n options: any,\n): Promise<void> {\n let data = await zip.files[filename].async('nodebuffer');\n\n if (options.parse) {\n data = options.parse(name, filename, data, options ? options.settings : null);\n }\n const fName = name + filename;\n const parts = fName.split('/');\n parts.pop();\n\n await _checkDir({ objects, id, root: '', parts, options });\n return objects.writeFileAsync(id, name + filename, data, options);\n}\n\nexport async function writeDirAsZip(\n objects: ObjectsClient,\n id: string,\n name: string,\n data: Buffer,\n options: any,\n): Promise<void> {\n const zip = new JSZip();\n\n options = options || {};\n\n let adapter = id;\n if (adapter.includes('.')) {\n adapter = id.split('.')[0];\n }\n\n // try to load processor of adapter\n try {\n options.parse = (await import(`${tools.appName.toLowerCase()}.${adapter}/lib/convert.js`)).parse;\n } catch {\n // OK\n }\n\n await zip.loadAsync(data);\n const errors = [];\n if (name[name.length - 1] !== '/') {\n name += '/';\n }\n for (const filename of Object.keys(zip.files)) {\n if (!filename || filename[filename.length - 1] === '/') {\n continue;\n }\n try {\n await _writeOneFile(objects, zip, id, name, filename, options);\n } catch (error) {\n errors.push(`Cannot write file \"${filename}\": ${error.toString()}`);\n }\n }\n if (errors.length) {\n throw new Error(errors.join(', '));\n }\n}\n\n// pack all files as zip and send it back\nexport async function readObjectsAsZip(\n objects: ObjectsClient,\n rootId: string,\n adapter: string,\n options: any = {},\n): Promise<string> {\n if (adapter) {\n // try to load processor of adapter\n try {\n options.stringify = (await import(`${tools.appName.toLowerCase()}.${adapter}/lib/convert.js`)).stringify;\n } catch {\n // OK\n }\n }\n\n const keys = await objects.getKeysAsync(`${rootId}.*`, options);\n if (!keys) {\n throw new Error('No matching keys found');\n }\n\n const objs = await objects.getObjectsAsync(keys, options);\n const zip = new JSZip();\n\n for (let f = 0; f < objs.length; f++) {\n let data: Record<string, any> = { id: keys[f], data: objs[f] };\n\n if (options.stringify) {\n try {\n data = options.stringify(data, options ? options.settings : null);\n } catch {\n data.id = `${keys[f].replace(/\\./g, '/').substring(rootId.length + 1)}.json`;\n }\n } else {\n data.id = `${keys[f].replace(/\\./g, '/').substring(rootId.length + 1)}.json`;\n }\n if (typeof data.data === 'object') {\n data.data = JSON.stringify(data.data, null, 2);\n }\n\n zip.file(data.id, data.data);\n }\n\n const base64 = await zip.generateAsync({ type: 'base64' });\n return base64;\n}\n\nasync function _writeOneObject(\n objects: ObjectsClient,\n zip: JSZip,\n rootId: string,\n filename: string,\n options: any,\n callback: (err?: Error | null) => void,\n): Promise<void> {\n try {\n const bufferData = await zip.files[filename].async('nodebuffer');\n let data: Record<string, any> = { data: bufferData.toString(), id: filename };\n if (options.parse) {\n try {\n data = options.parse(data, options ? options.settings : null);\n } catch (e) {\n callback(new Error(`Cannot custom parse \"${data.id}\": ${e}`));\n return;\n }\n } else {\n data.id = (rootId ? `${rootId}.` : '') + data.id.replace(/\\//g, '.').replace(/\\.json$/, '');\n }\n if (data && typeof data.data !== 'object') {\n try {\n data.data = JSON.parse(data.data);\n } catch (e) {\n callback(new Error(`Cannot parse \"${data.id}\": ${e.message}`));\n return;\n }\n }\n if (data && data.id && data.data) {\n options.ts = new Date().getTime();\n options.from = `system.host.${tools.getHostName()}.cli`;\n objects.setObject(data.id, data.data, options, err => callback(err));\n } else {\n if (data?.error) {\n callback(data.error);\n } else {\n callback();\n }\n }\n } catch (e) {\n callback(new Error(`Cannot parse unzip: ${e.message}`));\n }\n}\n\nexport async function writeObjectsAsZip(\n objects: ObjectsClient,\n rootId: string,\n adapter: string,\n data: Buffer,\n options: any,\n callback: (err?: Error | null) => void,\n): Promise<void> {\n options = options || {};\n\n if (adapter) {\n // try to load processor of adapter\n try {\n options.parse = (await import(`${tools.appName.toLowerCase()}.${adapter}/lib/convert.js`)).parse;\n } catch {\n // OK\n }\n }\n\n const zip = new JSZip();\n try {\n await zip.loadAsync(data);\n let count = 0;\n const error: string[] = [];\n for (const filename of Object.keys(zip.files)) {\n if (filename[filename.length - 1] === '/') {\n continue;\n }\n count++;\n _writeOneObject(objects, zip, rootId, filename, options, err => {\n if (err) {\n error.push(err.toString());\n }\n if (!--count && callback) {\n callback(error.length ? new Error(error.join(', ')) : null);\n // @ts-expect-error promisify later on\n callback = null;\n }\n });\n }\n } catch (e) {\n if (callback) {\n callback(e.toString());\n // @ts-expect-error promisify later on\n callback = null;\n }\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;kCAAsB;AACtB,mBAAkB;AAGlB,SAAS,kBACL,SACA,IACA,MACA,SACA,UACA,QAAiB;AAEjB,UAAQ,QAAQ,IAAI,MAAM,SAAS,CAAC,KAAK,UAAS;AAC9C,aAAS,UAAU,CAAA;AAEnB,QAAI,QAAQ;AACZ,UAAM,SAAmB,CAAA;AACzB,QAAI,OAAO;AACP,iBAAW,QAAQ,OAAO;AACtB,YAAI,KAAK,OAAO;AACZ;AACA,4BACI,SACA,IACA,GAAG,QAAQ,KAAK,QAChB,SACA,CAAC,MAAM,YAAW;AACd,oBAAQ,OAAO,KAAK,GAAG,IAAI;AAC3B,gBAAI,CAAC,EAAE,OAAO;AACV,uBAAS,OAAO,SAAS,SAAS,MAAM,OAAO;YACnD;UACJ,GACA,MAAM;QAEd,OAAO;AACH,iBAAO,KAAK,GAAG,QAAQ,KAAK,MAAM;QACtC;MACJ;IACJ;AAEA,QAAI,CAAC,OAAO;AACR,eAAS,MAAM,MAAM;IACzB;EACJ,CAAC;AACL;AAEA,SAAS,SACL,SACA,IACA,MACA,SACA,KACA,UAAiD;AAEjD,UAAQ,SAAS,IAAI,MAAM,SAAS,CAAC,KAAK,MAAM,UAAS;AACrD,QAAI,KAAK;AACL,cAAQ,IAAI,GAAG;AACf,eAAS,IAAI,MAAM,qBAAqB,UAAU,IAAI,SAAS,CAAC;IACpE,OAAO;AAEH,UAAI,QAAQ,WAAW;AACnB,YAAI;AACA,iBAAO,QAAQ,UAAU,MAAM,MAAM,UAAU,QAAQ,WAAW,IAAI;QAC1E,SAAS,GAAP;AACE,kBAAQ,MAAM,0BAA0B,UAAU,EAAE,SAAS;AAC7D,cAAI,CAAC,KAAK;AACN,kBAAM,IAAI,MAAM,0BAA0B,UAAU,EAAE,SAAS;UACnE;QACJ;MACJ;AACA,YAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,UAAI,MAAM,SAAS,GAAG;AAClB,cAAM,MAAK;AACX,eAAO,MAAM,KAAK,GAAG;MACzB;AAEA,UAAI,KAAK,MAAM,IAAK;AACpB,mBAAa,MAAM,SAAS,GAAG,CAAC;IACpC;EACJ,CAAC;AACL;AAGA,eAAsB,aAClB,SACA,IACA,MACA,SACA,UAAuD;AAEvD,MAAI,OAAO,YAAY,YAAY;AAC/B,eAAW;AACX,cAAU;EACd;AACA,MAAI,KAAK,OAAO,KAAK;AACjB,WAAO,KAAK,UAAU,CAAC;EAC3B;AACA,YAAU,WAAW,CAAA;AACrB,MAAI,UAAU;AACd,MAAI,QAAQ,
|
|
4
|
+
"sourcesContent": ["import { tools } from '@iobroker/js-controller-common';\nimport JSZip from 'jszip';\nimport type { Client as ObjectsClient } from '@iobroker/db-objects-redis';\n\nfunction _getAllFilesInDir(\n objects: ObjectsClient,\n id: string,\n name: string,\n options: any,\n callback: (errs: null | string[], res: string[]) => void,\n result?: string[],\n): void {\n objects.readDir(id, name, options, (err, files) => {\n result = result || [];\n\n let count = 0;\n const errors: string[] = [];\n if (files) {\n for (const file of files) {\n if (file.isDir) {\n count++;\n _getAllFilesInDir(\n objects,\n id,\n `${name}/${file.file}`,\n options,\n (errs, _result) => {\n errs && errors.push(...errs);\n if (!--count) {\n callback(errors.length ? errors : null, _result);\n }\n },\n result,\n );\n } else {\n result.push(`${name}/${file.file}`);\n }\n }\n }\n\n if (!count) {\n callback(null, result);\n }\n });\n}\n\nfunction _addFile(\n objects: ObjectsClient,\n id: string,\n name: string,\n options: any,\n zip: JSZip,\n callback: (err: Error | null | undefined) => void,\n): void {\n objects.readFile(id, name, options, (err, data, _mime) => {\n if (err) {\n console.log(err);\n callback(new Error(`Cannot read file \"${name}\": ${err.message}`));\n } else {\n // if handler installed\n if (options.stringify) {\n try {\n data = options.stringify(name, data, options ? options.settings : null);\n } catch (e) {\n console.error(`Cannot stringify file \"${name}\": ${e.message}`);\n if (!err) {\n err = new Error(`Cannot stringify file \"${name}\": ${e.message}`);\n }\n }\n }\n const parts = name.split('/');\n if (parts.length > 1) {\n parts.shift();\n name = parts.join('/');\n }\n\n zip.file(name, data!);\n setImmediate(() => callback(err));\n }\n });\n}\n\n// pack all files as zip and send it back\nexport async function readDirAsZip(\n objects: ObjectsClient,\n id: string,\n name: string,\n options: any,\n callback: (err?: Error | null, base64?: string) => void,\n): Promise<void> {\n if (typeof options === 'function') {\n callback = options;\n options = null;\n }\n if (name[0] === '/') {\n name = name.substring(1);\n }\n options = options || {};\n let adapter = id;\n if (adapter.includes('.')) {\n adapter = id.split('.')[0]!;\n }\n\n // try to load processor of adapter\n try {\n options.stringify = (await import(`${tools.appName.toLowerCase()}.${adapter}/lib/convert.js`)).stringify;\n } catch {\n // OK\n }\n\n _getAllFilesInDir(objects, id, name, options, (errs, files) => {\n let count = 0;\n if (files) {\n const zip = new JSZip();\n for (const file of files) {\n count++;\n _addFile(objects, id, file, options, zip, async err => {\n if (!--count) {\n try {\n const base64 = await zip.generateAsync({ type: 'base64' });\n callback(err, base64);\n } catch (e) {\n callback(e.message);\n }\n }\n });\n }\n }\n\n if (!count) {\n callback(errs?.length ? new Error(errs.join(', ')) : null);\n }\n });\n}\n\ninterface CheckDirOptions {\n objects: ObjectsClient;\n id: string;\n root: string;\n parts: string[];\n options: any;\n}\n\n/**\n * Check that directory exists recursive\n *\n * @param _options directory information and objects db\n */\nasync function _checkDir(_options: CheckDirOptions): Promise<void> {\n const { parts, id, options, objects } = _options;\n let { root } = _options;\n\n if (!parts?.length) {\n return;\n }\n\n root += `/${parts.shift()}`;\n\n try {\n await objects.readDirAsync(id, root, options);\n } catch (e) {\n if (e.message === tools.ERRORS.ERROR_NOT_FOUND) {\n await objects.mkdirAsync(id, root, options);\n }\n }\n\n return _checkDir({ id, objects, options, root, parts });\n}\n\nasync function _writeOneFile(\n objects: ObjectsClient,\n zip: JSZip,\n id: string,\n name: string,\n filename: string,\n options: any,\n): Promise<void> {\n const zipFile = zip.files[filename];\n\n if (!zipFile) {\n throw new Error(`Cannot write file \"${filename}\", because JSZip instance is incomplete`);\n }\n\n let data = await zipFile.async('nodebuffer');\n\n if (options.parse) {\n data = options.parse(name, filename, data, options ? options.settings : null);\n }\n const fName = name + filename;\n const parts = fName.split('/');\n parts.pop();\n\n await _checkDir({ objects, id, root: '', parts, options });\n return objects.writeFileAsync(id, name + filename, data, options);\n}\n\nexport async function writeDirAsZip(\n objects: ObjectsClient,\n id: string,\n name: string,\n data: Buffer,\n options: any,\n): Promise<void> {\n const zip = new JSZip();\n\n options = options || {};\n\n let adapter = id;\n if (adapter.includes('.')) {\n adapter = id.split('.')[0]!;\n }\n\n // try to load processor of adapter\n try {\n options.parse = (await import(`${tools.appName.toLowerCase()}.${adapter}/lib/convert.js`)).parse;\n } catch {\n // OK\n }\n\n await zip.loadAsync(data);\n const errors = [];\n if (name[name.length - 1] !== '/') {\n name += '/';\n }\n for (const filename of Object.keys(zip.files)) {\n if (!filename || filename[filename.length - 1] === '/') {\n continue;\n }\n try {\n await _writeOneFile(objects, zip, id, name, filename, options);\n } catch (e) {\n errors.push(`Cannot write file \"${filename}\": ${e.toString()}`);\n }\n }\n if (errors.length) {\n throw new Error(errors.join(', '));\n }\n}\n\n// pack all files as zip and send it back\nexport async function readObjectsAsZip(\n objects: ObjectsClient,\n rootId: string,\n adapter: string,\n options: any = {},\n): Promise<string> {\n if (adapter) {\n // try to load processor of adapter\n try {\n options.stringify = (await import(`${tools.appName.toLowerCase()}.${adapter}/lib/convert.js`)).stringify;\n } catch {\n // OK\n }\n }\n\n const keys = await objects.getKeysAsync(`${rootId}.*`, options);\n if (!keys) {\n throw new Error('No matching keys found');\n }\n\n const objs = await objects.getObjectsAsync(keys, options);\n const zip = new JSZip();\n\n for (const obj of objs) {\n const id = obj._id;\n\n let data: Record<string, any> = { id, data: obj };\n\n if (options.stringify) {\n try {\n data = options.stringify(data, options ? options.settings : null);\n } catch {\n data.id = `${id.replace(/\\./g, '/').substring(rootId.length + 1)}.json`;\n }\n } else {\n data.id = `${id.replace(/\\./g, '/').substring(rootId.length + 1)}.json`;\n }\n if (typeof data.data === 'object') {\n data.data = JSON.stringify(data.data, null, 2);\n }\n\n zip.file(data.id, data.data);\n }\n\n const base64 = await zip.generateAsync({ type: 'base64' });\n return base64;\n}\n\nasync function _writeOneObject(\n objects: ObjectsClient,\n zip: JSZip,\n rootId: string,\n filename: string,\n options: any,\n): Promise<void> {\n const zipFile = zip.files[filename];\n\n if (!zipFile) {\n throw new Error(`Cannot write file \"${filename}\", because JSZip instance is incomplete`);\n }\n\n const bufferData = await zipFile.async('nodebuffer');\n let data: Record<string, any> = { data: bufferData.toString(), id: filename };\n if (options.parse) {\n try {\n data = options.parse(data, options ? options.settings : null);\n } catch (e) {\n throw new Error(`Cannot custom parse \"${data.id}\": ${e}`);\n }\n } else {\n data.id = (rootId ? `${rootId}.` : '') + data.id.replace(/\\//g, '.').replace(/\\.json$/, '');\n }\n if (data && typeof data.data !== 'object') {\n try {\n data.data = JSON.parse(data.data);\n } catch (e) {\n throw new Error(`Cannot parse \"${data.id}\": ${e.message}`);\n }\n }\n if (data && data.id && data.data) {\n options.ts = new Date().getTime();\n options.from = `system.host.${tools.getHostName()}.cli`;\n await objects.setObject(data.id, data.data, options);\n return;\n }\n\n if (data?.error) {\n throw data.error;\n }\n}\n\nexport async function writeObjectsAsZip(\n objects: ObjectsClient,\n rootId: string,\n adapter: string,\n data: Buffer,\n options: any,\n callback: (err?: Error | null) => void,\n): Promise<void> {\n options = options || {};\n\n if (adapter) {\n // try to load processor of adapter\n try {\n options.parse = (await import(`${tools.appName.toLowerCase()}.${adapter}/lib/convert.js`)).parse;\n } catch {\n // OK\n }\n }\n\n const zip = new JSZip();\n const error: string[] = [];\n\n try {\n await zip.loadAsync(data);\n for (const filename of Object.keys(zip.files)) {\n if (filename[filename.length - 1] === '/') {\n continue;\n }\n\n try {\n await _writeOneObject(objects, zip, rootId, filename, options);\n } catch (e) {\n error.push(e.toString());\n }\n }\n } catch (e) {\n callback(e.toString());\n return;\n }\n\n callback(error.length ? new Error(error.join(', ')) : null);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["JSZip"]
|
|
7
7
|
}
|
|
@@ -9,13 +9,20 @@ import type { Client as StatesInRedisClient } from '@iobroker/db-states-redis';
|
|
|
9
9
|
import type { Client as ObjectsInRedisClient } from '@iobroker/db-objects-redis';
|
|
10
10
|
import type Winston from 'winston';
|
|
11
11
|
type MultilingualObject = Exclude<ioBroker.StringOrTranslated, string>;
|
|
12
|
+
/** Settings to configure an instance of NotificationHandler */
|
|
12
13
|
export interface NotificationHandlerSettings {
|
|
14
|
+
/** Name of the host (not id - hence, without `system.host.` prefix) */
|
|
13
15
|
host: string;
|
|
16
|
+
/** States DB instance */
|
|
14
17
|
states: StatesInRedisClient;
|
|
18
|
+
/** Objects DB instance */
|
|
15
19
|
objects: ObjectsInRedisClient;
|
|
20
|
+
/** Logger instance */
|
|
16
21
|
log: Winston.Logger | Console;
|
|
22
|
+
/** Prefix for the log messages */
|
|
17
23
|
logPrefix: string;
|
|
18
24
|
}
|
|
25
|
+
/** A notification config entry represents the top level of the notification structure */
|
|
19
26
|
export interface NotificationsConfigEntry {
|
|
20
27
|
/** e.g. system */
|
|
21
28
|
scope: string;
|
|
@@ -23,16 +30,23 @@ export interface NotificationsConfigEntry {
|
|
|
23
30
|
name: MultilingualObject;
|
|
24
31
|
/** multilingual description */
|
|
25
32
|
description: MultilingualObject;
|
|
33
|
+
/** The notification categories inside this scope */
|
|
26
34
|
categories: CategoryConfigEntry[];
|
|
27
35
|
}
|
|
28
36
|
export type Severity = 'info' | 'notify' | 'alert';
|
|
37
|
+
/** A notification category entry represents one of the categories of a scope */
|
|
29
38
|
export interface CategoryConfigEntry {
|
|
39
|
+
/** Id of the category */
|
|
30
40
|
category: string;
|
|
41
|
+
/** Name of the category */
|
|
31
42
|
name: MultilingualObject;
|
|
32
43
|
/** Allows defining the severity of the notification with `info` being the lowest, `notify` representing middle priority, `alert` representing high priority and often containing critical information */
|
|
33
44
|
severity: Severity;
|
|
45
|
+
/** Description of the category */
|
|
34
46
|
description: MultilingualObject;
|
|
47
|
+
/** Regex where `console.error` output is parsed against to check if a notification of this category should be generated */
|
|
35
48
|
regex: string[];
|
|
49
|
+
/** Restrict the maximum number of messages for this category */
|
|
36
50
|
limit: number;
|
|
37
51
|
}
|
|
38
52
|
interface NotificationMessageObject {
|
|
@@ -40,24 +54,27 @@ interface NotificationMessageObject {
|
|
|
40
54
|
ts: number;
|
|
41
55
|
contextData?: ioBroker.NotificationContextData;
|
|
42
56
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
name: MultilingualObject;
|
|
51
|
-
severity: Severity;
|
|
52
|
-
instances: {
|
|
53
|
-
[instance: string]: {
|
|
54
|
-
messages: NotificationMessageObject[];
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
};
|
|
57
|
+
interface FilteredNotificationCategory {
|
|
58
|
+
description: MultilingualObject;
|
|
59
|
+
name: MultilingualObject;
|
|
60
|
+
severity: Severity;
|
|
61
|
+
instances: {
|
|
62
|
+
[instance: string]: {
|
|
63
|
+
messages: NotificationMessageObject[];
|
|
58
64
|
};
|
|
59
65
|
};
|
|
60
66
|
}
|
|
67
|
+
interface FilteredNotificationScope {
|
|
68
|
+
description: MultilingualObject;
|
|
69
|
+
name: MultilingualObject;
|
|
70
|
+
categories: {
|
|
71
|
+
[category: string]: FilteredNotificationCategory;
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/** The filtered information as a response for `getFilteredInformation` */
|
|
75
|
+
export interface FilteredNotificationInformation {
|
|
76
|
+
[scope: string]: FilteredNotificationScope;
|
|
77
|
+
}
|
|
61
78
|
interface AddMessageOptions {
|
|
62
79
|
/** Scope of the message */
|
|
63
80
|
scope: string;
|
|
@@ -70,6 +87,9 @@ interface AddMessageOptions {
|
|
|
70
87
|
/** Additional context for the notification which can be used by notification processing adapters */
|
|
71
88
|
contextData?: ioBroker.NotificationContextData;
|
|
72
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* The Notification handler class provides an interface to manage the ioBroker notification system
|
|
92
|
+
*/
|
|
73
93
|
export declare class NotificationHandler {
|
|
74
94
|
private states;
|
|
75
95
|
private objects;
|
|
@@ -79,6 +99,11 @@ export declare class NotificationHandler {
|
|
|
79
99
|
private readonly setup;
|
|
80
100
|
private readonly logPrefix;
|
|
81
101
|
private readonly host;
|
|
102
|
+
/**
|
|
103
|
+
* Creates a new instance of the notification handler class
|
|
104
|
+
*
|
|
105
|
+
* @param settings settings to configure the handler instance
|
|
106
|
+
*/
|
|
82
107
|
constructor(settings: NotificationHandlerSettings);
|
|
83
108
|
/**
|
|
84
109
|
* Get all adapter instances on this host and store their notifications config - and clears up removed instances notifications - should be called once after init
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notificationHandler.d.ts","sourceRoot":"","sources":["../../../../src/lib/common/notificationHandler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;;AAKH,OAAO,KAAK,EAAE,MAAM,IAAI,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,MAAM,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,KAAK,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AAEvE,MAAM,WAAW,2BAA2B;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,GAAG,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACrC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,IAAI,EAAE,kBAAkB,CAAC;IACzB,+BAA+B;IAC/B,WAAW,EAAE,kBAAkB,CAAC;IAChC,UAAU,EAAE,mBAAmB,EAAE,CAAC;CACrC;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;IACzB,yMAAyM;IACzM,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,kBAAkB,CAAC;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,yBAAyB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,QAAQ,CAAC,uBAAuB,CAAC;CAClD;
|
|
1
|
+
{"version":3,"file":"notificationHandler.d.ts","sourceRoot":"","sources":["../../../../src/lib/common/notificationHandler.ts"],"names":[],"mappings":"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"}
|