@ampsec/platform-client 40.0.0 → 40.2.0
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/src/dto/enums/finding.status.d.ts +25 -1
- package/build/src/dto/enums/finding.status.js +25 -1
- package/build/src/dto/enums/finding.status.js.map +1 -1
- package/build/src/services/AmpApi.d.ts +3 -2
- package/build/src/services/AmpApi.js +2 -1
- package/build/src/services/AmpApi.js.map +1 -1
- package/build/src/services/EngageApi.js +3 -3
- package/build/src/services/EngageApi.js.map +1 -1
- package/build/src/services/data.service.d.ts +5 -5
- package/build/src/services/data.service.js +45 -45
- package/build/src/services/data.service.js.map +1 -1
- package/build/src/services/entity.service.d.ts +5 -5
- package/build/src/services/entity.service.js +56 -56
- package/build/src/services/entity.service.js.map +1 -1
- package/build/src/services/findings.service.d.ts +10 -0
- package/build/src/services/findings.service.js +24 -0
- package/build/src/services/findings.service.js.map +1 -0
- package/build/src/services/index.d.ts +1 -0
- package/build/src/services/index.js +1 -0
- package/build/src/services/index.js.map +1 -1
- package/build/src/services/reports.service.d.ts +2 -2
- package/build/src/services/reports.service.js +40 -40
- package/build/src/services/reports.service.js.map +1 -1
- package/build/src/services/rest/AgentIdentityService.d.ts +2 -2
- package/build/src/services/rest/AgentIdentityService.js +17 -17
- package/build/src/services/rest/AgentIdentityService.js.map +1 -1
- package/build/src/services/rest/ConnectorInstallService.d.ts +2 -2
- package/build/src/services/rest/ConnectorInstallService.js +12 -12
- package/build/src/services/rest/ConnectorInstallService.js.map +1 -1
- package/build/src/services/rest/EnumService.js +8 -8
- package/build/src/services/rest/EnumService.js.map +1 -1
- package/build/src/services/rest/RestClient.d.ts +1 -1
- package/build/src/services/rest/RestClient.js +27 -27
- package/build/src/services/rest/RestClient.js.map +1 -1
- package/build/src/services/rest/UserIdentityService.d.ts +1 -1
- package/build/src/services/rest/UserIdentityService.js +7 -7
- package/build/src/services/rest/UserIdentityService.js.map +1 -1
- package/build/src/services/rest/rateLimit.rest.d.ts +1 -1
- package/build/src/services/rest/rateLimit.rest.js +8 -8
- package/build/src/services/rest/rateLimit.rest.js.map +1 -1
- package/build/src/services/rest/retry.rest.js +1 -1
- package/build/src/services/rest/retry.rest.js.map +1 -1
- package/build/src/services/settings.service.d.ts +10 -10
- package/build/src/services/settings.service.js +96 -96
- package/build/src/services/settings.service.js.map +1 -1
- package/package.json +1 -1
- package/src/dto/enums/finding.status.ts +26 -1
- package/src/services/AmpApi.ts +3 -3
- package/src/services/EngageApi.ts +3 -3
- package/src/services/data.service.ts +10 -10
- package/src/services/entity.service.ts +10 -10
- package/src/services/findings.service.ts +24 -0
- package/src/services/index.ts +1 -0
- package/src/services/reports.service.ts +4 -4
- package/src/services/rest/AgentIdentityService.ts +5 -5
- package/src/services/rest/ConnectorInstallService.ts +4 -4
- package/src/services/rest/EnumService.ts +2 -2
- package/src/services/rest/RestClient.ts +2 -2
- package/src/services/rest/UserIdentityService.ts +3 -3
- package/src/services/rest/rateLimit.rest.ts +3 -3
- package/src/services/rest/retry.rest.ts +1 -1
- package/src/services/settings.service.ts +20 -20
|
@@ -7,113 +7,113 @@ exports.AmpSettingsMap = exports.AmpSettingsService = void 0;
|
|
|
7
7
|
const lodash_1 = __importDefault(require("lodash"));
|
|
8
8
|
class AmpSettingsService {
|
|
9
9
|
constructor(rest, targetApi = 'api') {
|
|
10
|
+
this.getSettingsMap = async (tid) => {
|
|
11
|
+
const res = await this.rest.call({
|
|
12
|
+
url: `/${this.targetApi}/v1/settings`,
|
|
13
|
+
method: 'GET',
|
|
14
|
+
params: { tid },
|
|
15
|
+
});
|
|
16
|
+
const page = res.data;
|
|
17
|
+
const settings = page.data;
|
|
18
|
+
const rawSettingsMap = AmpSettingsService.formatSettingMap(settings, true);
|
|
19
|
+
return new AmpSettingsMap(rawSettingsMap, settings);
|
|
20
|
+
};
|
|
21
|
+
this.create = async (key, value, tid, cid) => {
|
|
22
|
+
const page = await this.rest.call({
|
|
23
|
+
url: `/${this.targetApi}/v1/settings`,
|
|
24
|
+
method: 'POST',
|
|
25
|
+
data: {
|
|
26
|
+
tid,
|
|
27
|
+
cid,
|
|
28
|
+
key,
|
|
29
|
+
value,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
const settings = page.data;
|
|
33
|
+
return settings[0];
|
|
34
|
+
};
|
|
35
|
+
this.update = async (id, entity) => {
|
|
36
|
+
const page = await this.rest.call({
|
|
37
|
+
url: `/${this.targetApi}/v1/settings/${id}`,
|
|
38
|
+
method: 'PUT',
|
|
39
|
+
data: entity,
|
|
40
|
+
});
|
|
41
|
+
const settings = page.data;
|
|
42
|
+
return settings[0];
|
|
43
|
+
};
|
|
44
|
+
this.delete = async (id) => {
|
|
45
|
+
const page = await this.rest.call({
|
|
46
|
+
url: `/${this.targetApi}/v1/settings/${id}`,
|
|
47
|
+
method: 'DELETE',
|
|
48
|
+
});
|
|
49
|
+
const settings = page.data;
|
|
50
|
+
return settings[0];
|
|
51
|
+
};
|
|
10
52
|
this.rest = rest;
|
|
11
53
|
this.targetApi = targetApi;
|
|
12
54
|
}
|
|
13
|
-
async getSettingsMap(tid) {
|
|
14
|
-
const res = await this.rest.call({
|
|
15
|
-
url: `/${this.targetApi}/v1/settings`,
|
|
16
|
-
method: 'GET',
|
|
17
|
-
params: { tid },
|
|
18
|
-
});
|
|
19
|
-
const page = res.data;
|
|
20
|
-
const settings = page.data;
|
|
21
|
-
const rawSettingsMap = AmpSettingsService.formatSettingMap(settings, true);
|
|
22
|
-
return new AmpSettingsMap(rawSettingsMap, settings);
|
|
23
|
-
}
|
|
24
|
-
async create(key, value, tid, cid) {
|
|
25
|
-
const page = await this.rest.call({
|
|
26
|
-
url: `/${this.targetApi}/v1/settings`,
|
|
27
|
-
method: 'POST',
|
|
28
|
-
data: {
|
|
29
|
-
tid,
|
|
30
|
-
cid,
|
|
31
|
-
key,
|
|
32
|
-
value,
|
|
33
|
-
},
|
|
34
|
-
});
|
|
35
|
-
const settings = page.data;
|
|
36
|
-
return settings[0];
|
|
37
|
-
}
|
|
38
|
-
async update(id, entity) {
|
|
39
|
-
const page = await this.rest.call({
|
|
40
|
-
url: `/${this.targetApi}/v1/settings/${id}`,
|
|
41
|
-
method: 'PUT',
|
|
42
|
-
data: entity,
|
|
43
|
-
});
|
|
44
|
-
const settings = page.data;
|
|
45
|
-
return settings[0];
|
|
46
|
-
}
|
|
47
|
-
async delete(id) {
|
|
48
|
-
const page = await this.rest.call({
|
|
49
|
-
url: `/${this.targetApi}/v1/settings/${id}`,
|
|
50
|
-
method: 'DELETE',
|
|
51
|
-
});
|
|
52
|
-
const settings = page.data;
|
|
53
|
-
return settings[0];
|
|
54
|
-
}
|
|
55
|
-
static formatSettingMap(settings, valuesOnly = true) {
|
|
56
|
-
const rawSettingsMap = {
|
|
57
|
-
tenantSettings: {},
|
|
58
|
-
connectorSettings: {},
|
|
59
|
-
};
|
|
60
|
-
settings.forEach(setting => {
|
|
61
|
-
if (setting.cid) {
|
|
62
|
-
if (!rawSettingsMap.connectorSettings[setting.cid]) {
|
|
63
|
-
rawSettingsMap.connectorSettings[setting.cid] = {};
|
|
64
|
-
}
|
|
65
|
-
rawSettingsMap.connectorSettings[setting.cid][setting.key] = valuesOnly ? setting.value : setting;
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
rawSettingsMap.tenantSettings[setting.key] = valuesOnly ? setting.value : setting;
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
return rawSettingsMap;
|
|
72
|
-
}
|
|
73
55
|
}
|
|
74
56
|
exports.AmpSettingsService = AmpSettingsService;
|
|
57
|
+
AmpSettingsService.formatSettingMap = (settings, valuesOnly = true) => {
|
|
58
|
+
const rawSettingsMap = {
|
|
59
|
+
tenantSettings: {},
|
|
60
|
+
connectorSettings: {},
|
|
61
|
+
};
|
|
62
|
+
settings.forEach(setting => {
|
|
63
|
+
if (setting.cid) {
|
|
64
|
+
if (!rawSettingsMap.connectorSettings[setting.cid]) {
|
|
65
|
+
rawSettingsMap.connectorSettings[setting.cid] = {};
|
|
66
|
+
}
|
|
67
|
+
rawSettingsMap.connectorSettings[setting.cid][setting.key] = valuesOnly ? setting.value : setting;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
rawSettingsMap.tenantSettings[setting.key] = valuesOnly ? setting.value : setting;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
return rawSettingsMap;
|
|
74
|
+
};
|
|
75
75
|
class AmpSettingsMap {
|
|
76
76
|
constructor(settings, rawSettingsList) {
|
|
77
77
|
this.rawSettingsList = new Array();
|
|
78
|
-
this.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const tenantVal = this.settings.tenantSettings[key.id];
|
|
83
|
-
if (tenantVal) {
|
|
84
|
-
return tenantVal;
|
|
85
|
-
}
|
|
86
|
-
return key.defaultValue;
|
|
87
|
-
}
|
|
88
|
-
getConnectorSetting(cid, key) {
|
|
89
|
-
const tenantVal = this.settings.tenantSettings[key.id];
|
|
90
|
-
const connectorMap = this.settings.connectorSettings[cid];
|
|
91
|
-
if (connectorMap) {
|
|
92
|
-
const connectorVal = connectorMap[key.id];
|
|
93
|
-
if (connectorVal) {
|
|
94
|
-
return connectorVal;
|
|
78
|
+
this.getGlobalSetting = (key) => {
|
|
79
|
+
const tenantVal = this.settings.tenantSettings[key.id];
|
|
80
|
+
if (tenantVal) {
|
|
81
|
+
return tenantVal;
|
|
95
82
|
}
|
|
96
|
-
|
|
97
|
-
if (tenantVal) {
|
|
98
|
-
return tenantVal;
|
|
99
|
-
}
|
|
100
|
-
return key.defaultValue;
|
|
101
|
-
}
|
|
102
|
-
getConnectorSettings(cid) {
|
|
103
|
-
if (!this.settings.connectorSettings[cid]) {
|
|
104
|
-
return undefined;
|
|
105
|
-
}
|
|
106
|
-
return lodash_1.default.clone(this.settings.connectorSettings[cid]);
|
|
107
|
-
}
|
|
108
|
-
getRawMap() {
|
|
109
|
-
return AmpSettingsService.formatSettingMap(this.rawSettingsList, false);
|
|
110
|
-
}
|
|
111
|
-
static asKey(key, defaultValue) {
|
|
112
|
-
return {
|
|
113
|
-
id: key,
|
|
114
|
-
defaultValue,
|
|
83
|
+
return key.defaultValue;
|
|
115
84
|
};
|
|
85
|
+
this.getConnectorSetting = (cid, key) => {
|
|
86
|
+
const tenantVal = this.settings.tenantSettings[key.id];
|
|
87
|
+
const connectorMap = this.settings.connectorSettings[cid];
|
|
88
|
+
if (connectorMap) {
|
|
89
|
+
const connectorVal = connectorMap[key.id];
|
|
90
|
+
if (connectorVal) {
|
|
91
|
+
return connectorVal;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (tenantVal) {
|
|
95
|
+
return tenantVal;
|
|
96
|
+
}
|
|
97
|
+
return key.defaultValue;
|
|
98
|
+
};
|
|
99
|
+
this.getConnectorSettings = (cid) => {
|
|
100
|
+
if (!this.settings.connectorSettings[cid]) {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
return lodash_1.default.clone(this.settings.connectorSettings[cid]);
|
|
104
|
+
};
|
|
105
|
+
this.getRawMap = () => {
|
|
106
|
+
return AmpSettingsService.formatSettingMap(this.rawSettingsList, false);
|
|
107
|
+
};
|
|
108
|
+
this.settings = settings;
|
|
109
|
+
this.rawSettingsList = rawSettingsList;
|
|
116
110
|
}
|
|
117
111
|
}
|
|
118
112
|
exports.AmpSettingsMap = AmpSettingsMap;
|
|
113
|
+
AmpSettingsMap.asKey = (key, defaultValue) => {
|
|
114
|
+
return {
|
|
115
|
+
id: key,
|
|
116
|
+
defaultValue,
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
119
|
//# sourceMappingURL=settings.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.service.js","sourceRoot":"","sources":["../../../src/services/settings.service.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAuB;AAoBvB,MAAa,kBAAkB;IAG7B,YAAY,IAAgB,EAAE,YAAuB,KAAK;
|
|
1
|
+
{"version":3,"file":"settings.service.js","sourceRoot":"","sources":["../../../src/services/settings.service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enum for FindingStatus
|
|
3
|
+
*
|
|
4
|
+
* | | OPEN | CLOSED |
|
|
5
|
+
* | :-------------------- | :------------------- | :----- |
|
|
6
|
+
* | Included in score | OPEN + ACCEPTED_RISK | N/A |
|
|
7
|
+
* | Not included in score | FALSE_POSITIVE | CLOSED |
|
|
8
|
+
*
|
|
9
|
+
* - OPEN
|
|
10
|
+
* - Included in Score
|
|
11
|
+
* - OPEN
|
|
12
|
+
* - ACCEPTED_RISK
|
|
13
|
+
* - Not included in Score
|
|
14
|
+
* - PENDING_VERIFICATION
|
|
15
|
+
* - FALSE_POSITIVE
|
|
16
|
+
* - CLOSED
|
|
17
|
+
*/
|
|
18
|
+
|
|
1
19
|
/* eslint-disable no-unused-vars */
|
|
2
20
|
export enum FindingStatus {
|
|
21
|
+
/** OPEN + INCLUDED in score */
|
|
3
22
|
OPEN = 'OPEN',
|
|
4
|
-
|
|
23
|
+
/** OPEN + INCLUDED in score */
|
|
5
24
|
PENDING_VERIFICATION = 'PENDING_VERIFICATION',
|
|
25
|
+
/** OPEN + INCLUDED in score */
|
|
26
|
+
ACCEPTED_RISK = 'ACCEPTED_RISK',
|
|
27
|
+
/** CLOSED + IGNORED from score */
|
|
28
|
+
CLOSED = 'CLOSED',
|
|
29
|
+
/** CLOSED + IGNORED from score */
|
|
30
|
+
FALSE_POSITIVE = 'CLOSED_FALSE_POSITIVE',
|
|
6
31
|
}
|
package/src/services/AmpApi.ts
CHANGED
|
@@ -4,7 +4,6 @@ import {
|
|
|
4
4
|
AssetDto,
|
|
5
5
|
ConnectorDto,
|
|
6
6
|
ConnectorUpsertDto,
|
|
7
|
-
FindingDto,
|
|
8
7
|
NotificationDto,
|
|
9
8
|
ProviderDto,
|
|
10
9
|
ReportResultDto,
|
|
@@ -24,6 +23,7 @@ import {DefaultEnumService, EnumService} from './rest/EnumService';
|
|
|
24
23
|
import {AmpSettingsService} from './settings.service';
|
|
25
24
|
import {AgentIdentityService} from './rest/AgentIdentityService';
|
|
26
25
|
import {ConnectorInstallService} from './rest/ConnectorInstallService';
|
|
26
|
+
import {FindingsService} from './findings.service';
|
|
27
27
|
|
|
28
28
|
export type AmpApiOptions = AmpRestClientOptions;
|
|
29
29
|
|
|
@@ -44,7 +44,7 @@ export class AmpApi {
|
|
|
44
44
|
readonly asset: AmpDataService<AssetDto>;
|
|
45
45
|
readonly connectors: AmpEntityService<ConnectorUpsertDto, ConnectorDto>;
|
|
46
46
|
readonly enums: EnumService;
|
|
47
|
-
readonly findings:
|
|
47
|
+
readonly findings: FindingsService;
|
|
48
48
|
readonly identity: AgentIdentityService;
|
|
49
49
|
readonly install: ConnectorInstallService;
|
|
50
50
|
readonly notifications: AmpDataService<NotificationDto>;
|
|
@@ -63,7 +63,7 @@ export class AmpApi {
|
|
|
63
63
|
this.asset = new AmpDataServiceImpl<AssetDto>(rest, KIND.ASSETS);
|
|
64
64
|
this.connectors = new AmpEntityServiceImpl<ConnectorUpsertDto, ConnectorDto>(rest, KIND.CONNECTORS);
|
|
65
65
|
this.enums = new DefaultEnumService(rest);
|
|
66
|
-
this.findings = new
|
|
66
|
+
this.findings = new FindingsService(rest);
|
|
67
67
|
this.identity = new AgentIdentityService(rest);
|
|
68
68
|
this.install = new ConnectorInstallService(rest);
|
|
69
69
|
this.notifications = new AmpDataServiceImpl<NotificationDto>(rest, KIND.NOTIFICATIONS);
|
|
@@ -38,13 +38,13 @@ export class EngageApi {
|
|
|
38
38
|
readonly settings: AmpSettingsService;
|
|
39
39
|
|
|
40
40
|
constructor(rest: RestClient) {
|
|
41
|
-
this.connectors = new AmpEntityServiceImpl<ConnectorUpsertDto, ConnectorDto>(rest, KIND.CONNECTORS, TARGET_API_ENGAGE);
|
|
41
|
+
this.connectors = new AmpEntityServiceImpl<ConnectorUpsertDto, ConnectorDto>(rest, KIND.CONNECTORS, TARGET_API_ENGAGE);
|
|
42
42
|
this.findings = new AmpPatchDataServiceImpl<FindingsStatusPatchDto, FindingDto>(rest, KIND.FINDINGS, TARGET_API_ENGAGE);
|
|
43
43
|
this.identity = new UserIdentityService(rest);
|
|
44
|
-
this.notifications = new AmpDataServiceImpl<NotificationDto>(rest, KIND.NOTIFICATIONS, TARGET_API_ENGAGE);
|
|
44
|
+
this.notifications = new AmpDataServiceImpl<NotificationDto>(rest, KIND.NOTIFICATIONS, TARGET_API_ENGAGE);
|
|
45
45
|
this.providers = new AmpDataServiceImpl<ProviderDto>(rest, KIND.PROVIDERS, TARGET_API_AGENT);
|
|
46
46
|
this.reports = new AmpReportServiceImpl(rest);
|
|
47
|
-
this.settings = new AmpSettingsService(rest); // TODO:
|
|
47
|
+
this.settings = new AmpSettingsService(rest); // TODO: confirm it is not needed. Currently returns NOT_IMPLEMENTED error code
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
static instance(options: EngageApiOptions): EngageApi {
|
|
@@ -29,7 +29,7 @@ export class AmpDataServiceImpl<ReadT extends BaseDto> implements AmpDataService
|
|
|
29
29
|
this.targetApi = targetApi;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
protected async
|
|
32
|
+
protected call = async <T>(req: RestRequest, errorHandler: ErrorHandler<T>): Promise<T> => {
|
|
33
33
|
try {
|
|
34
34
|
const res = await this.rest.call(req);
|
|
35
35
|
return res.data as T;
|
|
@@ -39,9 +39,9 @@ export class AmpDataServiceImpl<ReadT extends BaseDto> implements AmpDataService
|
|
|
39
39
|
}
|
|
40
40
|
return errorHandler(error);
|
|
41
41
|
}
|
|
42
|
-
}
|
|
42
|
+
};
|
|
43
43
|
|
|
44
|
-
protected async
|
|
44
|
+
protected getPage = async (req: RestRequest): Promise<Page<ReadT>> => {
|
|
45
45
|
return this.call(req, (error: unknown) => {
|
|
46
46
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
47
47
|
return {
|
|
@@ -51,22 +51,22 @@ export class AmpDataServiceImpl<ReadT extends BaseDto> implements AmpDataService
|
|
|
51
51
|
hints: {},
|
|
52
52
|
};
|
|
53
53
|
});
|
|
54
|
-
}
|
|
54
|
+
};
|
|
55
55
|
|
|
56
|
-
list(filter: FilterCriteria): Promise<Page<ReadT>> {
|
|
56
|
+
list = (filter: FilterCriteria): Promise<Page<ReadT>> => {
|
|
57
57
|
return this.getPage({
|
|
58
58
|
url: `/${this.targetApi}/v1/${this.kind}`,
|
|
59
59
|
method: 'GET',
|
|
60
60
|
params: filter,
|
|
61
61
|
});
|
|
62
|
-
}
|
|
62
|
+
};
|
|
63
63
|
|
|
64
|
-
getById(id: string): Promise<Page<ReadT>> {
|
|
64
|
+
getById = (id: string): Promise<Page<ReadT>> => {
|
|
65
65
|
return this.getPage({
|
|
66
66
|
url: `/${this.targetApi}/v1/${this.kind}/${id}`,
|
|
67
67
|
method: 'GET',
|
|
68
68
|
});
|
|
69
|
-
}
|
|
69
|
+
};
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
export class AmpPatchDataServiceImpl<WriteT extends BaseUpsertDto, ReadT extends BaseDto> extends AmpDataServiceImpl<ReadT> implements AmpPatchDataService<WriteT, ReadT> {
|
|
@@ -74,7 +74,7 @@ export class AmpPatchDataServiceImpl<WriteT extends BaseUpsertDto, ReadT extends
|
|
|
74
74
|
super(rest, kind, targetApi);
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
patch(model: WriteT | WriteT[], options: DataServiceCallOptions): Promise<Page<ReadT>> {
|
|
77
|
+
patch = (model: WriteT | WriteT[], options: DataServiceCallOptions): Promise<Page<ReadT>> => {
|
|
78
78
|
const url = _.isArray(model) ? `/${this.targetApi}/v1/${this.kind}` : `/${this.targetApi}/v1/${this.kind}/${model.id}`;
|
|
79
79
|
return this.getPage({
|
|
80
80
|
url,
|
|
@@ -82,5 +82,5 @@ export class AmpPatchDataServiceImpl<WriteT extends BaseUpsertDto, ReadT extends
|
|
|
82
82
|
params: options.params as QueryMap,
|
|
83
83
|
data: model,
|
|
84
84
|
});
|
|
85
|
-
}
|
|
85
|
+
};
|
|
86
86
|
}
|
|
@@ -38,16 +38,16 @@ export class AmpEntityServiceImpl<WriteT extends BaseUpsertDto, ReadT extends Ba
|
|
|
38
38
|
super(rest, kind, targetApi);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
create(model: WriteT | WriteT[], options?: EntityCallOptions): Promise<Page<ReadT>> {
|
|
41
|
+
create = (model: WriteT | WriteT[], options?: EntityCallOptions): Promise<Page<ReadT>> => {
|
|
42
42
|
return this.getPage({
|
|
43
43
|
url: `/${this.targetApi}/v1/${this.kind}`,
|
|
44
44
|
method: 'POST',
|
|
45
45
|
params: options?.params as QueryMap,
|
|
46
46
|
data: model,
|
|
47
47
|
});
|
|
48
|
-
}
|
|
48
|
+
};
|
|
49
49
|
|
|
50
|
-
update(model: WriteT | WriteT[], options?: EntityCallOptions): Promise<Page<ReadT>> {
|
|
50
|
+
update = (model: WriteT | WriteT[], options?: EntityCallOptions): Promise<Page<ReadT>> => {
|
|
51
51
|
const url = _.isArray(model) ? `/${this.targetApi}/v1/${this.kind}` : `/${this.targetApi}/v1/${this.kind}/${model.id}`;
|
|
52
52
|
return this.getPage({
|
|
53
53
|
url,
|
|
@@ -55,9 +55,9 @@ export class AmpEntityServiceImpl<WriteT extends BaseUpsertDto, ReadT extends Ba
|
|
|
55
55
|
params: options?.params as QueryMap,
|
|
56
56
|
data: model,
|
|
57
57
|
});
|
|
58
|
-
}
|
|
58
|
+
};
|
|
59
59
|
|
|
60
|
-
async
|
|
60
|
+
delete = async (id: string, options?: EntityCallOptions): Promise<Page<ReadT>> => {
|
|
61
61
|
const res = await this.getById(id);
|
|
62
62
|
if (res.data.length === 1) {
|
|
63
63
|
const req: RestRequest = {
|
|
@@ -76,7 +76,7 @@ export class AmpEntityServiceImpl<WriteT extends BaseUpsertDto, ReadT extends Ba
|
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
return res;
|
|
79
|
-
}
|
|
79
|
+
};
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
const extIdMapErrorHandler: ErrorHandler<ExtKeyMap> = (error: unknown) => {
|
|
@@ -93,7 +93,7 @@ export class AmpGlobalEntityServiceImpl<WriteT extends BaseUpsertDto, ReadT exte
|
|
|
93
93
|
constructor(rest: RestClient, kind: string, targetApi: TargetApi = TARGET_API_AGENT) {
|
|
94
94
|
super(rest, kind, targetApi);
|
|
95
95
|
}
|
|
96
|
-
getLookupIds(tid: string, options?: EntityCallOptions): Promise<ExtKeyMap> {
|
|
96
|
+
getLookupIds = (tid: string, options?: EntityCallOptions): Promise<ExtKeyMap> => {
|
|
97
97
|
const req: RestRequest = {
|
|
98
98
|
url: `/${this.targetApi}/v1/${this.kind}/ext_key_map`,
|
|
99
99
|
method: 'GET',
|
|
@@ -103,7 +103,7 @@ export class AmpGlobalEntityServiceImpl<WriteT extends BaseUpsertDto, ReadT exte
|
|
|
103
103
|
},
|
|
104
104
|
};
|
|
105
105
|
return this.call(req, extIdMapErrorHandler);
|
|
106
|
-
}
|
|
106
|
+
};
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
export class AmpSaaSEntityServiceImpl<WriteT extends BaseUpsertDto, ReadT extends BaseDto>
|
|
@@ -113,7 +113,7 @@ export class AmpSaaSEntityServiceImpl<WriteT extends BaseUpsertDto, ReadT extend
|
|
|
113
113
|
constructor(rest: RestClient, kind: string, targetApi: TargetApi = TARGET_API_AGENT) {
|
|
114
114
|
super(rest, kind, targetApi);
|
|
115
115
|
}
|
|
116
|
-
getLookupIds(cid: string, options?: EntityCallOptions): Promise<ExtKeyMap> {
|
|
116
|
+
getLookupIds = (cid: string, options?: EntityCallOptions): Promise<ExtKeyMap> => {
|
|
117
117
|
const req: RestRequest = {
|
|
118
118
|
url: `/${this.targetApi}/v1/${this.kind}/ext_key_map`,
|
|
119
119
|
method: 'GET',
|
|
@@ -123,5 +123,5 @@ export class AmpSaaSEntityServiceImpl<WriteT extends BaseUpsertDto, ReadT extend
|
|
|
123
123
|
},
|
|
124
124
|
};
|
|
125
125
|
return this.call(req, extIdMapErrorHandler);
|
|
126
|
-
}
|
|
126
|
+
};
|
|
127
127
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import {FindingDto, FindingStatus, Page} from '../dto';
|
|
3
|
+
import {AmpDataServiceImpl} from './data.service';
|
|
4
|
+
import {RestClient} from './rest';
|
|
5
|
+
import {KIND} from './constants';
|
|
6
|
+
|
|
7
|
+
export interface FindingPatchDto {
|
|
8
|
+
status: FindingStatus;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export class FindingsService extends AmpDataServiceImpl<FindingDto> {
|
|
12
|
+
constructor(rest: RestClient) {
|
|
13
|
+
super(rest, KIND.FINDINGS);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
patch(id: string, values: FindingPatchDto | FindingPatchDto[]): Promise<Page<FindingDto>> {
|
|
17
|
+
const url = _.isArray(values) ? `/${this.targetApi}/v1/${this.kind}` : `/${this.targetApi}/v1/${this.kind}/${id}`;
|
|
18
|
+
return this.getPage({
|
|
19
|
+
url,
|
|
20
|
+
method: 'PATCH',
|
|
21
|
+
data: values,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
package/src/services/index.ts
CHANGED
|
@@ -15,7 +15,7 @@ export class AmpReportServiceImpl implements AmpReportService {
|
|
|
15
15
|
this.rest = rest;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
async
|
|
18
|
+
getMetrics = async (reportId: string, filter?: FilterCriteria | undefined): Promise<Page<ReportResultDto>> => {
|
|
19
19
|
filter = filter ?? {};
|
|
20
20
|
filter.limit = filter.limit ?? 1; // pull latest result by default
|
|
21
21
|
try {
|
|
@@ -37,7 +37,7 @@ export class AmpReportServiceImpl implements AmpReportService {
|
|
|
37
37
|
hints: {},
|
|
38
38
|
};
|
|
39
39
|
}
|
|
40
|
-
}
|
|
40
|
+
};
|
|
41
41
|
|
|
42
42
|
/**
|
|
43
43
|
*
|
|
@@ -46,11 +46,11 @@ export class AmpReportServiceImpl implements AmpReportService {
|
|
|
46
46
|
* @param filter
|
|
47
47
|
* @returns
|
|
48
48
|
*/
|
|
49
|
-
async
|
|
49
|
+
getMetricsTrend = async (reportId: string, filter?: FilterCriteria): Promise<Page<ReportResultDto>> => {
|
|
50
50
|
// I am breaking this out into a separate method so that we can extend typing later
|
|
51
51
|
// and add buckets/aggregations to the args
|
|
52
52
|
filter = filter ?? {};
|
|
53
53
|
filter.limit = filter.limit ?? DEFAULT_TREND_WINDOW_MONTHS;
|
|
54
54
|
return this.getMetrics(reportId, filter);
|
|
55
|
-
}
|
|
55
|
+
};
|
|
56
56
|
}
|
|
@@ -10,7 +10,7 @@ export class AgentIdentityService {
|
|
|
10
10
|
constructor(rest: RestClient) {
|
|
11
11
|
this.rest = rest;
|
|
12
12
|
}
|
|
13
|
-
async
|
|
13
|
+
exchangeToken = async (targetTenantId: string): Promise<TokenResponse> => {
|
|
14
14
|
const res = await this.rest.call({
|
|
15
15
|
url: '/api/v1/auth/token/exchange',
|
|
16
16
|
method: 'GET',
|
|
@@ -19,13 +19,13 @@ export class AgentIdentityService {
|
|
|
19
19
|
},
|
|
20
20
|
});
|
|
21
21
|
return res.data as TokenResponse;
|
|
22
|
-
}
|
|
22
|
+
};
|
|
23
23
|
|
|
24
|
-
async
|
|
24
|
+
me = async (): Promise<AgentDto> => {
|
|
25
25
|
const res = await this.rest.call({
|
|
26
|
-
url: '/
|
|
26
|
+
url: '/me',
|
|
27
27
|
method: 'GET',
|
|
28
28
|
});
|
|
29
29
|
return res.data as AgentDto;
|
|
30
|
-
}
|
|
30
|
+
};
|
|
31
31
|
}
|
|
@@ -7,7 +7,7 @@ export class ConnectorInstallService {
|
|
|
7
7
|
this.rest = rest;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
async
|
|
10
|
+
getInstallToken = async (cid: string): Promise<string> => {
|
|
11
11
|
const res = await this.rest.call({
|
|
12
12
|
url: '/install/oauth/token',
|
|
13
13
|
method: 'POST',
|
|
@@ -15,9 +15,9 @@ export class ConnectorInstallService {
|
|
|
15
15
|
});
|
|
16
16
|
const token = (res.data as {token: string}).token;
|
|
17
17
|
return token;
|
|
18
|
-
}
|
|
18
|
+
};
|
|
19
19
|
|
|
20
|
-
buildInstallOAuthUrl(apiBaseUrl: string, token: string, redirectUrl: string): string {
|
|
20
|
+
buildInstallOAuthUrl = (apiBaseUrl: string, token: string, redirectUrl: string): string => {
|
|
21
21
|
return `${apiBaseUrl}/install/oauth?token=${token}&redirect=${encodeURIComponent(redirectUrl)}`;
|
|
22
|
-
}
|
|
22
|
+
};
|
|
23
23
|
}
|
|
@@ -23,14 +23,14 @@ class DefaultEnumCollection implements EnumCollection {
|
|
|
23
23
|
this.kind = kind;
|
|
24
24
|
this.targetApi = targetApi;
|
|
25
25
|
}
|
|
26
|
-
async
|
|
26
|
+
list = async (filter?: FilterCriteria): Promise<Page<EnumDto>> => {
|
|
27
27
|
const res = await this.rest.call({
|
|
28
28
|
url: `/${this.targetApi}/v1/enum/${this.kind}`,
|
|
29
29
|
method: 'GET',
|
|
30
30
|
params: filter,
|
|
31
31
|
});
|
|
32
32
|
return res.data as Page<EnumDto>;
|
|
33
|
-
}
|
|
33
|
+
};
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
export class DefaultEnumService implements EnumService {
|
|
@@ -68,7 +68,7 @@ export class DefaultRestClient {
|
|
|
68
68
|
this.retryStrategy = options.retryStrategy ?? noopRestRetryStrategy;
|
|
69
69
|
this.rateLimitStrategy = options.rateLimitStrategy ?? noopRestClientRateLimitStrategy;
|
|
70
70
|
}
|
|
71
|
-
async
|
|
71
|
+
call = async (request: RestRequest): Promise<RestResponse> => {
|
|
72
72
|
const req = _.merge(request);
|
|
73
73
|
try {
|
|
74
74
|
await this.rateLimitStrategy.reserve(req);
|
|
@@ -92,7 +92,7 @@ export class DefaultRestClient {
|
|
|
92
92
|
}
|
|
93
93
|
throw err;
|
|
94
94
|
}
|
|
95
|
-
}
|
|
95
|
+
};
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
export const getAmpRestClient = (options: AmpRestClientOptions): RestClient => {
|
|
@@ -10,11 +10,11 @@ export class UserIdentityService {
|
|
|
10
10
|
constructor(rest: RestClient) {
|
|
11
11
|
this.rest = rest;
|
|
12
12
|
}
|
|
13
|
-
async
|
|
13
|
+
me = async (): Promise<AmpJwtToken> => {
|
|
14
14
|
const res = await this.rest.call({
|
|
15
|
-
url: '/
|
|
15
|
+
url: '/me',
|
|
16
16
|
method: 'GET',
|
|
17
17
|
});
|
|
18
18
|
return res.data as AmpJwtToken;
|
|
19
|
-
}
|
|
19
|
+
};
|
|
20
20
|
}
|
|
@@ -6,7 +6,7 @@ export interface RestClientRateLimitStrategy {
|
|
|
6
6
|
|
|
7
7
|
export const noopRestClientRateLimitStrategy: RestClientRateLimitStrategy = {
|
|
8
8
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
9
|
-
reserve(_req: RestRequest): Promise<void> {
|
|
9
|
+
reserve: (_req: RestRequest): Promise<void> => {
|
|
10
10
|
return Promise.resolve();
|
|
11
11
|
},
|
|
12
12
|
};
|
|
@@ -22,10 +22,10 @@ export class StaticRestClientRateLimitStrategy implements RestClientRateLimitStr
|
|
|
22
22
|
this.lastRequest = 0;
|
|
23
23
|
}
|
|
24
24
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
25
|
-
async
|
|
25
|
+
reserve = async (_req: RestRequest): Promise<void> => {
|
|
26
26
|
while (Date.now() - this.lastRequest < this.delay) {
|
|
27
27
|
await sleep(this.delay);
|
|
28
28
|
}
|
|
29
29
|
this.lastRequest = Date.now();
|
|
30
|
-
}
|
|
30
|
+
};
|
|
31
31
|
}
|
|
@@ -8,7 +8,7 @@ export interface RestClientRetryStrategy {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export const noopRestRetryStrategy: RestClientRetryStrategy = {
|
|
11
|
-
onError(req: RestRequest, err: AxiosError): Promise<RestResponse> {
|
|
11
|
+
onError: (req: RestRequest, err: AxiosError): Promise<RestResponse> => {
|
|
12
12
|
const axiosError = err as AxiosError;
|
|
13
13
|
const res: RestResponse = {
|
|
14
14
|
status: axiosError.response?.status ?? 500,
|