scanoss 0.10.1 → 0.10.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/build/main/cli/bin/cli-bin.js +17 -5
- package/build/main/sdk/scanner/Dispatcher/Dispatcher.d.ts +1 -1
- package/build/main/sdk/scanner/Dispatcher/Dispatcher.js +21 -9
- package/build/main/sdk/scanner/Scanner.d.ts +7 -7
- package/build/main/sdk/scanner/Scanner.js +77 -63
- package/build/main/sdk/scanner/ScannerCfg.js +4 -5
- package/build/main/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.d.ts +1 -1
- package/build/main/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +9 -8
- package/build/main/sdk/scanner/WfpProvider/WfpProvider.d.ts +8 -8
- package/build/main/sdk/scanner/WfpProvider/WfpProvider.js +8 -5
- package/build/main/tsconfig.tsbuildinfo +10 -10
- package/build/module/cli/bin/cli-bin.js +17 -5
- package/build/module/sdk/scanner/Dispatcher/Dispatcher.d.ts +1 -1
- package/build/module/sdk/scanner/Dispatcher/Dispatcher.js +26 -14
- package/build/module/sdk/scanner/Scanner.d.ts +7 -7
- package/build/module/sdk/scanner/Scanner.js +80 -63
- package/build/module/sdk/scanner/ScannerCfg.js +4 -5
- package/build/module/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.d.ts +1 -1
- package/build/module/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +9 -8
- package/build/module/sdk/scanner/WfpProvider/WfpProvider.d.ts +8 -8
- package/build/module/sdk/scanner/WfpProvider/WfpProvider.js +10 -7
- package/build/module/tsconfig.module.tsbuildinfo +10 -10
- package/package.json +1 -1
|
@@ -40,12 +40,75 @@ export class Scanner extends EventEmitter {
|
|
|
40
40
|
if (this.workDirectory === undefined)
|
|
41
41
|
this.setWorkDirectory(`${os.tmpdir()}/scanner-${this.getScannerId()}`);
|
|
42
42
|
}
|
|
43
|
+
setWorkDirectory(workDirectory) {
|
|
44
|
+
this.workDirectory = workDirectory;
|
|
45
|
+
this.resultFilePath = `${this.workDirectory}/result.json`;
|
|
46
|
+
this.wfpFilePath = `${this.workDirectory}/winnowing.wfp`;
|
|
47
|
+
this.obfuscateMapFilePath = `${this.workDirectory}/obfuscate.map`;
|
|
48
|
+
if (!fs.existsSync(this.workDirectory))
|
|
49
|
+
fs.mkdirSync(this.workDirectory);
|
|
50
|
+
if (fs.existsSync(this.resultFilePath))
|
|
51
|
+
throw new Error(`${this.resultFilePath}, already exist! Please remove this file and run the scanner again`);
|
|
52
|
+
if (fs.existsSync(this.wfpFilePath))
|
|
53
|
+
throw new Error(`${this.workDirectory}, already exist! Please remove this file and run the scanner again`);
|
|
54
|
+
}
|
|
55
|
+
getWorkDirectory() {
|
|
56
|
+
return this.workDirectory;
|
|
57
|
+
}
|
|
58
|
+
cleanWorkDirectory() {
|
|
59
|
+
if (fs.existsSync(this.resultFilePath))
|
|
60
|
+
fs.unlinkSync(this.resultFilePath);
|
|
61
|
+
if (fs.existsSync(this.wfpFilePath))
|
|
62
|
+
fs.unlinkSync(this.wfpFilePath);
|
|
63
|
+
}
|
|
64
|
+
scan(scannerInput) {
|
|
65
|
+
this.init();
|
|
66
|
+
this.createOutputFiles();
|
|
67
|
+
this.scannerInput = scannerInput;
|
|
68
|
+
this.reportLog(`[ SCANNER ]: Scanner instance id ${this.getScannerId()}`);
|
|
69
|
+
if (!this.isValidInput(scannerInput)) {
|
|
70
|
+
this.finishScan();
|
|
71
|
+
return this.finishPromise;
|
|
72
|
+
}
|
|
73
|
+
if (scannerInput[0]?.wfpPath) {
|
|
74
|
+
this.wfpProvider = new WfpSplitter(this.scannerCfg);
|
|
75
|
+
this.setWinnowerListeners();
|
|
76
|
+
this.wfpProvider.start(scannerInput[0]);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
const folderRoot = this.scannerInput[0].folderRoot;
|
|
80
|
+
const winnowingMode = this.scannerInput[0]?.winnowing?.mode;
|
|
81
|
+
const obfuscate = this.scannerCfg.WFP_OBFUSCATION;
|
|
82
|
+
const fileList = this.scannerInput[0].fileList;
|
|
83
|
+
this.wfpProvider.start({
|
|
84
|
+
folderRoot,
|
|
85
|
+
winnowingMode,
|
|
86
|
+
fileList,
|
|
87
|
+
obfuscate,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return this.finishPromise;
|
|
91
|
+
}
|
|
92
|
+
getScannerId() {
|
|
93
|
+
return this.scannerId;
|
|
94
|
+
}
|
|
95
|
+
stop() {
|
|
96
|
+
this.reportLog(`[ SCANNER ]: Stopping scanner`);
|
|
97
|
+
this.abort();
|
|
98
|
+
finishPromiseResolve();
|
|
99
|
+
}
|
|
100
|
+
isRunning() {
|
|
101
|
+
return this.running;
|
|
102
|
+
}
|
|
43
103
|
setWinnowerListeners() {
|
|
44
104
|
this.wfpProvider.on(ScannerEvents.WINNOWING_NEW_CONTENT, (fingerprintPackage) => {
|
|
45
105
|
this.emit(ScannerEvents.WINNOWING_NEW_CONTENT, fingerprintPackage);
|
|
46
106
|
this.reportLog(`[ SCANNER ]: New WFP content`);
|
|
47
107
|
if (fingerprintPackage.isObfuscated())
|
|
48
|
-
this.obfuscateMap = {
|
|
108
|
+
this.obfuscateMap = {
|
|
109
|
+
...this.obfuscateMap,
|
|
110
|
+
...fingerprintPackage.getObfuscationMap(),
|
|
111
|
+
};
|
|
49
112
|
const item = new DispatchableItem();
|
|
50
113
|
item.setFingerprintPackage(fingerprintPackage);
|
|
51
114
|
item.uuid = uuidv4();
|
|
@@ -95,7 +158,9 @@ export class Scanner extends EventEmitter {
|
|
|
95
158
|
}
|
|
96
159
|
});
|
|
97
160
|
this.dispatcher.on(ScannerEvents.DISPATCHER_ITEM_NO_DISPATCHED, (disptItem) => {
|
|
98
|
-
const filesNotScanned = disptItem
|
|
161
|
+
const filesNotScanned = disptItem
|
|
162
|
+
.getFingerprintPackage()
|
|
163
|
+
.getFilesFingerprinted();
|
|
99
164
|
this.appendFilesToNotScanned(filesNotScanned);
|
|
100
165
|
});
|
|
101
166
|
this.dispatcher.on(ScannerEvents.DISPATCHER_LOG, (msg) => {
|
|
@@ -104,7 +169,7 @@ export class Scanner extends EventEmitter {
|
|
|
104
169
|
this.dispatcher.on(ScannerEvents.ERROR, (error, disptItem, response) => {
|
|
105
170
|
const wfpContent = disptItem.getFingerprintPackage().getContent();
|
|
106
171
|
const requestId = disptItem.uuid;
|
|
107
|
-
let plainResponse = response ? response :
|
|
172
|
+
let plainResponse = response ? response : '';
|
|
108
173
|
const dump = `---Request ID Begin---\n${requestId}\n---Request ID End---\n` +
|
|
109
174
|
`---WFP Begin---\n${wfpContent}\n---WFP End---\n` +
|
|
110
175
|
`---Server Response Begin---\n${plainResponse}\n---Server Response End---\n`;
|
|
@@ -152,34 +217,14 @@ export class Scanner extends EventEmitter {
|
|
|
152
217
|
}
|
|
153
218
|
this.appendOutputFiles(wfpContent, serverResponse);
|
|
154
219
|
this.responseBuffer = [];
|
|
155
|
-
const r =
|
|
156
|
-
|
|
220
|
+
const r = this.scannerCfg.WFP_OBFUSCATION && this.scannerCfg.RESULTS_DEOBFUSCATION
|
|
221
|
+
? this.deobfuscationResponses(serverResponse, this.obfuscateMap)
|
|
222
|
+
: serverResponse;
|
|
157
223
|
const responses = new DispatcherResponse(r, wfpContent);
|
|
158
224
|
this.reportLog(`[ SCANNER ]: Persisted results of ${responses.getNumberOfFilesScanned()} files...`);
|
|
159
225
|
this.emit(ScannerEvents.RESULTS_APPENDED, responses, this.filesNotScanned);
|
|
160
226
|
return responses;
|
|
161
227
|
}
|
|
162
|
-
setWorkDirectory(workDirectory) {
|
|
163
|
-
this.workDirectory = workDirectory;
|
|
164
|
-
this.resultFilePath = `${this.workDirectory}/result.json`;
|
|
165
|
-
this.wfpFilePath = `${this.workDirectory}/winnowing.wfp`;
|
|
166
|
-
this.obfuscateMapFilePath = `${this.workDirectory}/obfuscate.map`;
|
|
167
|
-
if (!fs.existsSync(this.workDirectory))
|
|
168
|
-
fs.mkdirSync(this.workDirectory);
|
|
169
|
-
if (fs.existsSync(this.resultFilePath))
|
|
170
|
-
throw new Error(`${this.resultFilePath}, already exist! Please remove this file and run the scanner again`);
|
|
171
|
-
if (fs.existsSync(this.wfpFilePath))
|
|
172
|
-
throw new Error(`${this.workDirectory}, already exist! Please remove this file and run the scanner again`);
|
|
173
|
-
}
|
|
174
|
-
getWorkDirectory() {
|
|
175
|
-
return this.workDirectory;
|
|
176
|
-
}
|
|
177
|
-
cleanWorkDirectory() {
|
|
178
|
-
if (fs.existsSync(this.resultFilePath))
|
|
179
|
-
fs.unlinkSync(this.resultFilePath);
|
|
180
|
-
if (fs.existsSync(this.wfpFilePath))
|
|
181
|
-
fs.unlinkSync(this.wfpFilePath);
|
|
182
|
-
}
|
|
183
228
|
async finishJob() {
|
|
184
229
|
this.scannerInput.shift();
|
|
185
230
|
this.reportLog(`[ SCANNER ]: Job finished. ${this.scannerInput.length} pendings`);
|
|
@@ -194,7 +239,12 @@ export class Scanner extends EventEmitter {
|
|
|
194
239
|
const winnowingMode = this.scannerInput[0]?.winnowing?.mode;
|
|
195
240
|
const obfuscate = this.scannerCfg.WFP_OBFUSCATION;
|
|
196
241
|
const fileList = this.scannerInput[0].fileList;
|
|
197
|
-
this.wfpProvider.start({
|
|
242
|
+
this.wfpProvider.start({
|
|
243
|
+
folderRoot,
|
|
244
|
+
winnowingMode,
|
|
245
|
+
fileList,
|
|
246
|
+
obfuscate,
|
|
247
|
+
});
|
|
198
248
|
}
|
|
199
249
|
}
|
|
200
250
|
else
|
|
@@ -204,7 +254,8 @@ export class Scanner extends EventEmitter {
|
|
|
204
254
|
if (!this.isBufferEmpty())
|
|
205
255
|
this.bufferToFiles();
|
|
206
256
|
const results = JSON.parse(await fs.promises.readFile(this.resultFilePath, 'utf8'));
|
|
207
|
-
if (this.scannerCfg.WFP_OBFUSCATION &&
|
|
257
|
+
if (this.scannerCfg.WFP_OBFUSCATION &&
|
|
258
|
+
this.scannerCfg.RESULTS_DEOBFUSCATION) {
|
|
208
259
|
for (const key of Object.keys(this.obfuscateMap)) {
|
|
209
260
|
const component = results[key];
|
|
210
261
|
const originalPath = this.obfuscateMap[key];
|
|
@@ -257,29 +308,6 @@ export class Scanner extends EventEmitter {
|
|
|
257
308
|
const newResultStr = JSON.stringify(storedResultObj);
|
|
258
309
|
fs.writeFileSync(this.resultFilePath, newResultStr);
|
|
259
310
|
}
|
|
260
|
-
scan(scannerInput) {
|
|
261
|
-
this.init();
|
|
262
|
-
this.createOutputFiles();
|
|
263
|
-
this.scannerInput = scannerInput;
|
|
264
|
-
this.reportLog(`[ SCANNER ]: Scanner instance id ${this.getScannerId()}`);
|
|
265
|
-
if (!this.isValidInput(scannerInput)) {
|
|
266
|
-
this.finishScan();
|
|
267
|
-
return this.finishPromise;
|
|
268
|
-
}
|
|
269
|
-
if (scannerInput[0]?.wfpPath) {
|
|
270
|
-
this.wfpProvider = new WfpSplitter();
|
|
271
|
-
this.setWinnowerListeners();
|
|
272
|
-
this.wfpProvider.start(scannerInput[0]);
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
const folderRoot = this.scannerInput[0].folderRoot;
|
|
276
|
-
const winnowingMode = this.scannerInput[0]?.winnowing?.mode;
|
|
277
|
-
const obfuscate = this.scannerCfg.WFP_OBFUSCATION;
|
|
278
|
-
const fileList = this.scannerInput[0].fileList;
|
|
279
|
-
this.wfpProvider.start({ folderRoot, winnowingMode, fileList, obfuscate });
|
|
280
|
-
}
|
|
281
|
-
return this.finishPromise;
|
|
282
|
-
}
|
|
283
311
|
isValidInput(scannerInput) {
|
|
284
312
|
if (!scannerInput) {
|
|
285
313
|
this.reportLog('[ SCANNER ]: No input provided', 'warning');
|
|
@@ -299,9 +327,6 @@ export class Scanner extends EventEmitter {
|
|
|
299
327
|
}
|
|
300
328
|
return true;
|
|
301
329
|
}
|
|
302
|
-
getScannerId() {
|
|
303
|
-
return this.scannerId;
|
|
304
|
-
}
|
|
305
330
|
abort() {
|
|
306
331
|
this.running = false;
|
|
307
332
|
this.wfpProvider.removeAllListeners();
|
|
@@ -309,13 +334,5 @@ export class Scanner extends EventEmitter {
|
|
|
309
334
|
this.dispatcher.stop();
|
|
310
335
|
this.wfpProvider.stop();
|
|
311
336
|
}
|
|
312
|
-
stop() {
|
|
313
|
-
this.reportLog(`[ SCANNER ]: Stopping scanner`);
|
|
314
|
-
this.abort();
|
|
315
|
-
finishPromiseResolve();
|
|
316
|
-
}
|
|
317
|
-
isRunning() {
|
|
318
|
-
return this.running;
|
|
319
|
-
}
|
|
320
337
|
}
|
|
321
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZGsvc2Nhbm5lci9TY2FubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixNQUFNO0FBQ04sT0FBTyxZQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFcEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXJELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBZ0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUk3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDMUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXBFLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdwQyxJQUFJLG9CQUFvQixDQUFDO0FBQ3pCLElBQUksbUJBQW1CLENBQUM7QUFFeEIsTUFBTSxPQUFPLE9BQVEsU0FBUSxZQUFZO0lBdUN2QyxZQUFZLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRTtRQUN2QyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRU0sSUFBSTtRQUNULElB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
|
|
338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZGsvc2Nhbm5lci9TY2FubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixNQUFNO0FBQ04sT0FBTyxZQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFcEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXJELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBZ0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUk3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDMUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXBFLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxJQUFJLG9CQUFvQixDQUFDO0FBQ3pCLElBQUksbUJBQW1CLENBQUM7QUFFeEIsTUFBTSxPQUFPLE9BQVEsU0FBUSxZQUFZO0lBdUN2QyxZQUFZLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRTtRQUN2QyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRU0sSUFBSTtRQUNULElB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
|
|
@@ -3,7 +3,7 @@ export class ScannerCfg extends BaseConfig {
|
|
|
3
3
|
constructor() {
|
|
4
4
|
super(...arguments);
|
|
5
5
|
// Client Timestamp, default value is scanoss-js/${version}
|
|
6
|
-
this.CLIENT_TIMESTAMP =
|
|
6
|
+
this.CLIENT_TIMESTAMP = '';
|
|
7
7
|
// API URL
|
|
8
8
|
this.API_URL = 'https://osskb.org/api/scan/direct';
|
|
9
9
|
this.API_KEY = '';
|
|
@@ -14,8 +14,8 @@ export class ScannerCfg extends BaseConfig {
|
|
|
14
14
|
this.CONCURRENCY_LIMIT = 10;
|
|
15
15
|
// Timeout for each transaction
|
|
16
16
|
this.TIMEOUT = 180000;
|
|
17
|
-
// The maximum size for each .wfp file
|
|
18
|
-
this.WFP_FILE_MAX_SIZE =
|
|
17
|
+
// The maximum size for each .wfp file in bytes
|
|
18
|
+
this.WFP_FILE_MAX_SIZE = 32 * 1024;
|
|
19
19
|
this.WFP_OBFUSCATION = false;
|
|
20
20
|
this.RESULTS_DEOBFUSCATION = true;
|
|
21
21
|
//After processing #WINNOWING_AFTER_X_REPORT_STATUS files,
|
|
@@ -29,5 +29,4 @@ export class ScannerCfg extends BaseConfig {
|
|
|
29
29
|
this.DISPATCHER_QUEUE_SIZE_MIN_LIMIT = 1000;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
;
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Nhbm5lckNmZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZGsvc2Nhbm5lci9TY2FubmVyQ2ZnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsTUFBTSxPQUFPLFVBQVcsU0FBUSxVQUFVO0lBQTFDOztRQUNFLDJEQUEyRDtRQUNwRCxxQkFBZ0IsR0FBRyxFQUFFLENBQUE7UUFDNUIsVUFBVTtRQUNILFlBQU8sR0FBRyxtQ0FBbUMsQ0FBQztRQUU5QyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUVwQixnREFBZ0Q7UUFDekMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRWxDLHVCQUF1QjtRQUNoQixzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFFOUIsK0JBQStCO1FBQ3hCLFlBQU8sR0FBRyxNQUFNLENBQUM7UUFFeEIsc0NBQXNDO1FBQy9CLHNCQUFpQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFOUIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFeEIsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLDBEQUEwRDtRQUMxRCw4RUFBOEU7UUFDdkUsb0NBQStCLEdBQUcsRUFBRSxDQUFDO1FBRXJDLHdDQUFtQyxHQUFHLENBQUMsQ0FBQztRQUV4Qyx5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFFbkMsK0NBQStDO1FBQ3hDLDRCQUF1QixHQUFHLEdBQUcsQ0FBQztRQUU5QixvQ0FBK0IsR0FBRyxJQUFJLENBQUM7UUFFdkMsb0NBQStCLEdBQUcsSUFBSSxDQUFDO0lBRWhELENBQUM7Q0FBQTtBQUFBLENBQUMifQ==
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Nhbm5lckNmZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZGsvc2Nhbm5lci9TY2FubmVyQ2ZnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsTUFBTSxPQUFPLFVBQVcsU0FBUSxVQUFVO0lBQTFDOztRQUNFLDJEQUEyRDtRQUNwRCxxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsVUFBVTtRQUNILFlBQU8sR0FBRyxtQ0FBbUMsQ0FBQztRQUU5QyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUVwQixnREFBZ0Q7UUFDekMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRWxDLHVCQUF1QjtRQUNoQixzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFFOUIsK0JBQStCO1FBQ3hCLFlBQU8sR0FBRyxNQUFNLENBQUM7UUFFeEIsK0NBQStDO1FBQ3hDLHNCQUFpQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFOUIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFeEIsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLDBEQUEwRDtRQUMxRCw4RUFBOEU7UUFDdkUsb0NBQStCLEdBQUcsRUFBRSxDQUFDO1FBRXJDLHdDQUFtQyxHQUFHLENBQUMsQ0FBQztRQUV4Qyx5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFFbkMsK0NBQStDO1FBQ3hDLDRCQUF1QixHQUFHLEdBQUcsQ0FBQztRQUU5QixvQ0FBK0IsR0FBRyxJQUFJLENBQUM7UUFFdkMsb0NBQStCLEdBQUcsSUFBSSxDQUFDO0lBQ2hELENBQUM7Q0FBQSJ9
|
|
@@ -10,11 +10,11 @@ export declare class WfpCalculator extends WfpProvider {
|
|
|
10
10
|
prepareWorker(): void;
|
|
11
11
|
recoveryIndex(): -1 | 0;
|
|
12
12
|
forceStopWorker(): void;
|
|
13
|
-
protected processPackedWfp(content: any): void;
|
|
14
13
|
getNextScannableItem(): Promise<ScannableItem>;
|
|
15
14
|
nextStepMachine(): Promise<void>;
|
|
16
15
|
start(params: IWfpProviderInput): Promise<void>;
|
|
17
16
|
pause(): void;
|
|
18
17
|
resume(): void;
|
|
19
18
|
stop(): void;
|
|
19
|
+
protected processPackedWfp(content: any): void;
|
|
20
20
|
}
|
|
@@ -408,12 +408,13 @@ export class WfpCalculator extends WfpProvider {
|
|
|
408
408
|
if (files.length) {
|
|
409
409
|
const lastFileWinnowed = this.folderRoot + files[files.length - 1];
|
|
410
410
|
let i = 0;
|
|
411
|
-
while (i <= files.length &&
|
|
411
|
+
while (i <= files.length &&
|
|
412
|
+
lastFileWinnowed !== this.fileList[this.fileListIndex - i]) {
|
|
412
413
|
i += 1;
|
|
413
414
|
}
|
|
414
415
|
// If file already winnowed cannot be found in fileList emit an error.
|
|
415
416
|
if (i > files.length) {
|
|
416
|
-
this.sendError('Cannot
|
|
417
|
+
this.sendError('Cannot recover index while generating fingerprints');
|
|
417
418
|
return -1;
|
|
418
419
|
}
|
|
419
420
|
this.fileListIndex -= i;
|
|
@@ -426,13 +427,9 @@ export class WfpCalculator extends WfpProvider {
|
|
|
426
427
|
this.worker.removeAllListeners();
|
|
427
428
|
this.worker.terminate();
|
|
428
429
|
}
|
|
429
|
-
processPackedWfp(content) {
|
|
430
|
-
const fingerprint = new FingerprintPackage(content, this.folderRoot);
|
|
431
|
-
this.sendFingerprint(fingerprint);
|
|
432
|
-
}
|
|
433
430
|
async getNextScannableItem() {
|
|
434
431
|
if (this.fileListIndex >= this.fileList.length) {
|
|
435
|
-
this.emit(ScannerEvents.WINNOWING_STATUS,
|
|
432
|
+
this.emit(ScannerEvents.WINNOWING_STATUS, this.fileListIndex % this.scannerCfg.WINNOWING_REPORT_STATUS_AFTER_X);
|
|
436
433
|
return null;
|
|
437
434
|
}
|
|
438
435
|
const path = this.fileList[this.fileListIndex];
|
|
@@ -489,5 +486,9 @@ export class WfpCalculator extends WfpProvider {
|
|
|
489
486
|
this.prepareWorker();
|
|
490
487
|
this.init();
|
|
491
488
|
}
|
|
489
|
+
processPackedWfp(content) {
|
|
490
|
+
const fingerprint = new FingerprintPackage(content, this.folderRoot);
|
|
491
|
+
this.sendFingerprint(fingerprint);
|
|
492
|
+
}
|
|
492
493
|
}
|
|
493
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
494
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ZwQ2FsY3VsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvc2Nhbm5lci9XZnBQcm92aWRlci9XZnBDYWxjdWxhdG9yL1dmcENhbGN1bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQStCLE1BQU0sb0JBQW9CLENBQUM7QUFFaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFxQixXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxNQUFNLFlBQVksR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBMFhwQixDQUFDO0FBRUYsTUFBTSxPQUFPLGFBQWMsU0FBUSxXQUFX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
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { Worker } from 'worker_threads';
|
|
3
3
|
import EventEmitter from 'eventemitter3';
|
|
4
|
-
import { ScannerCfg } from
|
|
5
|
-
import { WinnowingMode } from
|
|
6
|
-
import { FingerprintPackage } from
|
|
4
|
+
import { ScannerCfg } from '../ScannerCfg';
|
|
5
|
+
import { WinnowingMode } from '../ScannerTypes';
|
|
6
|
+
import { FingerprintPackage } from './FingerprintPackage';
|
|
7
7
|
export interface IWfpProviderInput {
|
|
8
8
|
wfpPath?: string;
|
|
9
9
|
folderRoot?: string;
|
|
@@ -22,6 +22,11 @@ export declare abstract class WfpProvider extends EventEmitter {
|
|
|
22
22
|
protected obfuscate: boolean;
|
|
23
23
|
protected finishPromiseResolve: (value?: void | PromiseLike<void>) => void;
|
|
24
24
|
protected finishPromiseReject: (value?: void | PromiseLike<void>) => void;
|
|
25
|
+
abstract start(params: IWfpProviderInput): Promise<void>;
|
|
26
|
+
abstract stop(): void;
|
|
27
|
+
abstract pause(): void;
|
|
28
|
+
abstract resume(): void;
|
|
29
|
+
hasPendingFiles(): boolean;
|
|
25
30
|
protected init(): void;
|
|
26
31
|
protected fingerprintPacker(fingerprint: string): boolean;
|
|
27
32
|
protected finishWinnowing(): void;
|
|
@@ -29,9 +34,4 @@ export declare abstract class WfpProvider extends EventEmitter {
|
|
|
29
34
|
protected sendLog(logMsg: string): void;
|
|
30
35
|
protected sendError(errorMsg: string): void;
|
|
31
36
|
protected setWinnowingMode(mode: WinnowingMode): void;
|
|
32
|
-
abstract start(params: IWfpProviderInput): Promise<void>;
|
|
33
|
-
abstract stop(): void;
|
|
34
|
-
abstract pause(): void;
|
|
35
|
-
abstract resume(): void;
|
|
36
|
-
hasPendingFiles(): boolean;
|
|
37
37
|
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import EventEmitter from 'eventemitter3';
|
|
2
|
-
import { ScannerEvents, WinnowingMode } from
|
|
3
|
-
import { FingerprintPackage } from
|
|
2
|
+
import { ScannerEvents, WinnowingMode } from '../ScannerTypes';
|
|
3
|
+
import { FingerprintPackage } from './FingerprintPackage';
|
|
4
4
|
export class WfpProvider extends EventEmitter {
|
|
5
|
+
hasPendingFiles() {
|
|
6
|
+
return this.pendingFiles;
|
|
7
|
+
}
|
|
5
8
|
init() {
|
|
6
9
|
this.wfp = '';
|
|
7
10
|
this.folderRoot = '';
|
|
@@ -30,7 +33,10 @@ export class WfpProvider extends EventEmitter {
|
|
|
30
33
|
// eslint-disable-next-line no-param-reassign
|
|
31
34
|
fingerprint += '\n';
|
|
32
35
|
}
|
|
33
|
-
|
|
36
|
+
const conditionMaxSize = this.wfp.length + fingerprint.length >= this.scannerCfg.WFP_FILE_MAX_SIZE;
|
|
37
|
+
const conditionMaxFiles = (this.wfp.match(/file\=/g) || []).length >=
|
|
38
|
+
Math.round(this.scannerCfg.WFP_FILE_MAX_SIZE / 1024);
|
|
39
|
+
if ((conditionMaxSize || conditionMaxFiles) && this.wfp.length > 0) {
|
|
34
40
|
this.sendFingerprint(new FingerprintPackage(this.wfp, this.folderRoot));
|
|
35
41
|
this.wfp = '';
|
|
36
42
|
}
|
|
@@ -61,8 +67,5 @@ export class WfpProvider extends EventEmitter {
|
|
|
61
67
|
setWinnowingMode(mode) {
|
|
62
68
|
this.winnowingMode = mode;
|
|
63
69
|
}
|
|
64
|
-
hasPendingFiles() {
|
|
65
|
-
return this.pendingFiles;
|
|
66
|
-
}
|
|
67
70
|
}
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ZwUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvc2RrL3NjYW5uZXIvV2ZwUHJvdmlkZXIvV2ZwUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxZQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFVMUQsTUFBTSxPQUFnQixXQUFZLFNBQVEsWUFBWTtJQXNCN0MsZUFBZTtRQUNwQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVTLElBQUk7UUFDWixJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQztRQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV2QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUM7WUFDcEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnRUFBZ0U7SUFDdEQsaUJBQWlCLENBQUMsV0FBbUI7UUFDN0Msd0ZBQXdGO1FBQ3hGLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFO1lBQzFELElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIs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
|
|
@@ -552,7 +552,7 @@
|
|
|
552
552
|
"affectsGlobalScope": false
|
|
553
553
|
},
|
|
554
554
|
"../../src/sdk/scanner/ScannerCfg.ts": {
|
|
555
|
-
"version": "
|
|
555
|
+
"version": "16c0330268ebc54b5e34ab88ab85c5981d42f46dea9ad0a5f8b2d5bd47caf053",
|
|
556
556
|
"signature": "83bcdff0644f91c60647ee8d7f3ca4872e38d70051a06a03b18101be433cf783",
|
|
557
557
|
"affectsGlobalScope": false
|
|
558
558
|
},
|
|
@@ -592,13 +592,13 @@
|
|
|
592
592
|
"affectsGlobalScope": false
|
|
593
593
|
},
|
|
594
594
|
"../../src/sdk/scanner/Dispatcher/Dispatcher.ts": {
|
|
595
|
-
"version": "
|
|
596
|
-
"signature": "
|
|
595
|
+
"version": "b455f32393d5117846fc58035efeadb87022b21f3ea31fe0888e8947dd7a1fb4",
|
|
596
|
+
"signature": "6675090234645b5e956378a791b8ac96009ba33354e87ccd068abc88bf4f48c1",
|
|
597
597
|
"affectsGlobalScope": false
|
|
598
598
|
},
|
|
599
599
|
"../../src/sdk/scanner/WfpProvider/WfpProvider.ts": {
|
|
600
|
-
"version": "
|
|
601
|
-
"signature": "
|
|
600
|
+
"version": "c987188d5385c1c80a1d812a8a914066352b893b4993901c39b168c4cdaaec20",
|
|
601
|
+
"signature": "03eb0830129f9d22f7a882f81984b8372f3d42b0fe9d793b39e0537beee676b4",
|
|
602
602
|
"affectsGlobalScope": false
|
|
603
603
|
},
|
|
604
604
|
"../../src/sdk/scanner/Scannable/ScannableItem.ts": {
|
|
@@ -607,8 +607,8 @@
|
|
|
607
607
|
"affectsGlobalScope": false
|
|
608
608
|
},
|
|
609
609
|
"../../src/sdk/scanner/WfpProvider/WfpCalculator/WfpCalculator.ts": {
|
|
610
|
-
"version": "
|
|
611
|
-
"signature": "
|
|
610
|
+
"version": "89940e08d914c9a3ed4597db356036cf9d72ed8d2c7a3f58f2d9acae6356bf9b",
|
|
611
|
+
"signature": "f2edfce5f6e2e349b664761b081c59fecbff97da516f1a3687445d8fce4e3477",
|
|
612
612
|
"affectsGlobalScope": false
|
|
613
613
|
},
|
|
614
614
|
"../../src/sdk/scanner/WfpProvider/WfpSplitter/WfpSplitter.ts": {
|
|
@@ -617,8 +617,8 @@
|
|
|
617
617
|
"affectsGlobalScope": false
|
|
618
618
|
},
|
|
619
619
|
"../../src/sdk/scanner/Scanner.ts": {
|
|
620
|
-
"version": "
|
|
621
|
-
"signature": "
|
|
620
|
+
"version": "9c9659b8bdf7fb6c5beccbb6cabc5dc0ffee20b0b73a0de18e888d27d5a97de8",
|
|
621
|
+
"signature": "31e4883f4cc34e3eeb6a800383f16af7f151a1806ffc226afefe33c818be61dd",
|
|
622
622
|
"affectsGlobalScope": false
|
|
623
623
|
},
|
|
624
624
|
"../../src/sdk/scanner/Fingerprint.ts": {
|
|
@@ -1322,7 +1322,7 @@
|
|
|
1322
1322
|
"affectsGlobalScope": false
|
|
1323
1323
|
},
|
|
1324
1324
|
"../../src/cli/bin/cli-bin.ts": {
|
|
1325
|
-
"version": "
|
|
1325
|
+
"version": "3e072bf981511d42ef2ceb8838a0f581866a765afa4361f1fbd6634c06943ae5",
|
|
1326
1326
|
"signature": "43e818adf60173644896298637f47b01d5819b17eda46eaa32d0c7d64724d012",
|
|
1327
1327
|
"affectsGlobalScope": false
|
|
1328
1328
|
},
|
package/package.json
CHANGED