scanoss 0.16.5 → 0.17.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.
Files changed (48) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/build/main/cli/bin/cli-bin.js +2 -2
  3. package/build/main/cli/commands/crypto.js +1 -1
  4. package/build/main/cli/commands/scan.js +8 -4
  5. package/build/main/sdk/BaseConfig.d.ts +38 -9
  6. package/build/main/sdk/BaseConfig.js +82 -13
  7. package/build/main/sdk/Cryptography/Algorithm/Components/ComponentAlgorithmScanner.js +5 -2
  8. package/build/main/sdk/Cryptography/CryptoCfg.d.ts +7 -13
  9. package/build/main/sdk/Cryptography/CryptoCfg.js +7 -14
  10. package/build/main/sdk/Cryptography/Hint/Components/ComponentHintScanner.js +5 -2
  11. package/build/main/sdk/Dependencies/DependencyScanner.d.ts +4 -1
  12. package/build/main/sdk/Dependencies/DependencyScanner.js +66 -32
  13. package/build/main/sdk/Dependencies/DependencyScannerCfg.d.ts +8 -2
  14. package/build/main/sdk/Dependencies/DependencyScannerCfg.js +14 -4
  15. package/build/main/sdk/Dependencies/DependencyTypes.d.ts +1 -0
  16. package/build/main/sdk/Services/Grpc/BaseService.d.ts +26 -4
  17. package/build/main/sdk/Services/Grpc/BaseService.js +92 -21
  18. package/build/main/sdk/Services/Grpc/CryptographyService.d.ts +9 -1
  19. package/build/main/sdk/Services/Grpc/CryptographyService.js +19 -12
  20. package/build/main/sdk/Services/Grpc/DependencyService.d.ts +10 -3
  21. package/build/main/sdk/Services/Grpc/DependencyService.js +19 -9
  22. package/build/main/sdk/scanner/ScannerCfg.d.ts +0 -1
  23. package/build/main/sdk/scanner/ScannerCfg.js +1 -3
  24. package/build/main/tsconfig.tsbuildinfo +1 -1
  25. package/build/module/cli/bin/cli-bin.js +2 -2
  26. package/build/module/cli/commands/crypto.js +1 -1
  27. package/build/module/cli/commands/scan.js +8 -4
  28. package/build/module/sdk/BaseConfig.d.ts +38 -9
  29. package/build/module/sdk/BaseConfig.js +82 -11
  30. package/build/module/sdk/Cryptography/Algorithm/Components/ComponentAlgorithmScanner.js +5 -2
  31. package/build/module/sdk/Cryptography/CryptoCfg.d.ts +7 -13
  32. package/build/module/sdk/Cryptography/CryptoCfg.js +7 -15
  33. package/build/module/sdk/Cryptography/Hint/Components/ComponentHintScanner.js +5 -2
  34. package/build/module/sdk/Dependencies/DependencyScanner.d.ts +4 -1
  35. package/build/module/sdk/Dependencies/DependencyScanner.js +66 -32
  36. package/build/module/sdk/Dependencies/DependencyScannerCfg.d.ts +8 -2
  37. package/build/module/sdk/Dependencies/DependencyScannerCfg.js +16 -3
  38. package/build/module/sdk/Dependencies/DependencyTypes.d.ts +1 -0
  39. package/build/module/sdk/Services/Grpc/BaseService.d.ts +26 -4
  40. package/build/module/sdk/Services/Grpc/BaseService.js +92 -20
  41. package/build/module/sdk/Services/Grpc/CryptographyService.d.ts +9 -1
  42. package/build/module/sdk/Services/Grpc/CryptographyService.js +19 -12
  43. package/build/module/sdk/Services/Grpc/DependencyService.d.ts +10 -3
  44. package/build/module/sdk/Services/Grpc/DependencyService.js +20 -11
  45. package/build/module/sdk/scanner/ScannerCfg.d.ts +0 -1
  46. package/build/module/sdk/scanner/ScannerCfg.js +1 -3
  47. package/build/module/tsconfig.module.tsbuildinfo +1 -1
  48. package/package.json +1 -1
@@ -1,11 +1,40 @@
1
- export declare abstract class BaseConfig {
2
- HTTPS_PROXY: string;
3
- HTTP_PROXY: string;
4
- NO_PROXY: string;
5
- API_URL: string;
6
- GRPC_PROXY: string;
7
- CA_CERT: string;
8
- CA_CERT_BUFF: Buffer;
9
- validate(): Promise<void>;
1
+ export interface IBaseConfig {
2
+ HTTPS_PROXY?: string;
3
+ HTTP_PROXY?: string;
4
+ NO_PROXY?: string;
5
+ API_URL?: string;
6
+ GRPC_PROXY?: string;
7
+ CA_CERT?: string;
8
+ }
9
+ export declare class BaseConfig {
10
+ private _HTTPS_PROXY;
11
+ private _HTTP_PROXY;
12
+ private _NO_PROXY;
13
+ private _API_URL;
14
+ private _GRPC_PROXY;
15
+ private _CA_CERT;
16
+ constructor(config?: IBaseConfig);
10
17
  static getDefaultURL(): string;
18
+ set HTTPS_PROXY(value: string);
19
+ set HTTP_PROXY(value: string);
20
+ set NO_PROXY(value: string);
21
+ /**
22
+ * Sets the API URL for service connections with validation
23
+ * @param value - The API URL (must start with http:// or https://)
24
+ * @throws {Error} When the URL is empty, missing http/https protocol, or has invalid format
25
+ */
26
+ set API_URL(value: string);
27
+ set GRPC_PROXY(value: string);
28
+ /**
29
+ * Sets the CA certificate file path for gRPC connections
30
+ * @param caCertPath - Path to the CA certificate file
31
+ * @throws {Error} When the certificate file does not exist or cannot be read
32
+ */
33
+ set CA_CERT(caCertPath: string);
34
+ get HTTPS_PROXY(): string;
35
+ get HTTP_PROXY(): string;
36
+ get NO_PROXY(): string;
37
+ get API_URL(): string;
38
+ get GRPC_PROXY(): string;
39
+ get CA_CERT(): string;
11
40
  }
@@ -1,18 +1,89 @@
1
1
  import fs from 'fs';
2
2
  export class BaseConfig {
3
- HTTPS_PROXY = '';
4
- HTTP_PROXY = '';
5
- NO_PROXY = ''; //comma separated values
6
- API_URL = '';
7
- GRPC_PROXY = '';
8
- CA_CERT = '';
9
- CA_CERT_BUFF = null;
10
- async validate() {
11
- if (this.CA_CERT)
12
- this.CA_CERT_BUFF = await fs.promises.readFile(this.CA_CERT);
3
+ _HTTPS_PROXY = '';
4
+ _HTTP_PROXY = '';
5
+ _NO_PROXY = ''; //comma separated values
6
+ _API_URL = '';
7
+ _GRPC_PROXY = '';
8
+ _CA_CERT = ''; // Path to the certificate to be used in SSL/TLS connection
9
+ constructor(config) {
10
+ if (config) {
11
+ this.HTTPS_PROXY = config.HTTPS_PROXY || '';
12
+ this.HTTP_PROXY = config.HTTP_PROXY || '';
13
+ this.NO_PROXY = config.NO_PROXY || '';
14
+ this.API_URL = config.API_URL || '';
15
+ this.GRPC_PROXY = config.GRPC_PROXY || '';
16
+ this.CA_CERT = config.CA_CERT;
17
+ }
13
18
  }
14
19
  static getDefaultURL() {
15
20
  return 'https://api.osskb.org/scan/direct';
16
21
  }
22
+ set HTTPS_PROXY(value) {
23
+ this._HTTPS_PROXY = value;
24
+ }
25
+ set HTTP_PROXY(value) {
26
+ this._HTTP_PROXY = value;
27
+ }
28
+ set NO_PROXY(value) {
29
+ this._NO_PROXY = value;
30
+ }
31
+ /**
32
+ * Sets the API URL for service connections with validation
33
+ * @param value - The API URL (must start with http:// or https://)
34
+ * @throws {Error} When the URL is empty, missing http/https protocol, or has invalid format
35
+ */
36
+ set API_URL(value) {
37
+ if (!value) {
38
+ throw new Error('API_URL is required and cannot be empty');
39
+ }
40
+ if (!value.startsWith('http')) {
41
+ throw new Error(`API_URL must start with 'http://' or 'https://', got: '${value}'`);
42
+ }
43
+ try {
44
+ new URL(value);
45
+ this._API_URL = value;
46
+ }
47
+ catch (e) {
48
+ throw new Error(`Invalid API_URL format '${value}': ${e.message}`);
49
+ }
50
+ }
51
+ set GRPC_PROXY(value) {
52
+ this._GRPC_PROXY = value;
53
+ }
54
+ /**
55
+ * Sets the CA certificate file path for gRPC connections
56
+ * @param caCertPath - Path to the CA certificate file
57
+ * @throws {Error} When the certificate file does not exist or cannot be read
58
+ */
59
+ set CA_CERT(caCertPath) {
60
+ if (caCertPath == null || caCertPath === '')
61
+ return;
62
+ try {
63
+ fs.readFileSync(caCertPath);
64
+ this._CA_CERT = caCertPath;
65
+ }
66
+ catch (e) {
67
+ throw new Error(`Certificate file not found: '${caCertPath}'`);
68
+ }
69
+ }
70
+ get HTTPS_PROXY() {
71
+ return this._HTTPS_PROXY;
72
+ }
73
+ get HTTP_PROXY() {
74
+ return this._HTTP_PROXY;
75
+ }
76
+ get NO_PROXY() {
77
+ return this._NO_PROXY;
78
+ }
79
+ get API_URL() {
80
+ return this._API_URL;
81
+ }
82
+ get GRPC_PROXY() {
83
+ return this._GRPC_PROXY;
84
+ }
85
+ get CA_CERT() {
86
+ return this._CA_CERT;
87
+ }
17
88
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZGsvQmFzZUNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFcEIsTUFBTSxPQUFnQixVQUFVO0lBQ3ZCLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixRQUFRLEdBQVcsRUFBRSxDQUFDLENBQUcsd0JBQXdCO0lBQ2pELE9BQU8sR0FBVyxFQUFFLENBQUM7SUFDckIsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2IsWUFBWSxHQUFXLElBQUksQ0FBQztJQUU1QixLQUFLLENBQUMsUUFBUTtRQUNuQixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBRU0sTUFBTSxDQUFDLGFBQWE7UUFDekIsT0FBTyxtQ0FBbUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0YifQ==
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZGsvQmFzZUNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFZcEIsTUFBTSxPQUFPLFVBQVU7SUFDYixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsU0FBUyxHQUFXLEVBQUUsQ0FBQyxDQUFHLHdCQUF3QjtJQUNsRCxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQ3RCLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFHLDJEQUEyRDtJQUVwRixZQUFZLE1BQW9CO1FBQzlCLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRU0sTUFBTSxDQUFDLGFBQWE7UUFDekIsT0FBTyxtQ0FBbUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBYTtRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksT0FBTyxDQUFDLEtBQWE7UUFDdkIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELEtBQUssR0FBRyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDeEIsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixLQUFLLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxPQUFPLENBQUMsVUFBa0I7UUFDNUIsSUFBSSxVQUFVLElBQUksSUFBSSxJQUFJLFVBQVUsS0FBSyxFQUFFO1lBQUUsT0FBTztRQUNwRCxJQUFJLENBQUM7WUFDRCxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQy9CLENBQUM7UUFBQyxPQUFNLENBQUMsRUFBRSxDQUFDO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNqRSxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztDQUNGIn0=
@@ -14,10 +14,13 @@ export class ComponentAlgorithmScanner extends BaseCryptographyScanner {
14
14
  * @returns {AlgorithmResponse} A promise that resolves to an AlgorithmResponse containing detected cryptographic algorithms.
15
15
  */
16
16
  async scan(req) {
17
- const cryptographyService = new CryptographyService(this.config.getApikey(), this.config.getProxy());
17
+ const cryptographyService = new CryptographyService(this.config.getApikey(), // API KEY
18
+ this.config.API_URL, // Destination Host
19
+ this.config.GRPC_PROXY, // Proxy Host
20
+ this.config.CA_CERT);
18
21
  const results = await cryptographyService.getAlgorithms(req);
19
22
  this.resultCollector.collectAlgorithmResults(results);
20
23
  return results;
21
24
  }
22
25
  }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50QWxnb3JpdGhtU2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvQ3J5cHRvZ3JhcGh5L0FsZ29yaXRobS9Db21wb25lbnRzL0NvbXBvbmVudEFsZ29yaXRobVNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUVMLG1CQUFtQixFQUNwQixNQUFNLDRDQUE0QyxDQUFDO0FBRXBELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXhFOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8seUJBQ1gsU0FBUSx1QkFHWTtJQUVwQjs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQWdCO1FBQ2hDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUN6RSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUIsTUFBTSxPQUFPLEdBQXFCLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGIn0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50QWxnb3JpdGhtU2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvQ3J5cHRvZ3JhcGh5L0FsZ29yaXRobS9Db21wb25lbnRzL0NvbXBvbmVudEFsZ29yaXRobVNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUVMLG1CQUFtQixFQUNwQixNQUFNLDRDQUE0QyxDQUFDO0FBRXBELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXhFOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8seUJBQ1gsU0FBUSx1QkFHWTtJQUVwQjs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQWdCO1FBQ2hDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxtQkFBbUIsQ0FDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxVQUFVO1FBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLG1CQUFtQjtRQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhO1FBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkIsTUFBTSxPQUFPLEdBQXFCLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGIn0=
@@ -1,20 +1,19 @@
1
+ import { BaseConfig, IBaseConfig } from "../BaseConfig";
1
2
  /**
2
3
  * Represents a configuration for cryptography scanner.
3
4
  */
4
- export declare class CryptoCfg {
5
+ export declare class CryptoCfg extends BaseConfig {
5
6
  private readonly DEFAULT_THREADS;
6
7
  private readonly algorithmRulesPath;
7
8
  private readonly libraryRulesPath;
8
9
  private readonly threads;
9
- protected readonly apiKey: string;
10
- protected readonly proxy: string;
10
+ private readonly apiKey;
11
11
  /**
12
12
  * Creates an instance of CryptoCfg.
13
13
  * @param {Object} cfg - Configuration object.
14
14
  * @param {number} [cfg.threads=5] - The number of threads to use. Defaults to 5 if not provided.
15
15
  * @param {string} [cfg.rulesPath] - Optional. Path to the cryptography rules file.
16
16
  * @param {string} [cfg.apiKey] - Optional. SCANOSS API Key.
17
- * @param {string} [cfg.proxy] - Optional. proxy.
18
17
  */
19
18
  constructor(cfg: {
20
19
  threads?: number;
@@ -22,7 +21,7 @@ export declare class CryptoCfg {
22
21
  libraryRulesPath?: string;
23
22
  apiKey?: string;
24
23
  proxy?: string;
25
- });
24
+ } & IBaseConfig);
26
25
  /**
27
26
  * Gets the path to the cryptography algorithm rules file.
28
27
  * @returns The path to the cryptography rules file.
@@ -39,13 +38,8 @@ export declare class CryptoCfg {
39
38
  **/
40
39
  getNumberOfThreads(): number;
41
40
  /**
42
- * Gets the API Key set.
43
- * @returns The API Key.
44
- **/
41
+ * Gets the API Key set.
42
+ * @returns The API Key.
43
+ **/
45
44
  getApikey(): string;
46
- /**
47
- * Gets proxy.
48
- * @returns proxy.
49
- **/
50
- getProxy(): string;
51
45
  }
@@ -1,27 +1,26 @@
1
+ import { BaseConfig } from "../BaseConfig";
1
2
  /**
2
3
  * Represents a configuration for cryptography scanner.
3
4
  */
4
- export class CryptoCfg {
5
+ export class CryptoCfg extends BaseConfig {
5
6
  DEFAULT_THREADS = 5;
6
7
  algorithmRulesPath;
7
8
  libraryRulesPath;
8
9
  threads;
9
10
  apiKey;
10
- proxy;
11
11
  /**
12
12
  * Creates an instance of CryptoCfg.
13
13
  * @param {Object} cfg - Configuration object.
14
14
  * @param {number} [cfg.threads=5] - The number of threads to use. Defaults to 5 if not provided.
15
15
  * @param {string} [cfg.rulesPath] - Optional. Path to the cryptography rules file.
16
16
  * @param {string} [cfg.apiKey] - Optional. SCANOSS API Key.
17
- * @param {string} [cfg.proxy] - Optional. proxy.
18
17
  */
19
18
  constructor(cfg) {
19
+ super();
20
20
  this.algorithmRulesPath = cfg.algorithmRulesPath;
21
21
  this.libraryRulesPath = cfg.libraryRulesPath;
22
22
  this.threads = cfg.threads ? Number(cfg.threads) : this.DEFAULT_THREADS;
23
23
  this.apiKey = cfg.apiKey;
24
- this.proxy = cfg.proxy;
25
24
  }
26
25
  /**
27
26
  * Gets the path to the cryptography algorithm rules file.
@@ -45,18 +44,11 @@ export class CryptoCfg {
45
44
  return this.threads;
46
45
  }
47
46
  /**
48
- * Gets the API Key set.
49
- * @returns The API Key.
50
- **/
47
+ * Gets the API Key set.
48
+ * @returns The API Key.
49
+ **/
51
50
  getApikey() {
52
51
  return this.apiKey;
53
52
  }
54
- /**
55
- * Gets proxy.
56
- * @returns proxy.
57
- **/
58
- getProxy() {
59
- return this.proxy;
60
- }
61
53
  }
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3J5cHRvQ2ZnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Nkay9DcnlwdG9ncmFwaHkvQ3J5cHRvQ2ZnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFFSCxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBRW5CLGtCQUFrQixDQUFTO0lBRTNCLGdCQUFnQixDQUFTO0lBRXpCLE9BQU8sQ0FBUztJQUVkLE1BQU0sQ0FBUztJQUVmLEtBQUssQ0FBVTtJQUVuQzs7Ozs7OztPQU9HO0lBQ0YsWUFBYSxHQUFvSDtRQUMvSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1FBQ2pELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVGOzs7T0FHRztJQUNLLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUY7OztNQUdFO0lBQ0ssbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7Q0FFRiJ9
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3J5cHRvQ2ZnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Nkay9DcnlwdG9ncmFwaHkvQ3J5cHRvQ2ZnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFFeEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sU0FBVSxTQUFRLFVBQVU7SUFFdEIsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUVuQixrQkFBa0IsQ0FBUztJQUUzQixnQkFBZ0IsQ0FBUztJQUV6QixPQUFPLENBQVM7SUFFaEIsTUFBTSxDQUFTO0lBR2pDOzs7Ozs7T0FNRztJQUNGLFlBQWEsR0FNQTtRQUNYLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztRQUNqRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUN4RSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDM0IsQ0FBQztJQUVGOzs7T0FHRztJQUNLLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUY7OztNQUdFO0lBQ0ssbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O1FBR0k7SUFDRyxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7Q0FFRiJ9
@@ -14,10 +14,13 @@ export class ComponentHintScanner extends BaseCryptographyScanner {
14
14
  * @returns {HintsResponse} A promise that resolves to a HintsResponse containing detected cryptographic hints.
15
15
  */
16
16
  async scan(req) {
17
- const cryptographyService = new CryptographyService(this.config.getApikey(), this.config.getProxy());
17
+ const cryptographyService = new CryptographyService(this.config.getApikey(), // API KEY
18
+ this.config.API_URL, // Destination Host
19
+ this.config.GRPC_PROXY, // Proxy Host
20
+ this.config.CA_CERT);
18
21
  const results = await cryptographyService.getEncryptionHints(req);
19
22
  this.resultCollector.collectHintResults(results);
20
23
  return results;
21
24
  }
22
25
  }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50SGludFNjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvc2RrL0NyeXB0b2dyYXBoeS9IaW50L0NvbXBvbmVudHMvQ29tcG9uZW50SGludFNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLG1CQUFtQixFQUNYLE1BQU0sNENBQTRDLENBQUM7QUFDcEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFeEU7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxvQkFDWCxTQUFRLHVCQUdRO0lBRWhCOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBZ0I7UUFDaEMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3JHLE1BQU0sT0FBTyxHQUFHLE1BQU0sbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YifQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50SGludFNjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvc2RrL0NyeXB0b2dyYXBoeS9IaW50L0NvbXBvbmVudHMvQ29tcG9uZW50SGludFNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLG1CQUFtQixFQUNYLE1BQU0sNENBQTRDLENBQUM7QUFDcEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFeEU7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxvQkFDWCxTQUFRLHVCQUdRO0lBRWhCOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBZ0I7UUFDaEMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLG1CQUFtQixDQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLFVBQVU7UUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsbUJBQW1CO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWE7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QixNQUFNLE9BQU8sR0FBRyxNQUFNLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGIn0=
@@ -3,10 +3,13 @@ import { IDependencyResponse } from './DependencyTypes';
3
3
  export declare class DependencyScanner {
4
4
  private localDependency;
5
5
  private grpcDependencyService;
6
+ private config;
6
7
  constructor(cfg?: DependencyScannerCfg);
7
8
  scanFolder(path: string): Promise<IDependencyResponse>;
8
9
  scan(files: Array<string>): Promise<IDependencyResponse>;
10
+ private getDependencies;
9
11
  private purlAdapter;
10
- private buildRequest;
12
+ private chunkPurls;
13
+ private buildRequests;
11
14
  private repairOutput;
12
15
  }
@@ -5,21 +5,15 @@ import { DependencyScannerCfg } from './DependencyScannerCfg';
5
5
  import { PackageURL } from 'packageurl-js';
6
6
  import fs from 'fs';
7
7
  import { Tree } from '../tree/Tree';
8
+ import { logger } from "../Logger";
8
9
  export class DependencyScanner {
9
10
  localDependency;
10
11
  grpcDependencyService;
11
- constructor(cfg = new DependencyScannerCfg()) {
12
- //Extract host from URL (hostname:port)
13
- if (cfg.API_URL.startsWith('http')) {
14
- const apiURL = new URL(cfg.API_URL);
15
- let hostname;
16
- let port;
17
- if (!apiURL.port)
18
- port = apiURL.protocol === 'https:' ? '443' : '80';
19
- hostname = apiURL.host;
20
- cfg.API_URL = `${hostname}:${port}`;
21
- }
22
- this.grpcDependencyService = new DependencyService(cfg.API_URL, cfg.GRPC_PROXY, cfg.CA_CERT_BUFF);
12
+ config = new DependencyScannerCfg();
13
+ constructor(cfg) {
14
+ if (cfg)
15
+ this.config = cfg;
16
+ this.grpcDependencyService = new DependencyService(this.config.API_URL, this.config.GRPC_PROXY, this.config.CA_CERT);
23
17
  this.localDependency = new LocalDependencies();
24
18
  }
25
19
  async scanFolder(path) {
@@ -34,15 +28,43 @@ export class DependencyScanner {
34
28
  if (localDependencies.files.length === 0)
35
29
  return { filesList: [] };
36
30
  localDependencies = this.purlAdapter(localDependencies);
37
- const request = this.buildRequest(localDependencies);
38
- const grpcResponse = await this.grpcDependencyService.get(request);
39
- const response = grpcResponse.toObject();
40
- // Extract scope from localDependencies and add it to response
41
- // Also adds the requirements field from localDependency to the response if the server didn't
42
- // replay back a version
31
+ const requests = this.buildRequests(localDependencies);
32
+ const response = await this.getDependencies(requests);
43
33
  this.repairOutput(localDependencies, response);
44
34
  return response;
45
35
  }
36
+ async getDependencies(requests) {
37
+ const responseMapper = new Map;
38
+ for (const request of requests) {
39
+ try {
40
+ const grpcResponse = await this.grpcDependencyService.get(request);
41
+ const file = grpcResponse.getFilesList()[0].getFile();
42
+ if (responseMapper.has(file)) {
43
+ responseMapper.get(file).getFilesList()[0].setDependenciesList(grpcResponse.getFilesList()[0].getDependenciesList());
44
+ }
45
+ else {
46
+ responseMapper.set(file, grpcResponse);
47
+ }
48
+ }
49
+ catch (e) {
50
+ console.error(e);
51
+ logger.log(`Error while scanning dependencies.", ${request.getFilesList()[0].getFile()}, ${request.getFilesList()[0].getPurlsList()}`);
52
+ }
53
+ }
54
+ const response = {
55
+ filesList: [],
56
+ status: 'Success',
57
+ };
58
+ responseMapper.forEach((depResponse) => {
59
+ const responseToObj = depResponse.toObject();
60
+ response.filesList.push(responseToObj.filesList[0]);
61
+ // Override response status with dependency error/warning message if dependency failed
62
+ if (depResponse.getStatus().getStatus() !== 1) {
63
+ response.status = depResponse.getStatus().getMessage();
64
+ }
65
+ });
66
+ return response;
67
+ }
46
68
  purlAdapter(localDependencies) {
47
69
  for (const file of localDependencies.files) {
48
70
  for (const purl of file.purls) {
@@ -58,23 +80,35 @@ export class DependencyScanner {
58
80
  }
59
81
  return localDependencies;
60
82
  }
61
- buildRequest(localDependencies) {
83
+ chunkPurls(purls) {
84
+ const chunks = [];
85
+ for (let i = 0; i < purls.length; i += this.config.CHUNK_REQUEST_SIZE) {
86
+ chunks.push(purls.slice(i, i + this.config.CHUNK_REQUEST_SIZE));
87
+ }
88
+ return chunks;
89
+ }
90
+ buildRequests(localDependencies) {
62
91
  try {
63
- const depRequest = new DependencyRequest();
64
- depRequest.setDepth(1);
92
+ const requests = [];
65
93
  for (const file of localDependencies.files) {
66
- const fileMsg = new DependencyRequest.Files();
67
- fileMsg.setFile(file.file);
68
- for (const purl of file.purls) {
69
- const purlMsg = new DependencyRequest.Purls();
70
- purlMsg.setPurl(purl.purl);
71
- if (purl?.requirement)
72
- purlMsg.setRequirement(purl.requirement);
73
- fileMsg.addPurls(purlMsg);
94
+ const chunkedPurls = this.chunkPurls(file.purls);
95
+ for (const purls of chunkedPurls) {
96
+ const depRequest = new DependencyRequest();
97
+ depRequest.setDepth(1);
98
+ const fileMsg = new DependencyRequest.Files();
99
+ fileMsg.setFile(file.file);
100
+ for (const purl of purls) {
101
+ const purlMsg = new DependencyRequest.Purls();
102
+ purlMsg.setPurl(purl.purl);
103
+ if (purl?.requirement)
104
+ purlMsg.setRequirement(purl.requirement);
105
+ fileMsg.addPurls(purlMsg);
106
+ }
107
+ depRequest.addFiles(fileMsg);
108
+ requests.push(depRequest);
74
109
  }
75
- depRequest.addFiles(fileMsg);
76
110
  }
77
- return depRequest;
111
+ return requests;
78
112
  }
79
113
  catch (e) {
80
114
  console.error(e);
@@ -111,4 +145,4 @@ export class DependencyScanner {
111
145
  }
112
146
  }
113
147
  }
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeVNjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2RrL0RlcGVuZGVuY2llcy9EZXBlbmRlbmN5U2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQ0wsaUJBQWlCLEdBRWxCLE1BQU0sc0VBQXNFLENBQUM7QUFDOUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVwQyxNQUFNLE9BQU8saUJBQWlCO0lBQ3BCLGVBQWUsQ0FBb0I7SUFFbkMscUJBQXFCLENBQW9CO0lBRWpELFlBQVksR0FBRyxHQUFHLElBQUksb0JBQW9CLEVBQUU7UUFDMUMsd0NBQXdDO1FBQ3hDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEMsSUFBSSxRQUFnQixDQUFDO1lBQ3JCLElBQUksSUFBWSxDQUFDO1lBRWpCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTtnQkFBRSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3JFLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxPQUFPLEdBQUcsR0FB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
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeVNjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2RrL0RlcGVuZGVuY2llcy9EZXBlbmRlbmN5U2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQ0wsaUJBQWlCLEdBRWxCLE1BQU0sc0VBQXNFLENBQUM7QUFDOUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRW5DLE1BQU0sT0FBTyxpQkFBaUI7SUFDcEIsZUFBZSxDQUFvQjtJQUVuQyxxQkFBcUIsQ0FBb0I7SUFFekMsTUFBTSxHQUF5QixJQUFJLG9CQUFvQixFQUFFLENBQUM7SUFFbEUsWUFBWSxHQUEwQjtRQUVwQyxJQUFJLEdBQUc7WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUMzQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQVk7UUFDbEMsSUFBSSxDQUFDLENBQUMs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
@@ -1,4 +1,10 @@
1
- import { BaseConfig } from '../BaseConfig';
1
+ import { BaseConfig, IBaseConfig } from "../BaseConfig";
2
+ export interface IDependencyScannerCfg extends IBaseConfig {
3
+ CHUNK_REQUEST_SIZE?: number;
4
+ }
2
5
  export declare class DependencyScannerCfg extends BaseConfig {
3
- API_URL: string;
6
+ private _CHUNK_REQUEST_SIZE;
7
+ constructor(config?: IDependencyScannerCfg);
8
+ get CHUNK_REQUEST_SIZE(): number;
9
+ set CHUNK_REQUEST_SIZE(value: number);
4
10
  }
@@ -1,5 +1,18 @@
1
- import { BaseConfig } from '../BaseConfig';
1
+ import { BaseConfig } from "../BaseConfig";
2
+ const DEFAULT_CHUNK_REQUEST_SIZE = 10;
2
3
  export class DependencyScannerCfg extends BaseConfig {
3
- API_URL = 'https://api.scanoss.com';
4
+ _CHUNK_REQUEST_SIZE = DEFAULT_CHUNK_REQUEST_SIZE;
5
+ constructor(config) {
6
+ super(config);
7
+ if (config) {
8
+ this.CHUNK_REQUEST_SIZE = config.CHUNK_REQUEST_SIZE ? config.CHUNK_REQUEST_SIZE : DEFAULT_CHUNK_REQUEST_SIZE;
9
+ }
10
+ }
11
+ get CHUNK_REQUEST_SIZE() {
12
+ return this._CHUNK_REQUEST_SIZE;
13
+ }
14
+ set CHUNK_REQUEST_SIZE(value) {
15
+ this._CHUNK_REQUEST_SIZE = value;
16
+ }
4
17
  }
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeVNjYW5uZXJDZmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2RrL0RlcGVuZGVuY2llcy9EZXBlbmRlbmN5U2Nhbm5lckNmZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxVQUFVO0lBQ2xELE9BQU8sR0FBRyx5QkFBeUIsQ0FBQztDQUNyQyJ9
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeVNjYW5uZXJDZmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2RrL0RlcGVuZGVuY2llcy9EZXBlbmRlbmN5U2Nhbm5lckNmZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBTXRDLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxVQUFVO0lBQzFDLG1CQUFtQixHQUFHLDBCQUEwQixDQUFDO0lBQ3pELFlBQVksTUFBOEI7UUFDeEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2QsSUFBRyxNQUFNLEVBQUMsQ0FBQztZQUNULElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUM7UUFDL0csQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxrQkFBa0IsQ0FBQyxLQUFhO1FBQ2xDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDbkMsQ0FBQztDQUVGIn0=
@@ -18,4 +18,5 @@ export interface FilesList {
18
18
  }
19
19
  export interface IDependencyResponse {
20
20
  filesList: FilesList[];
21
+ status?: string;
21
22
  }
@@ -5,14 +5,36 @@ export interface PurlRequest extends CommonMessages.PurlRequest.AsObject {
5
5
  export interface EchoRequest extends CommonMessages.EchoRequest.AsObject {
6
6
  }
7
7
  export declare class BaseService {
8
- protected GRPC_ENDPOINT: string;
9
- protected API_TOKEN: string;
10
- protected IS_PREMIUM_SERVICE: boolean;
11
- protected SERVICE_NAME: string;
8
+ protected _HOSTNAME: string;
9
+ protected _API_TOKEN: string;
10
+ protected _IS_PREMIUM_SERVICE: boolean;
11
+ protected _SERVICE_NAME: string;
12
+ protected _CA_CERT: string;
13
+ protected _PROXY_URL: string;
14
+ constructor({ HOSTNAME, PROXY_URL, API_TOKEN, IS_PREMIUM_SERVICE, SERVICE_NAME, CA_CERT, }: {
15
+ HOSTNAME?: string;
16
+ PROXY_URL?: string;
17
+ API_TOKEN?: string;
18
+ IS_PREMIUM_SERVICE?: boolean;
19
+ SERVICE_NAME?: string;
20
+ CA_CERT?: string;
21
+ });
12
22
  protected handleResponse(response: {
13
23
  status: CommonMessages.StatusResponse.AsObject;
14
24
  }): {};
15
25
  protected buildGRPCPurlRequest(purlRequest: PurlRequest): CommonMessages.PurlRequest;
16
26
  protected buildGRPCEchoRequest(echoRequest: EchoRequest): CommonMessages.EchoRequest;
17
27
  protected generateChannelCredentials(): grpc.ChannelCredentials;
28
+ set SERVICE_NAME(serviceName: string);
29
+ get SERVICE_NAME(): string;
30
+ set HOSTNAME(host: string);
31
+ get HOSTNAME(): string;
32
+ set API_TOKEN(apiToken: string);
33
+ get API_TOKEN(): string;
34
+ set IS_PREMIUM_SERVICE(isPremiumService: boolean);
35
+ get IS_PREMIUM_SERVICE(): boolean;
36
+ set CA_CERT(caCertPath: string);
37
+ get CA_CERT(): string;
38
+ set PROXY_URL(proxyURL: string);
39
+ get PROXY_URL(): string;
18
40
  }