dwh-fetch 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,606 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DwhFetch = exports.DwhResponse = exports.DwhLine = exports.parseFileInfo = exports.parseFileInfoOrThrow = exports.parseTimeString = exports.isValidValue = exports.isErrorValue = exports.WEB_BUS_PIN_ERR = exports.VALUE_ERROR_MASK = void 0;
7
+ const iconv_lite_1 = require("iconv-lite");
8
+ const superagent_1 = __importDefault(require("superagent"));
9
+ const DwhErrorCodes_1 = require("./DwhErrorCodes");
10
+ const rsa_1 = __importDefault(require("./rsa"));
11
+ exports.VALUE_ERROR_MASK = 0xffffffc0;
12
+ exports.WEB_BUS_PIN_ERR = 0x80000000;
13
+ function isErrorValue(val) {
14
+ // tslint:disable-next-line:no-bitwise
15
+ return (+val & exports.VALUE_ERROR_MASK) >>> 0 === exports.WEB_BUS_PIN_ERR;
16
+ }
17
+ exports.isErrorValue = isErrorValue;
18
+ function isValidValue(val) {
19
+ return !isErrorValue(val);
20
+ }
21
+ exports.isValidValue = isValidValue;
22
+ const monthMap = {
23
+ jan: 0,
24
+ feb: 1,
25
+ mar: 2,
26
+ apr: 3,
27
+ may: 4,
28
+ jun: 5,
29
+ jul: 6,
30
+ aug: 7,
31
+ sep: 8,
32
+ oct: 9,
33
+ nov: 10,
34
+ dec: 11,
35
+ };
36
+ /**
37
+ * Checks if date string from device contains a year.
38
+ * @param timeString Date String form ##GETDIRLINE()
39
+ * @returns true when date string contains a year.
40
+ */
41
+ function containsYear(timeString) {
42
+ return timeString[7] === ' ';
43
+ }
44
+ /**
45
+ * Parses 'Dec 18 2020' or 'Apr 13 14:25' to valid JavaScript date objects.
46
+ * @param dateTime Date time string returned from '##GETDIRLINE()'.
47
+ * @returns Date object or throws error.
48
+ */
49
+ function parseTimeString(timeString) {
50
+ const spl = timeString.split(/\s{1,}/);
51
+ if (spl.length != 3) {
52
+ throw new Error(`Failed to parse timeString in FileInfo: ${timeString}`);
53
+ }
54
+ const month = monthMap[spl[0].toLocaleLowerCase()];
55
+ if (month === undefined) {
56
+ throw new Error('Could not recognize month: ' + spl[0]);
57
+ }
58
+ const day = parseInt(spl[1]);
59
+ if (containsYear(timeString)) {
60
+ const year = parseInt(spl[2]);
61
+ return new Date(year, month, day, 0, 0, 0, 0);
62
+ }
63
+ else {
64
+ const year = new Date().getFullYear();
65
+ const splitTime = spl[2].split(':');
66
+ if (splitTime.length != 2) {
67
+ throw new Error(`Expected time but got ${spl[2]}`);
68
+ }
69
+ const hour = parseInt(splitTime[0]);
70
+ const minute = parseInt(splitTime[1]);
71
+ return new Date(year, month, day, hour, minute, 0, 0);
72
+ }
73
+ }
74
+ exports.parseTimeString = parseTimeString;
75
+ function parseFileInfoOrThrow(directory, line) {
76
+ const name = line.substring(45);
77
+ let path = directory;
78
+ if (!path.endsWith('/')) {
79
+ path += '/';
80
+ }
81
+ return {
82
+ name,
83
+ directory,
84
+ filePath: `${path}${name}`,
85
+ lastModified: parseTimeString(line.substring(32, 44)),
86
+ size: parseInt(line.substring(21, 30).trim()),
87
+ isDirectory: line[0] === 'd',
88
+ isReadOnly: line[1] === 'r',
89
+ };
90
+ }
91
+ exports.parseFileInfoOrThrow = parseFileInfoOrThrow;
92
+ function parseFileInfo(directory, line) {
93
+ try {
94
+ return parseFileInfoOrThrow(directory, line);
95
+ }
96
+ catch (e) {
97
+ return undefined;
98
+ }
99
+ }
100
+ exports.parseFileInfo = parseFileInfo;
101
+ class DwhLine {
102
+ constructor(value, success = true, expression = '') {
103
+ this.value = value;
104
+ this.success = success;
105
+ this.expression = expression;
106
+ // empty constructor
107
+ }
108
+ static fromString(line, expression = '') {
109
+ const regex = /^0([1-4])\("(.*)"\)$/;
110
+ const match = line.match(regex);
111
+ if (!match) {
112
+ throw new Error('failed to parse dwh line');
113
+ }
114
+ let resultString = match[2];
115
+ resultString = resultString.replace(/\\"/g, '"');
116
+ return new DwhLine(resultString, match[1] === '1' || match[1] === '3', expression);
117
+ }
118
+ toInt() {
119
+ const intValue = parseInt(this.value, 10);
120
+ if (isNaN(intValue)) {
121
+ throw new Error('Expected numeric value but got ' + this.value);
122
+ }
123
+ return intValue;
124
+ }
125
+ }
126
+ exports.DwhLine = DwhLine;
127
+ class DwhResponse {
128
+ constructor(accessRights = 0, lines = []) {
129
+ this.accessRights = accessRights;
130
+ this.lines = lines;
131
+ // empty constructor
132
+ }
133
+ }
134
+ exports.DwhResponse = DwhResponse;
135
+ class DwhFetch {
136
+ constructor(url, options) {
137
+ var _a, _b;
138
+ this.options = options;
139
+ this.url = '';
140
+ this.authorityToken = 0;
141
+ this.currentlyHandlingAuthFailure = false;
142
+ this.rsaKeys = '';
143
+ if (typeof url === 'string') {
144
+ this.removeDwhFile(url);
145
+ }
146
+ this.headers = (_a = options === null || options === void 0 ? void 0 : options.headers) !== null && _a !== void 0 ? _a : {};
147
+ this.rsaKeys = (_b = options === null || options === void 0 ? void 0 : options.rsaKeys) !== null && _b !== void 0 ? _b : '';
148
+ }
149
+ removeDwhFile(url) {
150
+ if (url.toLowerCase().endsWith('.dwh')) {
151
+ url = url.split('/').slice(0, -1).join('/');
152
+ }
153
+ if (url.endsWith('/')) {
154
+ url = url.slice(0, -1);
155
+ }
156
+ this.url = url;
157
+ }
158
+ createPostBody(expressions) {
159
+ return ('mg=' + this.authorityToken + '&' + expressions.map((e) => encodeURIComponent(e)).join('&'));
160
+ }
161
+ isMultiLineRequest(expression) {
162
+ return expression.indexOf('G=') === 0;
163
+ }
164
+ toIntOrThrow(str) {
165
+ const value = parseInt(str, 10);
166
+ if (isNaN(value)) {
167
+ throw new Error('Expected number bot got ' + str);
168
+ }
169
+ return value;
170
+ }
171
+ parseBody(expressions, body) {
172
+ var _a, _b;
173
+ let lines = body.split(/\r?\n/);
174
+ const response = new DwhResponse();
175
+ const accessRightsLine = lines[0];
176
+ if (!expressions.filter((expression) => !this.isMultiLineRequest(expression)).length) {
177
+ response.accessRights = this.toIntOrThrow(accessRightsLine);
178
+ }
179
+ else {
180
+ try {
181
+ response.accessRights = DwhLine.fromString(accessRightsLine, '').toInt();
182
+ }
183
+ catch (e) {
184
+ (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.log) === null || _b === void 0 ? void 0 : _b.error(`Parsing body failed`, e.message);
185
+ response.accessRights = this.toIntOrThrow(accessRightsLine);
186
+ }
187
+ }
188
+ lines = lines.slice(1);
189
+ response.lines = [];
190
+ let lineIndex = 0;
191
+ for (const expression of expressions) {
192
+ if (!this.isMultiLineRequest(expression)) {
193
+ response.lines.push(DwhLine.fromString(lines[lineIndex++], expression));
194
+ }
195
+ else {
196
+ const countLineString = lines[lineIndex++];
197
+ if (this.isErrorInMultiLineResult(countLineString)) {
198
+ response.lines.push(new DwhLine(this.getErrorCodeOfGResult(countLineString), false, expression));
199
+ }
200
+ else {
201
+ const count = this.toIntOrThrow(countLineString);
202
+ const countLinesPerRequest = expression.split('\t').length - 1;
203
+ if (!countLinesPerRequest) {
204
+ throw new Error("Multi line request doesn't have any expressions to solve. Result is undefined");
205
+ }
206
+ response.lines.push(new DwhLine('' + count, true, expression));
207
+ const lengthOfMultiLineResponseBody = count * countLinesPerRequest;
208
+ for (let i = 0; i < lengthOfMultiLineResponseBody; i++) {
209
+ const line = lines[lineIndex++];
210
+ if (this.isErrorInMultiLineResult(line)) {
211
+ response.lines.push(new DwhLine(this.getErrorCodeOfGResult(line), false, expression));
212
+ }
213
+ else {
214
+ response.lines.push(new DwhLine(line, true, expression));
215
+ }
216
+ }
217
+ }
218
+ }
219
+ }
220
+ return response;
221
+ }
222
+ dwhUrl() {
223
+ if (this.url === '') {
224
+ return 'a.dwh';
225
+ }
226
+ return `${this.url}/a.dwh`;
227
+ }
228
+ async fetchOrThrow(expressions) {
229
+ const result = await this.fetch(expressions);
230
+ this.throwOnError(result);
231
+ return result;
232
+ }
233
+ responseToText(response) {
234
+ //todo. test download file
235
+ return response.charset ? iconv_lite_1.decode(response.body, response.charset) : response.body.toString();
236
+ }
237
+ async fetch(expressions) {
238
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
239
+ (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.log) === null || _b === void 0 ? void 0 : _b.debug(`Fetching:`, expressions);
240
+ let postBody = this.createPostBody(expressions);
241
+ let rsa;
242
+ if (this.rsaKeys) {
243
+ rsa = new rsa_1.default();
244
+ if (rsa.decodeDwKeyStr(this.rsaKeys) !== 0) {
245
+ this.rsaKeys = '';
246
+ }
247
+ else {
248
+ postBody = rsa.encryptRequest(postBody);
249
+ }
250
+ }
251
+ (_d = (_c = this.options) === null || _c === void 0 ? void 0 : _c.log) === null || _d === void 0 ? void 0 : _d.debug(`Post Body:`, postBody);
252
+ let responseText = await this.sendPostBodyOrThrow(postBody);
253
+ if (this.rsaKeys) {
254
+ responseText = rsa.Decode(responseText, 0);
255
+ }
256
+ const result = this.parseBody(expressions, responseText);
257
+ if (((_e = this.options) === null || _e === void 0 ? void 0 : _e.authFallbackHandler) && !this.currentlyHandlingAuthFailure) {
258
+ if (this.isAuthFailure(result)) {
259
+ this.currentlyHandlingAuthFailure = true;
260
+ try {
261
+ await ((_g = (_f = this.options) === null || _f === void 0 ? void 0 : _f.authFallbackHandler) === null || _g === void 0 ? void 0 : _g.call(_f, this));
262
+ return await this.fetch(expressions);
263
+ }
264
+ catch (e) {
265
+ (_j = (_h = this.options) === null || _h === void 0 ? void 0 : _h.log) === null || _j === void 0 ? void 0 : _j.error(`Fetch failed`, e.message);
266
+ }
267
+ finally {
268
+ this.currentlyHandlingAuthFailure = false;
269
+ }
270
+ }
271
+ }
272
+ return result;
273
+ }
274
+ async sendPostBodyOrThrow(postBody) {
275
+ var _a, _b, _c, _d;
276
+ let response;
277
+ try {
278
+ response = await superagent_1.default
279
+ .post(this.dwhUrl())
280
+ .set(this.headers)
281
+ .timeout(this.getTimeout())
282
+ .responseType('arraybuffer')
283
+ .send(postBody);
284
+ }
285
+ catch (e) {
286
+ (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.log) === null || _b === void 0 ? void 0 : _b.error(`Fetch failed`, e.message);
287
+ throw e;
288
+ }
289
+ (_d = (_c = this.options) === null || _c === void 0 ? void 0 : _c.log) === null || _d === void 0 ? void 0 : _d.debug(`Response status:`, response.status);
290
+ if (response.status !== 200) {
291
+ throw new Error('Expected status to be 200');
292
+ }
293
+ return this.responseToText(response);
294
+ }
295
+ isAuthFailure(result) {
296
+ return !!result.lines
297
+ .filter((l) => !l.success)
298
+ .find((l) => {
299
+ const code = l.toInt();
300
+ return (code == DwhErrorCodes_1.DwhErrorCode.ERRORDW_COM_RD_SECURITY_IS_NOT_OK ||
301
+ code == DwhErrorCodes_1.DwhErrorCode.ERRORDW_COM_WR_SECURITY_IS_NOT_OK);
302
+ });
303
+ }
304
+ async fetchRsa() {
305
+ return this.fetchString('#$GETRSA()');
306
+ }
307
+ async initRsa() {
308
+ var _a;
309
+ this.rsaKeys = (_a = (await this.fetchRsa())) !== null && _a !== void 0 ? _a : '';
310
+ }
311
+ async fetchString(expression) {
312
+ return this.wrapDefault(async () => this.fetchStringOrThrow(expression), undefined);
313
+ }
314
+ async fetchStringOrThrow(expression) {
315
+ const response = await this.fetch([expression]);
316
+ this.throwOnError(response);
317
+ return response.lines[0].value;
318
+ }
319
+ async wrapDefault(call, defaultValueOnFailure) {
320
+ var _a, _b;
321
+ try {
322
+ return await call();
323
+ }
324
+ catch (e) {
325
+ (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.log) === null || _b === void 0 ? void 0 : _b.error(`Fetch failed`, e.message);
326
+ return defaultValueOnFailure;
327
+ }
328
+ }
329
+ async fetchNumber(expression) {
330
+ return this.wrapDefault(async () => this.fetchNumberOrThrow(expression), undefined);
331
+ }
332
+ throwFailure(lineWithError) {
333
+ throw new Error(`Dwh Expression failed with error code ${lineWithError.value} (${DwhErrorCodes_1.getDwhErrorString(lineWithError.toInt())}): ${lineWithError.expression}`);
334
+ }
335
+ async fetchNumberOrThrow(expression) {
336
+ const response = await this.fetchOrThrow([expression]);
337
+ const value = parseInt(response.lines[0].value, 10);
338
+ if (isNaN(value)) {
339
+ throw new Error('response is not a number');
340
+ }
341
+ return value;
342
+ }
343
+ async login(user, password) {
344
+ var _a;
345
+ this.authorityToken = (_a = (await this.fetchNumber(`##Login('${user}','${password}')`))) !== null && _a !== void 0 ? _a : 0;
346
+ return this.authorityToken !== 0;
347
+ }
348
+ setAuthorityToken(token) {
349
+ this.authorityToken = token;
350
+ }
351
+ async logout() {
352
+ const result = (await this.fetchNumber('##Logout()')) === 0;
353
+ if (result) {
354
+ this.authorityToken = 0;
355
+ this.rsaKeys = '';
356
+ }
357
+ return result;
358
+ }
359
+ isErrorInMultiLineResult(countLineString) {
360
+ return !!countLineString.match(/^ERR(-[0-9]{1,3})$/);
361
+ }
362
+ getErrorCodeOfGResult(countLineString) {
363
+ return countLineString.substring(3);
364
+ }
365
+ /* istanbul ignore next */
366
+ decodeBackdoorKey(keyIn) {
367
+ let exp = 1;
368
+ let keyOut = 0;
369
+ let off = 3;
370
+ for (let mode = 0; mode < 6; mode++) {
371
+ let val = Math.floor(keyIn / exp);
372
+ switch (mode) {
373
+ case 1: // -7
374
+ case 5: // +3
375
+ off = 3;
376
+ break;
377
+ case 2: // -3
378
+ case 4: // +7
379
+ off = 7;
380
+ break;
381
+ case 3: // *3
382
+ case 0: // *7
383
+ val = val * (10 - off);
384
+ off = 0;
385
+ break;
386
+ }
387
+ keyOut += ((val + off) % 10) * exp;
388
+ exp *= 10;
389
+ }
390
+ return keyOut;
391
+ }
392
+ async executePostAndReturnFirstLine(requestBody) {
393
+ const response = await superagent_1.default
394
+ .post(this.dwhUrl())
395
+ .responseType('arraybuffer')
396
+ .set(this.headers)
397
+ .timeout(this.getTimeout())
398
+ .send(requestBody);
399
+ if (response.status !== 200) {
400
+ throw new Error('expected status code 200');
401
+ }
402
+ const text = this.responseToText(response);
403
+ return text.split(/\r?\n/)[0];
404
+ }
405
+ /* istanbul ignore next */
406
+ async useBackdoor() {
407
+ const key = await this.executePostAndReturnFirstLine('user=backdoor');
408
+ const decryptedKey = this.decodeBackdoorKey(parseInt(key));
409
+ const loginString = await this.executePostAndReturnFirstLine('password=' + decryptedKey);
410
+ if (!loginString) {
411
+ // throw new Error('Did not expect an empty response after using backdoor');
412
+ return false;
413
+ }
414
+ const userAndPassword = loginString.split(',');
415
+ if (userAndPassword.length != 2) {
416
+ //throw new Error('expected exactly 2 comma separated fields when decoding backdoor');
417
+ return false;
418
+ }
419
+ if (!(await this.login(userAndPassword[0], userAndPassword[1]))) {
420
+ return false;
421
+ }
422
+ return true;
423
+ }
424
+ async getCurrentRights() {
425
+ var _a;
426
+ return (_a = (await this.fetchNumber('##AllowedAereas()'))) !== null && _a !== void 0 ? _a : 0;
427
+ }
428
+ hasError(result) {
429
+ return !result.lines.find((l) => !l.success);
430
+ }
431
+ throwOnError(result) {
432
+ const lineWithError = result.lines.find((l) => !l.success);
433
+ if (lineWithError) {
434
+ this.throwFailure(lineWithError);
435
+ }
436
+ }
437
+ async fetchDirectoryLines(pathWithPattern, options) {
438
+ var _a;
439
+ let linesToFetch = (_a = options === null || options === void 0 ? void 0 : options.startLines) !== null && _a !== void 0 ? _a : 50;
440
+ while (true) {
441
+ const exp = [
442
+ `##h:=##GETDIRHANDLE('${pathWithPattern}')`,
443
+ `G=${linesToFetch}\t#$GETDIRLINE(##h)`,
444
+ ];
445
+ const result = await this.fetch(exp);
446
+ this.throwOnError(result);
447
+ const files = result.lines
448
+ .map((line) => line.value)
449
+ .filter((line) => line.length)
450
+ .slice(2);
451
+ if (files.length < linesToFetch) {
452
+ return files;
453
+ }
454
+ if (linesToFetch > 4000)
455
+ throw new Error('more than 4.000 rows are not supported. Trying to prevent deadlock ' + 'here. ');
456
+ linesToFetch *= 2;
457
+ }
458
+ }
459
+ async files(pathWithPattern, options) {
460
+ const lines = await this.fetchDirectoryLines(pathWithPattern, options);
461
+ const path = pathWithPattern.split('/').slice(0, -1).join('/');
462
+ return lines
463
+ .map((line) => parseFileInfoOrThrow(path, line))
464
+ .filter((f) => f.name !== '.' && f.name !== '..');
465
+ }
466
+ async uploadFile(path, content) {
467
+ var _a;
468
+ const response = await superagent_1.default
469
+ .post(this.dwhUrl())
470
+ .responseType('arraybuffer')
471
+ .set(this.headers)
472
+ .field('mg', `${this.authorityToken}`)
473
+ .attach(path, content, { filename: path });
474
+ if (response.status !== 200)
475
+ return false;
476
+ const spl = this.responseToText(response).split(/\r?\n/);
477
+ if (spl.length < 2)
478
+ return false;
479
+ if (spl[1] === '§§§') {
480
+ if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.authFallbackHandler) && !this.currentlyHandlingAuthFailure) {
481
+ this.currentlyHandlingAuthFailure = true;
482
+ try {
483
+ await this.options.authFallbackHandler(this);
484
+ return await this.uploadFile(path, content);
485
+ }
486
+ finally {
487
+ this.currentlyHandlingAuthFailure = false;
488
+ }
489
+ }
490
+ return false;
491
+ }
492
+ const uploadStatus = parseInt(spl[1]);
493
+ return uploadStatus === 0;
494
+ }
495
+ // eslint-disable-next-line @typescript-eslint/promise-function-async
496
+ downloadFile(path, options) {
497
+ var _a;
498
+ const raw = (_a = options === null || options === void 0 ? void 0 : options.raw) !== null && _a !== void 0 ? _a : true;
499
+ if (path[0] === '/')
500
+ path = path.substr(1);
501
+ return superagent_1.default
502
+ .get(this.createFileUrl(path))
503
+ .set(this.headers)
504
+ .query(Object.assign({ mg: this.authorityToken }, (raw && { RAW: 1 })))
505
+ .timeout(this.getTimeout());
506
+ }
507
+ createFileUrl(path) {
508
+ if (this.url === '') {
509
+ return path;
510
+ }
511
+ return `${this.url}/${path}`;
512
+ }
513
+ async downloadFileAsString(path, options) {
514
+ var _a, _b, _c;
515
+ const response = await this.downloadFile(path, options).responseType('arraybuffer');
516
+ if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.authFallbackHandler) &&
517
+ !this.currentlyHandlingAuthFailure &&
518
+ response.status === 401) {
519
+ this.currentlyHandlingAuthFailure = true;
520
+ try {
521
+ (_c = (_b = this.options) === null || _b === void 0 ? void 0 : _b.authFallbackHandler) === null || _c === void 0 ? void 0 : _c.call(_b, this);
522
+ return await this.downloadFileAsString(path, options);
523
+ }
524
+ finally {
525
+ this.currentlyHandlingAuthFailure = false;
526
+ }
527
+ }
528
+ if (response.status !== 200) {
529
+ throw new Error(`Failed with status code ${response.status}`);
530
+ }
531
+ return this.responseToText(response);
532
+ }
533
+ async mkdir(path) {
534
+ return (await this.fetchNumber(`##MKDIR('${path}')`)) == 0;
535
+ }
536
+ /**
537
+ * Removes an EMPTY directory from digiweb.
538
+ * @param path empty directory to remove
539
+ * @returns 0 when success.
540
+ */
541
+ async removeDir(path) {
542
+ return (await this.fetchNumber(`##RMDIR('${path}')`)) == 0;
543
+ }
544
+ /**
545
+ * Removes directory recursive. Aborts when error occur
546
+ * trying to delete file or directory inside path.
547
+ * @param path directory to remove
548
+ * @returns 0 when success.
549
+ */
550
+ async removeDirRecursively(path) {
551
+ const files = await this.files(path + '/*');
552
+ for (let i = 0; i < files.length; i++) {
553
+ const fileInfo = files[i];
554
+ let result = false;
555
+ if (fileInfo.isDirectory) {
556
+ result = await this.removeDirRecursively(fileInfo.filePath);
557
+ }
558
+ else {
559
+ result = await this.deleteFile(fileInfo.filePath);
560
+ }
561
+ if (!result) {
562
+ return false;
563
+ }
564
+ }
565
+ return await this.removeDir(path);
566
+ }
567
+ async deleteFile(file) {
568
+ return (await this.fetchNumber(`##DELFILE('${file}')`)) == 0;
569
+ }
570
+ async getFileInfo(file) {
571
+ var _a;
572
+ const result = (_a = (await this.fetchString(`#$GETDIRLINE(##GETDIRHANDLE('${file}'))`))) !== null && _a !== void 0 ? _a : '';
573
+ const fileInfo = parseFileInfo(file, result);
574
+ return fileInfo;
575
+ }
576
+ async exists(digiwebFilename) {
577
+ const fileInfo = await this.getFileInfo(digiwebFilename);
578
+ return !!fileInfo;
579
+ }
580
+ async isFile(digiwebFilename) {
581
+ const fileInfo = await this.getFileInfo(digiwebFilename);
582
+ return fileInfo ? !fileInfo.isDirectory : false;
583
+ }
584
+ async isDirectory(digiwebFilename) {
585
+ const fileInfo = await this.getFileInfo(digiwebFilename);
586
+ return fileInfo ? fileInfo.isDirectory : false;
587
+ }
588
+ async restart() {
589
+ await this.fetchNumber('##000186b2:=1');
590
+ }
591
+ /**
592
+ * Creates timeout for superagent.
593
+ * @returns timeout in ms.
594
+ */
595
+ getTimeout() {
596
+ var _a, _b, _c, _d;
597
+ return {
598
+ deadline: (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.timeoutDeadline) !== null && _b !== void 0 ? _b : DwhFetch.DEFAULT_TIMEOUT_DEADLINE,
599
+ response: (_d = (_c = this.options) === null || _c === void 0 ? void 0 : _c.timeoutResponse) !== null && _d !== void 0 ? _d : DwhFetch.DEFAULT_TIMEOUT_RESPONSE,
600
+ };
601
+ }
602
+ }
603
+ exports.DwhFetch = DwhFetch;
604
+ DwhFetch.DEFAULT_TIMEOUT_RESPONSE = 7000;
605
+ DwhFetch.DEFAULT_TIMEOUT_DEADLINE = 1000 * 60 * 5;
606
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHdoLWZldGNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9kd2gtZmV0Y2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkNBQW9DO0FBQ3BDLDREQUFvQztBQUVwQyxtREFBa0U7QUFDbEUsZ0RBQXdCO0FBRVgsUUFBQSxnQkFBZ0IsR0FBRyxVQUFVLENBQUM7QUFDOUIsUUFBQSxlQUFlLEdBQUcsVUFBVSxDQUFDO0FBRTFDLFNBQWdCLFlBQVksQ0FBQyxHQUFRO0lBQ25DLHNDQUFzQztJQUN0QyxPQUFPLENBQUMsQ0FBQyxHQUFHLEdBQUcsd0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssdUJBQWUsQ0FBQztBQUM3RCxDQUFDO0FBSEQsb0NBR0M7QUFDRCxTQUFnQixZQUFZLENBQUMsR0FBUTtJQUNuQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFGRCxvQ0FFQztBQXVCRCxNQUFNLFFBQVEsR0FBNEI7SUFDeEMsR0FBRyxFQUFFLENBQUM7SUFDTixHQUFHLEVBQUUsQ0FBQztJQUNOLEdBQUcsRUFBRSxDQUFDO0lBQ04sR0FBRyxFQUFFLENBQUM7SUFDTixHQUFHLEVBQUUsQ0FBQztJQUNOLEdBQUcsRUFBRSxDQUFDO0lBQ04sR0FBRyxFQUFFLENBQUM7SUFDTixHQUFHLEVBQUUsQ0FBQztJQUNOLEdBQUcsRUFBRSxDQUFDO0lBQ04sR0FBRyxFQUFFLENBQUM7SUFDTixHQUFHLEVBQUUsRUFBRTtJQUNQLEdBQUcsRUFBRSxFQUFFO0NBQ1IsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxVQUFrQjtJQUN0QyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7QUFDL0IsQ0FBQztBQUNEOzs7O0dBSUc7QUFDSCxTQUFnQixlQUFlLENBQUMsVUFBa0I7SUFDaEQsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUss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
@@ -0,0 +1,26 @@
1
+ import { DwhFetch, DwhLine } from './dwh-fetch';
2
+ export interface ExpressionDefinition<T> {
3
+ expression: string;
4
+ required: boolean;
5
+ converter: (result: string) => T;
6
+ }
7
+ export declare type ExpressionDefinitionType<T> = ExpressionDefinition<T> | null;
8
+ export declare type ExpressionDefinitions<T> = {
9
+ readonly [P in keyof T]-?: ExpressionDefinitionType<T[P]>;
10
+ };
11
+ export declare class Expression {
12
+ static string(expression: string, required?: boolean): ExpressionDefinition<string>;
13
+ static integer(expression: string, required?: boolean): ExpressionDefinition<number>;
14
+ static integerOrUndefinedOnError(expression: string, required?: boolean): ExpressionDefinition<number | undefined>;
15
+ static boolean(expression: string, required?: boolean): ExpressionDefinition<boolean>;
16
+ static double(expression: string, required?: boolean): ExpressionDefinition<number>;
17
+ static enum<T>(expression: string, type: T, required?: boolean): ExpressionDefinition<T[keyof T]>;
18
+ }
19
+ export declare type Replacements = {
20
+ [P: string]: string;
21
+ };
22
+ export declare function replace(expression: string, replacements?: Replacements): string;
23
+ export declare function getDwhExpressions<T>(expressionDefinitions: ExpressionDefinitions<T>, replacements?: Replacements): string[];
24
+ export declare function mapResults<T>(lines: DwhLine[], expressionDefinitions: ExpressionDefinitions<T>, replacements?: Replacements): T;
25
+ export declare function fetchExpressions<T>(dwhFetch: DwhFetch, expressions: ExpressionDefinitions<T>, replacements?: Replacements): Promise<T>;
26
+ export declare function fetchIndexed<T>(dwhFetch: DwhFetch, countExpression: string, expressions: ExpressionDefinitions<T>, replacements?: Replacements): Promise<T[]>;