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.
- package/CHANGELOG.md +21 -0
- package/build/main/cli/bin/cli-bin.js +2 -2
- package/build/main/cli/commands/crypto.js +1 -1
- package/build/main/cli/commands/scan.js +8 -4
- package/build/main/sdk/BaseConfig.d.ts +38 -9
- package/build/main/sdk/BaseConfig.js +82 -13
- package/build/main/sdk/Cryptography/Algorithm/Components/ComponentAlgorithmScanner.js +5 -2
- package/build/main/sdk/Cryptography/CryptoCfg.d.ts +7 -13
- package/build/main/sdk/Cryptography/CryptoCfg.js +7 -14
- package/build/main/sdk/Cryptography/Hint/Components/ComponentHintScanner.js +5 -2
- package/build/main/sdk/Dependencies/DependencyScanner.d.ts +4 -1
- package/build/main/sdk/Dependencies/DependencyScanner.js +66 -32
- package/build/main/sdk/Dependencies/DependencyScannerCfg.d.ts +8 -2
- package/build/main/sdk/Dependencies/DependencyScannerCfg.js +14 -4
- package/build/main/sdk/Dependencies/DependencyTypes.d.ts +1 -0
- package/build/main/sdk/Services/Grpc/BaseService.d.ts +26 -4
- package/build/main/sdk/Services/Grpc/BaseService.js +92 -21
- package/build/main/sdk/Services/Grpc/CryptographyService.d.ts +9 -1
- package/build/main/sdk/Services/Grpc/CryptographyService.js +19 -12
- package/build/main/sdk/Services/Grpc/DependencyService.d.ts +10 -3
- package/build/main/sdk/Services/Grpc/DependencyService.js +19 -9
- package/build/main/sdk/scanner/ScannerCfg.d.ts +0 -1
- package/build/main/sdk/scanner/ScannerCfg.js +1 -3
- package/build/main/tsconfig.tsbuildinfo +1 -1
- package/build/module/cli/bin/cli-bin.js +2 -2
- package/build/module/cli/commands/crypto.js +1 -1
- package/build/module/cli/commands/scan.js +8 -4
- package/build/module/sdk/BaseConfig.d.ts +38 -9
- package/build/module/sdk/BaseConfig.js +82 -11
- package/build/module/sdk/Cryptography/Algorithm/Components/ComponentAlgorithmScanner.js +5 -2
- package/build/module/sdk/Cryptography/CryptoCfg.d.ts +7 -13
- package/build/module/sdk/Cryptography/CryptoCfg.js +7 -15
- package/build/module/sdk/Cryptography/Hint/Components/ComponentHintScanner.js +5 -2
- package/build/module/sdk/Dependencies/DependencyScanner.d.ts +4 -1
- package/build/module/sdk/Dependencies/DependencyScanner.js +66 -32
- package/build/module/sdk/Dependencies/DependencyScannerCfg.d.ts +8 -2
- package/build/module/sdk/Dependencies/DependencyScannerCfg.js +16 -3
- package/build/module/sdk/Dependencies/DependencyTypes.d.ts +1 -0
- package/build/module/sdk/Services/Grpc/BaseService.d.ts +26 -4
- package/build/module/sdk/Services/Grpc/BaseService.js +92 -20
- package/build/module/sdk/Services/Grpc/CryptographyService.d.ts +9 -1
- package/build/module/sdk/Services/Grpc/CryptographyService.js +19 -12
- package/build/module/sdk/Services/Grpc/DependencyService.d.ts +10 -3
- package/build/module/sdk/Services/Grpc/DependencyService.js +20 -11
- package/build/module/sdk/scanner/ScannerCfg.d.ts +0 -1
- package/build/module/sdk/scanner/ScannerCfg.js +1 -3
- package/build/module/tsconfig.module.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -4,24 +4,39 @@ import { Logger, logger } from '../../Logger';
|
|
|
4
4
|
import { HEADER_NAME_API_TOKEN, SCANOSS_GRPC_ENDPOINT } from '../../Constants';
|
|
5
5
|
var Level = Logger.Level;
|
|
6
6
|
import { ERROR_SERVICES_GRPC_API_TOKEN_REQUIRED } from '../../Errors';
|
|
7
|
+
import fs from "fs";
|
|
7
8
|
export class BaseService {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
_HOSTNAME = SCANOSS_GRPC_ENDPOINT;
|
|
10
|
+
_API_TOKEN = '';
|
|
11
|
+
_IS_PREMIUM_SERVICE = false;
|
|
12
|
+
_SERVICE_NAME = '';
|
|
13
|
+
_CA_CERT;
|
|
14
|
+
_PROXY_URL;
|
|
15
|
+
constructor({ HOSTNAME, PROXY_URL, API_TOKEN, IS_PREMIUM_SERVICE, SERVICE_NAME, CA_CERT, }) {
|
|
16
|
+
this.API_TOKEN = API_TOKEN;
|
|
17
|
+
this.PROXY_URL = PROXY_URL;
|
|
18
|
+
this.IS_PREMIUM_SERVICE = IS_PREMIUM_SERVICE;
|
|
19
|
+
this.SERVICE_NAME = SERVICE_NAME;
|
|
20
|
+
this.CA_CERT = CA_CERT;
|
|
21
|
+
this.HOSTNAME = HOSTNAME;
|
|
22
|
+
if (this.PROXY_URL)
|
|
23
|
+
process.env.grpc_proxy = this.PROXY_URL;
|
|
24
|
+
if (this.IS_PREMIUM_SERVICE && !this.API_TOKEN)
|
|
25
|
+
throw new Error(ERROR_SERVICES_GRPC_API_TOKEN_REQUIRED);
|
|
26
|
+
}
|
|
12
27
|
handleResponse(response) {
|
|
13
28
|
const { status, ...responseWithoutStatus } = response;
|
|
14
29
|
if (status.status === CommonMessages.StatusCode.FAILED) {
|
|
15
|
-
logger.log(`[ GRPC ${this.
|
|
30
|
+
logger.log(`[ GRPC ${this._SERVICE_NAME} ] - Server GRPC Code: ${status.status} - ${status.message}`, Level.error);
|
|
16
31
|
throw new Error(status.message);
|
|
17
32
|
}
|
|
18
33
|
else if (status.status === CommonMessages.StatusCode.WARNING ||
|
|
19
34
|
status.status === CommonMessages.StatusCode.SUCCEEDED_WITH_WARNINGS ||
|
|
20
35
|
status.status === CommonMessages.StatusCode.UNSPECIFIED) {
|
|
21
|
-
logger.log(`[ GRPC ${this.
|
|
36
|
+
logger.log(`[ GRPC ${this._SERVICE_NAME} ] - Server GRPC Code: ${status.status} - ${status.message}`, Level.warn);
|
|
22
37
|
}
|
|
23
38
|
else if (status.status === CommonMessages.StatusCode.SUCCESS) {
|
|
24
|
-
logger.log(`[ GRPC ${this.
|
|
39
|
+
logger.log(`[ GRPC ${this._SERVICE_NAME} ] - Server GRPC Code: ${status.status} - ${status.message}`, Level.info);
|
|
25
40
|
}
|
|
26
41
|
return responseWithoutStatus;
|
|
27
42
|
}
|
|
@@ -42,18 +57,75 @@ export class BaseService {
|
|
|
42
57
|
return gRPCEchoRequest;
|
|
43
58
|
}
|
|
44
59
|
generateChannelCredentials() {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
60
|
+
let cc = grpc.credentials.createSsl();
|
|
61
|
+
if (this.CA_CERT && this.PROXY_URL) {
|
|
62
|
+
const caCert = fs.readFileSync(this.CA_CERT);
|
|
63
|
+
cc = grpc.credentials.createSsl(caCert);
|
|
64
|
+
}
|
|
65
|
+
if (this.API_TOKEN) {
|
|
66
|
+
const metaCallback = (_params, callback) => {
|
|
67
|
+
const metadata = new grpc.Metadata();
|
|
68
|
+
metadata.add(HEADER_NAME_API_TOKEN, this.API_TOKEN);
|
|
69
|
+
callback(null, metadata);
|
|
70
|
+
};
|
|
71
|
+
const callCredentials = grpc.credentials.createFromMetadataGenerator(metaCallback);
|
|
72
|
+
cc = grpc.credentials.combineChannelCredentials(cc, callCredentials);
|
|
73
|
+
}
|
|
74
|
+
return cc;
|
|
75
|
+
}
|
|
76
|
+
set SERVICE_NAME(serviceName) {
|
|
77
|
+
this._SERVICE_NAME = serviceName;
|
|
78
|
+
}
|
|
79
|
+
get SERVICE_NAME() {
|
|
80
|
+
return this._SERVICE_NAME;
|
|
81
|
+
}
|
|
82
|
+
set HOSTNAME(host) {
|
|
83
|
+
if (host !== null && host !== '') {
|
|
84
|
+
//Extract host from URL (hostname:port)
|
|
85
|
+
if (host.startsWith('http')) {
|
|
86
|
+
const apiURL = new URL(host);
|
|
87
|
+
let hostname;
|
|
88
|
+
let port;
|
|
89
|
+
if (!apiURL.port)
|
|
90
|
+
port = apiURL.protocol === 'https:' ? '443' : '80';
|
|
91
|
+
hostname = apiURL.host;
|
|
92
|
+
this._HOSTNAME = `${hostname}:${port}`;
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
this._HOSTNAME = host;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
get HOSTNAME() {
|
|
99
|
+
return this._HOSTNAME;
|
|
100
|
+
}
|
|
101
|
+
set API_TOKEN(apiToken) {
|
|
102
|
+
if (apiToken != null && apiToken != '')
|
|
103
|
+
this._API_TOKEN = apiToken;
|
|
104
|
+
}
|
|
105
|
+
get API_TOKEN() {
|
|
106
|
+
return this._API_TOKEN;
|
|
107
|
+
}
|
|
108
|
+
set IS_PREMIUM_SERVICE(isPremiumService) {
|
|
109
|
+
if (isPremiumService != null)
|
|
110
|
+
this._IS_PREMIUM_SERVICE = isPremiumService;
|
|
111
|
+
}
|
|
112
|
+
get IS_PREMIUM_SERVICE() {
|
|
113
|
+
return this._IS_PREMIUM_SERVICE;
|
|
114
|
+
}
|
|
115
|
+
set CA_CERT(caCertPath) {
|
|
116
|
+
if (caCertPath != null && caCertPath != '')
|
|
117
|
+
this._CA_CERT = caCertPath;
|
|
118
|
+
}
|
|
119
|
+
get CA_CERT() {
|
|
120
|
+
return this._CA_CERT;
|
|
121
|
+
}
|
|
122
|
+
set PROXY_URL(proxyURL) {
|
|
123
|
+
if (proxyURL != null && proxyURL != '') {
|
|
124
|
+
this._PROXY_URL = proxyURL;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
get PROXY_URL() {
|
|
128
|
+
return this._PROXY_URL;
|
|
57
129
|
}
|
|
58
130
|
}
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvc2RrL1NlcnZpY2VzL0dycGMvQmFzZVNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLGNBQWMsTUFBTSwyQ0FBMkMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRSxJQUFPLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzVCLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFNcEIsTUFBTSxPQUFPLFdBQVc7SUFDWixTQUFTLEdBQVcscUJBQXFCLENBQUM7SUFDMUMsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDckMsYUFBYSxHQUFXLEVBQUUsQ0FBQztJQUMzQixRQUFRLENBQVM7SUFDakIsVUFBVSxDQUFTO0lBRTdCLFlBQVksRUFDRSxRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLE9BQU8sR0FRcEI7UUFDQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFH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
|
|
@@ -5,8 +5,16 @@ export interface AlgorithmResponse extends CryptographyMessages.AlgorithmRespons
|
|
|
5
5
|
export interface HintsResponse extends CryptographyMessages.HintsInRangeResponse.AsObject {
|
|
6
6
|
}
|
|
7
7
|
export declare class CryptographyService extends BaseService {
|
|
8
|
+
static readonly serviceName = "CryptographyService";
|
|
8
9
|
private client;
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Creates CryptographyService Instance.
|
|
12
|
+
* @param {string} token - Optional. API TOKEN.
|
|
13
|
+
* @param {string} hostName - Optional. Destination Host.
|
|
14
|
+
* @param {string} proxyHost -Optional. Proxy Host.
|
|
15
|
+
* @param {string} caCertPath - Optional. Path to certificates.
|
|
16
|
+
*/
|
|
17
|
+
constructor(token: string, hostName: string, proxyHost?: string, caCertPath?: string);
|
|
10
18
|
getAlgorithms(req: PurlRequest): Promise<AlgorithmResponse>;
|
|
11
19
|
getEncryptionHints(req: PurlRequest): Promise<HintsResponse>;
|
|
12
20
|
}
|
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
import { CryptographyClient } from './scanoss/api/cryptography/v2/scanoss-cryptography_grpc_pb';
|
|
2
2
|
import { BaseService } from './BaseService';
|
|
3
|
-
import { ERROR_SERVICES_GRPC_API_TOKEN_REQUIRED } from '../../Errors';
|
|
4
3
|
export class CryptographyService extends BaseService {
|
|
4
|
+
static serviceName = 'CryptographyService';
|
|
5
5
|
client;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Creates CryptographyService Instance.
|
|
8
|
+
* @param {string} token - Optional. API TOKEN.
|
|
9
|
+
* @param {string} hostName - Optional. Destination Host.
|
|
10
|
+
* @param {string} proxyHost -Optional. Proxy Host.
|
|
11
|
+
* @param {string} caCertPath - Optional. Path to certificates.
|
|
12
|
+
*/
|
|
13
|
+
constructor(token, hostName, proxyHost, caCertPath) {
|
|
14
|
+
super({
|
|
15
|
+
HOSTNAME: hostName,
|
|
16
|
+
PROXY_URL: proxyHost,
|
|
17
|
+
CA_CERT: caCertPath,
|
|
18
|
+
SERVICE_NAME: CryptographyService.serviceName,
|
|
19
|
+
IS_PREMIUM_SERVICE: true,
|
|
20
|
+
API_TOKEN: token,
|
|
21
|
+
});
|
|
22
|
+
this.client = new CryptographyClient(this.HOSTNAME, this.generateChannelCredentials());
|
|
16
23
|
}
|
|
17
24
|
async getAlgorithms(req) {
|
|
18
25
|
return new Promise((resolve, reject) => {
|
|
@@ -45,4 +52,4 @@ export class CryptographyService extends BaseService {
|
|
|
45
52
|
});
|
|
46
53
|
}
|
|
47
54
|
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3J5cHRvZ3JhcGh5U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvU2VydmljZXMvR3JwYy9DcnlwdG9ncmFwaHlTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBRWhHLE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFTekQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFdBQVc7SUFDM0MsTUFBTSxDQUFVLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQztJQUNuRCxNQUFNLENBQXFCO0lBRW5DOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBYSxFQUFFLFFBQWdCLEVBQUUsU0FBa0IsRUFBRSxVQUFtQjtRQUNsRixLQUFLLENBQUM7WUFDSixRQUFRLEVBQUUsUUFBUTtZQUNsQixTQUFTLEVBQUUsU0FBUztZQUNwQixPQUFPLEVBQUUsVUFBVTtZQUNuQixZQUFZLEVBQUUsbUJBQW1CLENBQUMsV0FBVztZQUM3QyxrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxrQkFBa0IsQ0FDbEMsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FDbEMsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQWdCO1FBQ3pDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFDOUIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ2hCLElBQUksR0FBRztvQkFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQztvQkFDSCxhQUFhO29CQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BELENBQUM7Z0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDWCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1osQ0FBQztZQUNILENBQUMsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQWdCO1FBQzlDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQ3pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFDOUIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ2hCLElBQUksR0FBRztvQkFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQztvQkFDSCxhQUFhO29CQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BELENBQUM7Z0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDWCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1osQ0FBQztZQUNILENBQUMsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDIn0=
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import * as DependenciesMessages from './scanoss/api/dependencies/v2/scanoss-dependencies_pb';
|
|
2
2
|
import * as CommonMessages from './scanoss/api/common/v2/scanoss-common_pb';
|
|
3
|
-
|
|
3
|
+
import { BaseService } from "./BaseService";
|
|
4
|
+
export declare class DependencyService extends BaseService {
|
|
5
|
+
static readonly serviceName = "DependencyService";
|
|
4
6
|
private client;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Creates DependencyService Instance.
|
|
9
|
+
* @param {string} hostName - Optional. Destination Host.
|
|
10
|
+
* @param {string} proxyHost -Optional. Proxy Host.
|
|
11
|
+
* @param {string} caCertPath - Optional. Path to certificates.
|
|
12
|
+
*/
|
|
13
|
+
constructor(hostName?: string, proxyHost?: string, caCertPath?: string);
|
|
7
14
|
get(req: DependenciesMessages.DependencyRequest): Promise<DependenciesMessages.DependencyResponse>;
|
|
8
15
|
buildDependencyRequestMsg(plainObj: DependenciesMessages.DependencyRequest.AsObject): DependenciesMessages.DependencyRequest;
|
|
9
16
|
echo(req: CommonMessages.EchoRequest): Promise<CommonMessages.EchoResponse>;
|
|
@@ -1,16 +1,25 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { DependenciesClient } from './scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb';
|
|
1
|
+
import { DependenciesClient } from "./scanoss/api/dependencies/v2/scanoss-dependencies_grpc_pb";
|
|
3
2
|
import * as DependenciesMessages from './scanoss/api/dependencies/v2/scanoss-dependencies_pb';
|
|
4
3
|
import * as CommonMessages from './scanoss/api/common/v2/scanoss-common_pb';
|
|
5
|
-
|
|
4
|
+
import { BaseService } from "./BaseService";
|
|
5
|
+
export class DependencyService extends BaseService {
|
|
6
|
+
static serviceName = 'DependencyService';
|
|
6
7
|
client;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Creates DependencyService Instance.
|
|
10
|
+
* @param {string} hostName - Optional. Destination Host.
|
|
11
|
+
* @param {string} proxyHost -Optional. Proxy Host.
|
|
12
|
+
* @param {string} caCertPath - Optional. Path to certificates.
|
|
13
|
+
*/
|
|
14
|
+
constructor(hostName, proxyHost, caCertPath) {
|
|
15
|
+
super({
|
|
16
|
+
HOSTNAME: hostName,
|
|
17
|
+
IS_PREMIUM_SERVICE: false,
|
|
18
|
+
SERVICE_NAME: DependencyService.serviceName,
|
|
19
|
+
PROXY_URL: proxyHost,
|
|
20
|
+
CA_CERT: caCertPath,
|
|
21
|
+
});
|
|
22
|
+
this.client = new DependenciesClient(this.HOSTNAME, this.generateChannelCredentials());
|
|
14
23
|
}
|
|
15
24
|
async get(req) {
|
|
16
25
|
return new Promise((resolve, reject) => {
|
|
@@ -63,4 +72,4 @@ export class DependencyService {
|
|
|
63
72
|
}
|
|
64
73
|
}
|
|
65
74
|
}
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvc2RrL1NlcnZpY2VzL0dycGMvRGVwZW5kZW5jeVNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGtCQUFrQixFQUF1QixNQUFNLDREQUE0RCxDQUFDO0FBQ3JILE9BQU8sS0FBSyxvQkFBb0IsTUFBTSx1REFBdUQsQ0FBQztBQUM5RixPQUFPLEtBQUssY0FBYyxNQUFNLDJDQUEyQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFdBQVc7SUFDekMsTUFBTSxDQUFVLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQztJQUNqRCxNQUFNLENBQXFCO0lBRW5DOzs7OztPQUtHO0lBQ0gsWUFBWSxRQUFpQixFQUFFLFNBQWtCLEVBQUUsVUFBbUI7UUFDcEUsS0FBSyxDQUFDO1lBQ0osUUFBUSxFQUFFLFFBQVE7WUFDbEIsa0JBQWtCLEVBQUUsS0FBSztZQUN6QixZQUFZLEVBQUUsaUJBQWlCLENBQUMsV0FBVztZQUMzQyxTQUFTLEVBQUUsU0FBUztZQUNwQixPQUFPLEVBQUUsVUFBVTtTQUNwQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksa0JBQWtCLENBQ2xDLElBQUksQ0FBQyxRQUFRLEVBQ2IsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQ2xDLENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLEdBQUcsQ0FDZCxHQUEyQztRQUUzQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtnQkFDakQsSUFBSSxHQUFHO29CQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0seUJBQXlCLENBQzlCLFFBQXlEO1FBRXpELElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLElBQUksb0JBQW9CLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNoRSxLQUFLLE1BQU0sVUFBVSxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbkUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNuRSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDM0IsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQzFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzVCLENBQUM7Z0JBQ0QsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQixDQUFDO1lBQ0QsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSSxDQUNmLEdBQStCO1FBRS9CLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFO2dCQUN0QyxJQUFJLEdBQUc7b0JBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxtQkFBbUIsQ0FDeEIsUUFBNkM7UUFFN0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckQsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekMsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUMifQ==
|
|
@@ -2,8 +2,6 @@ import { BaseConfig } from '../BaseConfig';
|
|
|
2
2
|
export class ScannerCfg extends BaseConfig {
|
|
3
3
|
// Client Timestamp, default value is scanoss-js/${version}
|
|
4
4
|
CLIENT_TIMESTAMP = '';
|
|
5
|
-
// API URL
|
|
6
|
-
API_URL = null;
|
|
7
5
|
API_KEY = '';
|
|
8
6
|
//Set to true to ignore self certificates issues
|
|
9
7
|
IGNORE_CERT_ERRORS = false;
|
|
@@ -29,4 +27,4 @@ export class ScannerCfg extends BaseConfig {
|
|
|
29
27
|
this.API_URL = ScannerCfg.getDefaultURL();
|
|
30
28
|
}
|
|
31
29
|
}
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Nhbm5lckNmZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZGsvc2Nhbm5lci9TY2FubmVyQ2ZnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsTUFBTSxPQUFPLFVBQVcsU0FBUSxVQUFVO0lBQ3hDLDJEQUEyRDtJQUNwRCxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFFdEIsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUVwQixnREFBZ0Q7SUFDekMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBRWxDLHVCQUF1QjtJQUNoQixpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFFN0IsK0JBQStCO0lBQ3hCLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFFeEIsK0NBQStDO0lBQ3hDLGlCQUFpQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFFOUIsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUV4QixxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFDcEMsMERBQTBEO0lBQzFELDhFQUE4RTtJQUN2RSwrQkFBK0IsR0FBRyxFQUFFLENBQUM7SUFFckMsbUNBQW1DLEdBQUcsQ0FBQyxDQUFDO0lBRXhDLG9CQUFvQixHQUFHLElBQUksQ0FBQztJQUVuQywrQ0FBK0M7SUFDeEMsdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0lBRTlCLCtCQUErQixHQUFHLElBQUksQ0FBQztJQUV2QywrQkFBK0IsR0FBRyxJQUFJLENBQUM7SUFFOUM7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzVDLENBQUM7Q0FDRiJ9
|