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.
- package/README.md +114 -0
- package/dist/dwh-fetch.d.ts +1 -0
- package/dist/dwh-fetch.js +15 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +18 -0
- package/dist/lib/DwhErrorCodes.d.ts +93 -0
- package/dist/lib/DwhErrorCodes.js +103 -0
- package/dist/lib/backup/dwh-backup.d.ts +38 -0
- package/dist/lib/backup/dwh-backup.js +143 -0
- package/dist/lib/dwh-fetch.d.ts +149 -0
- package/dist/lib/dwh-fetch.js +606 -0
- package/dist/lib/fetch-indexed.d.ts +26 -0
- package/dist/lib/fetch-indexed.js +124 -0
- package/dist/lib/rsa.d.ts +2 -0
- package/dist/lib/rsa.js +902 -0
- package/dist/lib/update/dwh-update.d.ts +114 -0
- package/dist/lib/update/dwh-update.js +289 -0
- package/package.json +104 -0
- package/test-resources/backup/.gitkeep +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import { DwhFetch } from '../dwh-fetch';
|
|
4
|
+
import { Logger } from 'tslog';
|
|
5
|
+
export declare type UnzipFn = (src: string, dst: string) => Promise<boolean>;
|
|
6
|
+
export declare function delay(ms: number): Promise<unknown>;
|
|
7
|
+
export interface DwhUpdateOptions {
|
|
8
|
+
tmpDirectoryPrefix?: string;
|
|
9
|
+
log?: Logger;
|
|
10
|
+
/**
|
|
11
|
+
* Max waiting time for device to response after restart in milliseconds.
|
|
12
|
+
*/
|
|
13
|
+
waitForRestartMs?: number;
|
|
14
|
+
/**
|
|
15
|
+
* Minimum delay for request ##000187 on the device.
|
|
16
|
+
*/
|
|
17
|
+
minDelayAfterRestartCheck?: number;
|
|
18
|
+
/**
|
|
19
|
+
* Handler to valid if device needs restart after update.
|
|
20
|
+
* Default checks file extension for .blt.
|
|
21
|
+
* @param file to check.
|
|
22
|
+
* @returns true -> needs restart otherwise false.
|
|
23
|
+
*/
|
|
24
|
+
restartFileValidationHandler?: (file: string) => boolean;
|
|
25
|
+
/**
|
|
26
|
+
* You can set a handler to filter in your application if a file should be uploaded or skipped.
|
|
27
|
+
* @returns true -> file should process, false -> skip.
|
|
28
|
+
*/
|
|
29
|
+
processingFileHandler?: (file: string, stats: fs.Stats) => boolean;
|
|
30
|
+
}
|
|
31
|
+
export declare class DwhUpdate {
|
|
32
|
+
dwhFetch: DwhFetch;
|
|
33
|
+
private restartAfterUpdate;
|
|
34
|
+
processedFileCount: number;
|
|
35
|
+
/**
|
|
36
|
+
* Total number of files during the update.
|
|
37
|
+
*/
|
|
38
|
+
fileCountOfCurrentUpdate: number;
|
|
39
|
+
options: Required<DwhUpdateOptions>;
|
|
40
|
+
/**
|
|
41
|
+
* DwhFetch Instance should be valid with authority token. Because it will be used to upload files.
|
|
42
|
+
* @param dwhFetch
|
|
43
|
+
*/
|
|
44
|
+
constructor(dwhFetch: DwhFetch, options?: DwhUpdateOptions);
|
|
45
|
+
/**
|
|
46
|
+
* Updates a device via zip file. The zip file will be unzipped in a temporary directory.
|
|
47
|
+
* The zip function is passed as an argument and the application can decide which lib should be used.
|
|
48
|
+
* @param zip file to update on the device.
|
|
49
|
+
* @param unzipFn callback function from the application to unzip the files via custom unzip library.
|
|
50
|
+
* @returns true when update was successful otherwise false.
|
|
51
|
+
*/
|
|
52
|
+
update(zip: string, unzipFn: UnzipFn): Promise<boolean>;
|
|
53
|
+
/**
|
|
54
|
+
* Creates temporary directory and unzips file.
|
|
55
|
+
* @param zip file to unzip
|
|
56
|
+
* @param unzipFn zipper function.
|
|
57
|
+
* @returns temporary filename on success otherwise null.
|
|
58
|
+
*/
|
|
59
|
+
unzip(zip: string, unzipFn: UnzipFn): Promise<string | null>;
|
|
60
|
+
/**
|
|
61
|
+
* Creates temporary directory.
|
|
62
|
+
* @returns file name of crated temporary folder.
|
|
63
|
+
*/
|
|
64
|
+
createTempDirectory(): Promise<string>;
|
|
65
|
+
/**
|
|
66
|
+
* Updates the files in the directory on the device.
|
|
67
|
+
* When .blt files are updated too the device will be restarted.
|
|
68
|
+
* @param dir files to update.
|
|
69
|
+
* @returns true when update was successful otherwise false.
|
|
70
|
+
*/
|
|
71
|
+
updateFromDirectory(dir: string): Promise<boolean>;
|
|
72
|
+
/**
|
|
73
|
+
* Restarts device and waits for response.
|
|
74
|
+
* @returns true when succeeded or false when device does not respond.
|
|
75
|
+
*/
|
|
76
|
+
restart(): Promise<boolean>;
|
|
77
|
+
/**
|
|
78
|
+
* Checks if the device should be restarted.
|
|
79
|
+
* @param file file to check.
|
|
80
|
+
* @returns true -> device restarts after update.
|
|
81
|
+
*/
|
|
82
|
+
private isRestartNecessary;
|
|
83
|
+
private countFilesInternal;
|
|
84
|
+
/**
|
|
85
|
+
* Count files in given directory.
|
|
86
|
+
* @param dir directory to count files in.
|
|
87
|
+
* @returns file count.
|
|
88
|
+
*/
|
|
89
|
+
countFiles(dir: string): Promise<number>;
|
|
90
|
+
private updateRecursively;
|
|
91
|
+
/**
|
|
92
|
+
* Creates relative filename from updated directory for the device.
|
|
93
|
+
* @param file file to update.
|
|
94
|
+
* @param dir directory of update.
|
|
95
|
+
* @returns filename on the digiweb.
|
|
96
|
+
*/
|
|
97
|
+
createDigiwebFilename(file: string, dir: string): string;
|
|
98
|
+
/**
|
|
99
|
+
* Creates directory on the device. If a file with the same name exists it will be deleted.
|
|
100
|
+
* If directory already exists nothing happens and method returns true.
|
|
101
|
+
* @param digiwebFilename filename on the device
|
|
102
|
+
* @returns false when error occurs making dir otherwise true.
|
|
103
|
+
*/
|
|
104
|
+
makeDir(digiwebFilename: string): Promise<boolean>;
|
|
105
|
+
private makeDirInternal;
|
|
106
|
+
/**
|
|
107
|
+
* Uploads file to device. When a directory with the same name exists it will be deleted.
|
|
108
|
+
* @param filename file on your system.
|
|
109
|
+
* @param digiwebFilename filename on the device.
|
|
110
|
+
* @returns true on success false when error occurs.
|
|
111
|
+
*/
|
|
112
|
+
updateFile(filename: string, digiwebFilename: string): Promise<boolean>;
|
|
113
|
+
isRestartAfterUpdate(): boolean;
|
|
114
|
+
}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.DwhUpdate = exports.delay = void 0;
|
|
26
|
+
const fs = __importStar(require("fs"));
|
|
27
|
+
const os_1 = __importDefault(require("os"));
|
|
28
|
+
const path_1 = require("path");
|
|
29
|
+
const tslog_1 = require("tslog");
|
|
30
|
+
async function delay(ms) {
|
|
31
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
32
|
+
}
|
|
33
|
+
exports.delay = delay;
|
|
34
|
+
class DwhUpdate {
|
|
35
|
+
/**
|
|
36
|
+
* DwhFetch Instance should be valid with authority token. Because it will be used to upload files.
|
|
37
|
+
* @param dwhFetch
|
|
38
|
+
*/
|
|
39
|
+
constructor(dwhFetch, options) {
|
|
40
|
+
this.dwhFetch = dwhFetch;
|
|
41
|
+
this.restartAfterUpdate = false;
|
|
42
|
+
this.processedFileCount = 0;
|
|
43
|
+
/**
|
|
44
|
+
* Total number of files during the update.
|
|
45
|
+
*/
|
|
46
|
+
this.fileCountOfCurrentUpdate = 0;
|
|
47
|
+
this.options = {
|
|
48
|
+
tmpDirectoryPrefix: 'dwhUpdate',
|
|
49
|
+
log: new tslog_1.Logger(),
|
|
50
|
+
waitForRestartMs: 30000,
|
|
51
|
+
minDelayAfterRestartCheck: 1000,
|
|
52
|
+
restartFileValidationHandler: (file) => {
|
|
53
|
+
return file.toLowerCase().endsWith('.blt');
|
|
54
|
+
},
|
|
55
|
+
processingFileHandler: () => true,
|
|
56
|
+
};
|
|
57
|
+
Object.assign(this.options, options);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Updates a device via zip file. The zip file will be unzipped in a temporary directory.
|
|
61
|
+
* The zip function is passed as an argument and the application can decide which lib should be used.
|
|
62
|
+
* @param zip file to update on the device.
|
|
63
|
+
* @param unzipFn callback function from the application to unzip the files via custom unzip library.
|
|
64
|
+
* @returns true when update was successful otherwise false.
|
|
65
|
+
*/
|
|
66
|
+
async update(zip, unzipFn) {
|
|
67
|
+
const tmpDir = await this.unzip(zip, unzipFn);
|
|
68
|
+
if (tmpDir !== null) {
|
|
69
|
+
return await this.updateFromDirectory(tmpDir);
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Creates temporary directory and unzips file.
|
|
75
|
+
* @param zip file to unzip
|
|
76
|
+
* @param unzipFn zipper function.
|
|
77
|
+
* @returns temporary filename on success otherwise null.
|
|
78
|
+
*/
|
|
79
|
+
async unzip(zip, unzipFn) {
|
|
80
|
+
const tmpDir = await this.createTempDirectory();
|
|
81
|
+
try {
|
|
82
|
+
const result = await unzipFn(zip, tmpDir);
|
|
83
|
+
if (result) {
|
|
84
|
+
return tmpDir;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
this.options.log.error(e);
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Creates temporary directory.
|
|
94
|
+
* @returns file name of crated temporary folder.
|
|
95
|
+
*/
|
|
96
|
+
async createTempDirectory() {
|
|
97
|
+
return await fs.promises.mkdtemp(path_1.join(os_1.default.tmpdir(), this.options.tmpDirectoryPrefix));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Updates the files in the directory on the device.
|
|
101
|
+
* When .blt files are updated too the device will be restarted.
|
|
102
|
+
* @param dir files to update.
|
|
103
|
+
* @returns true when update was successful otherwise false.
|
|
104
|
+
*/
|
|
105
|
+
async updateFromDirectory(dir) {
|
|
106
|
+
this.restartAfterUpdate = false;
|
|
107
|
+
const stat = await fs.promises.lstat(dir);
|
|
108
|
+
if (stat.isDirectory()) {
|
|
109
|
+
this.fileCountOfCurrentUpdate = await this.countFiles(dir);
|
|
110
|
+
const result = await this.updateRecursively(dir, dir);
|
|
111
|
+
if (result) {
|
|
112
|
+
if (this.restartAfterUpdate) {
|
|
113
|
+
return await this.restart();
|
|
114
|
+
}
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
this.options.log.error(`Update failed! Cancelling process.`);
|
|
118
|
+
}
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Restarts device and waits for response.
|
|
123
|
+
* @returns true when succeeded or false when device does not respond.
|
|
124
|
+
*/
|
|
125
|
+
async restart() {
|
|
126
|
+
this.options.log.info(`Restarting device.`);
|
|
127
|
+
let result = false;
|
|
128
|
+
await this.dwhFetch.restart();
|
|
129
|
+
let elapsedMs = 0;
|
|
130
|
+
while (elapsedMs < this.options.waitForRestartMs) {
|
|
131
|
+
const startTime = Date.now();
|
|
132
|
+
try {
|
|
133
|
+
await this.dwhFetch.fetchNumberOrThrow('##000187');
|
|
134
|
+
this.options.log.info(`Device restarted after ${elapsedMs} ms.`);
|
|
135
|
+
result = true;
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
catch (e) {
|
|
139
|
+
let timeDiff = Date.now() - startTime;
|
|
140
|
+
if (timeDiff < this.options.minDelayAfterRestartCheck) {
|
|
141
|
+
await delay(this.options.minDelayAfterRestartCheck);
|
|
142
|
+
timeDiff += this.options.minDelayAfterRestartCheck;
|
|
143
|
+
}
|
|
144
|
+
elapsedMs += timeDiff;
|
|
145
|
+
this.options.log.info(`Waiting for device response ${elapsedMs} ms.`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (!result) {
|
|
149
|
+
this.options.log.error(`Device not responding after restart!`);
|
|
150
|
+
}
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Checks if the device should be restarted.
|
|
155
|
+
* @param file file to check.
|
|
156
|
+
* @returns true -> device restarts after update.
|
|
157
|
+
*/
|
|
158
|
+
isRestartNecessary(file) {
|
|
159
|
+
return this.options.restartFileValidationHandler(file);
|
|
160
|
+
}
|
|
161
|
+
async countFilesInternal(dir, count = 0) {
|
|
162
|
+
const files = await fs.promises.readdir(dir);
|
|
163
|
+
for (let i = 0; i < files.length; i++) {
|
|
164
|
+
const file = path_1.join(dir, files[i]);
|
|
165
|
+
const fileStats = await fs.promises.lstat(file);
|
|
166
|
+
if (fileStats.isDirectory()) {
|
|
167
|
+
count += await this.countFilesInternal(file, 0);
|
|
168
|
+
}
|
|
169
|
+
count++;
|
|
170
|
+
}
|
|
171
|
+
return count;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Count files in given directory.
|
|
175
|
+
* @param dir directory to count files in.
|
|
176
|
+
* @returns file count.
|
|
177
|
+
*/
|
|
178
|
+
async countFiles(dir) {
|
|
179
|
+
return this.countFilesInternal(dir, 0);
|
|
180
|
+
}
|
|
181
|
+
async updateRecursively(currentDir, rootDir) {
|
|
182
|
+
const files = await fs.promises.readdir(currentDir);
|
|
183
|
+
for (let i = 0; i < files.length; i++) {
|
|
184
|
+
this.processedFileCount += i;
|
|
185
|
+
const file = path_1.join(currentDir, files[i]);
|
|
186
|
+
const fileStats = await fs.promises.lstat(file);
|
|
187
|
+
const processFile = await this.options.processingFileHandler(file, fileStats);
|
|
188
|
+
if (processFile) {
|
|
189
|
+
let result;
|
|
190
|
+
const digiwebFilename = this.createDigiwebFilename(file, rootDir);
|
|
191
|
+
if (fileStats.isDirectory()) {
|
|
192
|
+
this.options.log.info(`Making dir: ${digiwebFilename}.`);
|
|
193
|
+
result = await this.makeDir(digiwebFilename);
|
|
194
|
+
if (result) {
|
|
195
|
+
result = await this.updateRecursively(file, rootDir);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
this.options.log.info(`Updating file filename: ${file}.`);
|
|
200
|
+
result = await this.updateFile(file, digiwebFilename);
|
|
201
|
+
}
|
|
202
|
+
if (!result) {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
this.options.log.info(`Ignoring file: ${file}.`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Creates relative filename from updated directory for the device.
|
|
214
|
+
* @param file file to update.
|
|
215
|
+
* @param dir directory of update.
|
|
216
|
+
* @returns filename on the digiweb.
|
|
217
|
+
*/
|
|
218
|
+
createDigiwebFilename(file, dir) {
|
|
219
|
+
return file.substr(dir.length);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Creates directory on the device. If a file with the same name exists it will be deleted.
|
|
223
|
+
* If directory already exists nothing happens and method returns true.
|
|
224
|
+
* @param digiwebFilename filename on the device
|
|
225
|
+
* @returns false when error occurs making dir otherwise true.
|
|
226
|
+
*/
|
|
227
|
+
async makeDir(digiwebFilename) {
|
|
228
|
+
const fileInfo = await this.dwhFetch.getFileInfo(digiwebFilename);
|
|
229
|
+
if (fileInfo) {
|
|
230
|
+
if (fileInfo.size > 0) {
|
|
231
|
+
// File already exists but its not a directory on the digiweb.
|
|
232
|
+
// Before making directory file should be deleted.
|
|
233
|
+
const result = await this.dwhFetch.deleteFile(digiwebFilename);
|
|
234
|
+
if (!result) {
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
return this.makeDirInternal(digiwebFilename);
|
|
238
|
+
}
|
|
239
|
+
else if (fileInfo.size === 0) {
|
|
240
|
+
this.options.log.info(`Directory: ${digiwebFilename} already exists. Skipping mkdir.`);
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return this.makeDirInternal(digiwebFilename);
|
|
245
|
+
}
|
|
246
|
+
async makeDirInternal(digiwebFilename) {
|
|
247
|
+
const result = await this.dwhFetch.mkdir(digiwebFilename);
|
|
248
|
+
if (!result) {
|
|
249
|
+
this.options.log.error(`Making dir failed! Dir: ${digiwebFilename}.`);
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Uploads file to device. When a directory with the same name exists it will be deleted.
|
|
256
|
+
* @param filename file on your system.
|
|
257
|
+
* @param digiwebFilename filename on the device.
|
|
258
|
+
* @returns true on success false when error occurs.
|
|
259
|
+
*/
|
|
260
|
+
async updateFile(filename, digiwebFilename) {
|
|
261
|
+
const isDirectory = await this.dwhFetch.isDirectory(digiwebFilename);
|
|
262
|
+
if (isDirectory) {
|
|
263
|
+
// File exists but its an directory.
|
|
264
|
+
// Before updating file the directory should be deleted.
|
|
265
|
+
const result = await this.dwhFetch.removeDirRecursively(digiwebFilename);
|
|
266
|
+
if (!result) {
|
|
267
|
+
this.options.log.error(`Failed deleting directory: ${digiwebFilename} to update file.`);
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
const fileContent = await fs.promises.readFile(filename);
|
|
272
|
+
const uploadResult = await this.dwhFetch.uploadFile(digiwebFilename, fileContent);
|
|
273
|
+
const fileInfo = await this.dwhFetch.getFileInfo(digiwebFilename);
|
|
274
|
+
const fileStats = await fs.promises.lstat(filename);
|
|
275
|
+
if (!uploadResult || !fileInfo || fileInfo.size !== fileStats.size) {
|
|
276
|
+
this.options.log.error(`Upload failed! Filename: ${filename}.`);
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
if (this.isRestartNecessary(digiwebFilename)) {
|
|
280
|
+
this.restartAfterUpdate = true;
|
|
281
|
+
}
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
isRestartAfterUpdate() {
|
|
285
|
+
return this.restartAfterUpdate;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
exports.DwhUpdate = DwhUpdate;
|
|
289
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHdoLXVwZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdXBkYXRlL2R3aC11cGRhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6Qiw0Q0FBb0I7QUFFcEIsK0JBQTRCO0FBQzVCLGlDQUErQjtBQUl4QixLQUFLLFVBQVUsS0FBSyxDQUFDLEVBQVU7SUFDcEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFGRCxzQkFFQztBQTJCRCxNQUFhLFNBQVM7SUFrQnBCOzs7T0FHRztJQUNILFlBQW1CLFFBQWtCLEVBQUUsT0FBMEI7UUFBOUMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQXJCN0IsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUN2Qjs7V0FFRztRQUNILDZCQUF3QixHQUFHLENBQUMsQ0FBQztRQUU3QixZQUFPLEdBQStCO1lBQ3BDLGtCQUFrQixFQUFFLFdBQVc7WUFDL0IsR0FBRyxFQUFFLElBQUksY0FBTSxFQUFFO1lBQ2pCLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIseUJBQXlCLEVBQUUsSUFBSTtZQUMvQiw0QkFBNEIsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNyQyxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUNELHFCQUFxQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7U0FDbEMsQ0FBQztRQU1BLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxD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
|
package/package.json
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dwh-fetch",
|
|
3
|
+
"version": "1.3.3",
|
|
4
|
+
"description": "fetching data from DigiWEB devices",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"dwh",
|
|
9
|
+
"fetch",
|
|
10
|
+
"update",
|
|
11
|
+
"backup"
|
|
12
|
+
],
|
|
13
|
+
"files": [
|
|
14
|
+
"dist/",
|
|
15
|
+
"README.md"
|
|
16
|
+
],
|
|
17
|
+
"author": "emcellsoft <mail@emcellsoft.de>",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">=10.0.0"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"lint": "eslint src/**/*.ts",
|
|
24
|
+
"prebuild": "rimraf dist",
|
|
25
|
+
"build": "yarn clean && tsc -p tsconfig.build.json ",
|
|
26
|
+
"test": "jest --coverage",
|
|
27
|
+
"clean": "rimraf dist",
|
|
28
|
+
"dev-example": "ts-node src/examples/fetch-rsa.ts"
|
|
29
|
+
},
|
|
30
|
+
"jest": {
|
|
31
|
+
"transform": {
|
|
32
|
+
".(ts|tsx)": "ts-jest"
|
|
33
|
+
},
|
|
34
|
+
"automock": false,
|
|
35
|
+
"setupFiles": [],
|
|
36
|
+
"testEnvironment": "node",
|
|
37
|
+
"testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$",
|
|
38
|
+
"moduleFileExtensions": [
|
|
39
|
+
"ts",
|
|
40
|
+
"tsx",
|
|
41
|
+
"js"
|
|
42
|
+
],
|
|
43
|
+
"coveragePathIgnorePatterns": [
|
|
44
|
+
"/node_modules/",
|
|
45
|
+
"/test/",
|
|
46
|
+
"/examples/"
|
|
47
|
+
],
|
|
48
|
+
"coverageThreshold": {
|
|
49
|
+
"global": {
|
|
50
|
+
"branches": 50,
|
|
51
|
+
"functions": 50,
|
|
52
|
+
"lines": 50,
|
|
53
|
+
"statements": 50
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"collectCoverageFrom": [
|
|
57
|
+
"src/lib/**/*.{js,ts}"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@types/jest": "^26.0.13",
|
|
62
|
+
"@types/node": "^10.17.32",
|
|
63
|
+
"@types/stream-buffers": "^3.0.3",
|
|
64
|
+
"@typescript-eslint/eslint-plugin": "^4.19.0",
|
|
65
|
+
"@typescript-eslint/parser": "^4.19.0",
|
|
66
|
+
"eslint": "^7.22.0",
|
|
67
|
+
"eslint-config-prettier": "^8.1.0",
|
|
68
|
+
"eslint-plugin-prettier": "^3.3.1",
|
|
69
|
+
"jest": "^26.4.2",
|
|
70
|
+
"jest-fetch-mock": "^3.0.3",
|
|
71
|
+
"nock": "^13.0.11",
|
|
72
|
+
"node-stream-zip": "^1.13.3",
|
|
73
|
+
"prettier": "^2.2.1",
|
|
74
|
+
"prompt": "^1.0.0",
|
|
75
|
+
"replace-in-file": "^3.4.2",
|
|
76
|
+
"rimraf": "^2.6.2",
|
|
77
|
+
"rollup": "^0.67.0",
|
|
78
|
+
"rollup-plugin-commonjs": "^9.1.8",
|
|
79
|
+
"rollup-plugin-json": "^3.1.0",
|
|
80
|
+
"rollup-plugin-node-resolve": "^3.4.0",
|
|
81
|
+
"rollup-plugin-sourcemaps": "^0.4.2",
|
|
82
|
+
"rollup-plugin-typescript2": "^0.18.0",
|
|
83
|
+
"semantic-release": "^15.9.16",
|
|
84
|
+
"shelljs": "^0.8.4",
|
|
85
|
+
"stream-buffers": "^3.0.2",
|
|
86
|
+
"travis-deploy-once": "^5.0.9",
|
|
87
|
+
"ts-jest": "^26.3.0",
|
|
88
|
+
"ts-node": "^7.0.1",
|
|
89
|
+
"tslint": "^5.11.0",
|
|
90
|
+
"tslint-config-prettier": "^1.15.0",
|
|
91
|
+
"tslint-config-standard": "^8.0.1",
|
|
92
|
+
"typedoc": "^0.12.0",
|
|
93
|
+
"typescript": "^3.9.7"
|
|
94
|
+
},
|
|
95
|
+
"dependencies": {
|
|
96
|
+
"@types/superagent": "^4.1.10",
|
|
97
|
+
"iconv-lite": "^0.6.3",
|
|
98
|
+
"superagent": "^6.1.0",
|
|
99
|
+
"tslog": "^3.1.2"
|
|
100
|
+
},
|
|
101
|
+
"publishConfig": {
|
|
102
|
+
"registry": "https://registry.npmjs.org/"
|
|
103
|
+
}
|
|
104
|
+
}
|
|
File without changes
|