@censys/platform-sdk 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/README.md +6 -0
- package/docs/sdks/threathunting/README.md +250 -1
- package/funcs/accountManagementGetMemberCreditUsage.js.map +1 -1
- package/funcs/accountManagementGetOrganizationCreditUsage.js.map +1 -1
- package/funcs/accountManagementGetOrganizationCredits.js.map +1 -1
- package/funcs/accountManagementGetOrganizationDetails.js.map +1 -1
- package/funcs/accountManagementInviteUserToOrganization.js.map +1 -1
- package/funcs/accountManagementListOrganizationMembers.js.map +1 -1
- package/funcs/accountManagementRemoveOrganizationMember.js.map +1 -1
- package/funcs/accountManagementUpdateOrganizationMember.js.map +1 -1
- package/funcs/collectionsAggregate.js.map +1 -1
- package/funcs/collectionsDelete.js.map +1 -1
- package/funcs/collectionsGet.js.map +1 -1
- package/funcs/collectionsListEvents.js.map +1 -1
- package/funcs/collectionsSearch.js.map +1 -1
- package/funcs/collectionsUpdate.js.map +1 -1
- package/funcs/globalDataGetCertificate.js.map +1 -1
- package/funcs/globalDataGetCertificateRaw.js.map +1 -1
- package/funcs/globalDataGetHost.js.map +1 -1
- package/funcs/globalDataGetHostTimeline.js.map +1 -1
- package/funcs/globalDataGetTrackedScan.js.map +1 -1
- package/funcs/globalDataGetWebProperty.js.map +1 -1
- package/funcs/globalDataListServicesOnHost.js.map +1 -1
- package/funcs/threatHuntingCreateCenseyeJob.d.ts +18 -0
- package/funcs/threatHuntingCreateCenseyeJob.d.ts.map +1 -0
- package/funcs/threatHuntingCreateCenseyeJob.js +131 -0
- package/funcs/threatHuntingCreateCenseyeJob.js.map +1 -0
- package/funcs/threatHuntingGetCenseyeJob.d.ts +18 -0
- package/funcs/threatHuntingGetCenseyeJob.d.ts.map +1 -0
- package/funcs/threatHuntingGetCenseyeJob.js +134 -0
- package/funcs/threatHuntingGetCenseyeJob.js.map +1 -0
- package/funcs/threatHuntingGetCenseyeJobResults.d.ts +18 -0
- package/funcs/threatHuntingGetCenseyeJobResults.d.ts.map +1 -0
- package/funcs/threatHuntingGetCenseyeJobResults.js +136 -0
- package/funcs/threatHuntingGetCenseyeJobResults.js.map +1 -0
- package/funcs/threatHuntingGetHostObservationsWithCertificate.js.map +1 -1
- package/funcs/threatHuntingGetTrackedScanThreatHunting.js.map +1 -1
- package/funcs/threatHuntingValueCounts.d.ts +1 -1
- package/funcs/threatHuntingValueCounts.js +1 -1
- package/jsr.json +1 -1
- package/lib/config.d.ts +4 -4
- package/lib/config.js +4 -4
- package/lib/config.js.map +1 -1
- package/lib/encodings.d.ts.map +1 -1
- package/lib/encodings.js +20 -5
- package/lib/encodings.js.map +1 -1
- package/lib/files.d.ts +13 -0
- package/lib/files.d.ts.map +1 -1
- package/lib/files.js +19 -0
- package/lib/files.js.map +1 -1
- package/lib/matchers.d.ts.map +1 -1
- package/lib/matchers.js +0 -1
- package/lib/matchers.js.map +1 -1
- package/lib/sdks.d.ts.map +1 -1
- package/lib/sdks.js +8 -4
- package/lib/sdks.js.map +1 -1
- package/lib/security.d.ts +1 -1
- package/lib/security.d.ts.map +1 -1
- package/lib/security.js +20 -10
- package/lib/security.js.map +1 -1
- package/lib/url.d.ts.map +1 -1
- package/lib/url.js +4 -2
- package/lib/url.js.map +1 -1
- package/models/components/censeyejob.d.ts +59 -0
- package/models/components/censeyejob.d.ts.map +1 -0
- package/models/components/censeyejob.js +85 -0
- package/models/components/censeyejob.js.map +1 -0
- package/models/components/censeyeresult.d.ts +18 -0
- package/models/components/censeyeresult.d.ts.map +1 -0
- package/models/components/censeyeresult.js +57 -0
- package/models/components/censeyeresult.js.map +1 -0
- package/models/components/censeyeresultsresponse.d.ts +18 -0
- package/models/components/censeyeresultsresponse.d.ts.map +1 -0
- package/models/components/censeyeresultsresponse.js +57 -0
- package/models/components/censeyeresultsresponse.js.map +1 -0
- package/models/components/censeyetarget.d.ts +30 -0
- package/models/components/censeyetarget.d.ts.map +1 -0
- package/models/components/censeyetarget.js +75 -0
- package/models/components/censeyetarget.js.map +1 -0
- package/models/components/countcondition.d.ts +1 -1
- package/models/components/createcenseyejobinputbody.d.ts +13 -0
- package/models/components/createcenseyejobinputbody.d.ts.map +1 -0
- package/models/components/createcenseyejobinputbody.js +50 -0
- package/models/components/createcenseyejobinputbody.js.map +1 -0
- package/models/components/fieldvaluepair.d.ts +5 -0
- package/models/components/fieldvaluepair.d.ts.map +1 -1
- package/models/components/fieldvaluepair.js +11 -1
- package/models/components/fieldvaluepair.js.map +1 -1
- package/models/components/host.d.ts +12 -0
- package/models/components/host.d.ts.map +1 -1
- package/models/components/host.js +7 -0
- package/models/components/host.js.map +1 -1
- package/models/components/index.d.ts +21 -0
- package/models/components/index.d.ts.map +1 -1
- package/models/components/index.js +21 -0
- package/models/components/index.js.map +1 -1
- package/models/components/networkclassification.d.ts +27 -0
- package/models/components/networkclassification.d.ts.map +1 -0
- package/models/components/networkclassification.js +60 -0
- package/models/components/networkclassification.js.map +1 -0
- package/models/components/networkmobileinfo.d.ts +21 -0
- package/models/components/networkmobileinfo.d.ts.map +1 -0
- package/models/components/networkmobileinfo.js +57 -0
- package/models/components/networkmobileinfo.js.map +1 -0
- package/models/components/privacy.d.ts +39 -0
- package/models/components/privacy.d.ts.map +1 -0
- package/models/components/privacy.js +64 -0
- package/models/components/privacy.js.map +1 -0
- package/models/components/privacytorinfo.d.ts +11 -0
- package/models/components/privacytorinfo.d.ts.map +1 -0
- package/models/components/privacytorinfo.js +51 -0
- package/models/components/privacytorinfo.js.map +1 -0
- package/models/components/privacytorinforelay.d.ts +140 -0
- package/models/components/privacytorinforelay.d.ts.map +1 -0
- package/models/components/privacytorinforelay.js +114 -0
- package/models/components/privacytorinforelay.js.map +1 -0
- package/models/components/privacytorinforelayexitpolicysummary.d.ts +17 -0
- package/models/components/privacytorinforelayexitpolicysummary.d.ts.map +1 -0
- package/models/components/privacytorinforelayexitpolicysummary.js +51 -0
- package/models/components/privacytorinforelayexitpolicysummary.js.map +1 -0
- package/models/components/reputation.d.ts +26 -0
- package/models/components/reputation.d.ts.map +1 -0
- package/models/components/reputation.js +71 -0
- package/models/components/reputation.js.map +1 -0
- package/models/components/reputationevidence.d.ts +17 -0
- package/models/components/reputationevidence.d.ts.map +1 -0
- package/models/components/reputationevidence.js +65 -0
- package/models/components/reputationevidence.js.map +1 -0
- package/models/components/reputationevidenceexternalsignal.d.ts +23 -0
- package/models/components/reputationevidenceexternalsignal.d.ts.map +1 -0
- package/models/components/reputationevidenceexternalsignal.js +62 -0
- package/models/components/reputationevidenceexternalsignal.js.map +1 -0
- package/models/components/reputationevidencefieldvalue.d.ts +11 -0
- package/models/components/reputationevidencefieldvalue.d.ts.map +1 -0
- package/models/components/reputationevidencefieldvalue.js +51 -0
- package/models/components/reputationevidencefieldvalue.js.map +1 -0
- package/models/components/reputationevidencethreat.d.ts +12 -0
- package/models/components/reputationevidencethreat.d.ts.map +1 -0
- package/models/components/reputationevidencethreat.js +59 -0
- package/models/components/reputationevidencethreat.js.map +1 -0
- package/models/components/responseenvelopecenseyejob.d.ts +11 -0
- package/models/components/responseenvelopecenseyejob.d.ts.map +1 -0
- package/models/components/responseenvelopecenseyejob.js +51 -0
- package/models/components/responseenvelopecenseyejob.js.map +1 -0
- package/models/components/responseenvelopecenseyeresultsresponse.d.ts +11 -0
- package/models/components/responseenvelopecenseyeresultsresponse.d.ts.map +1 -0
- package/models/components/responseenvelopecenseyeresultsresponse.js +51 -0
- package/models/components/responseenvelopecenseyeresultsresponse.js.map +1 -0
- package/models/components/sapient.d.ts +15 -0
- package/models/components/sapient.d.ts.map +1 -0
- package/models/components/sapient.js +60 -0
- package/models/components/sapient.js.map +1 -0
- package/models/components/sapienterror.d.ts +11 -0
- package/models/components/sapienterror.d.ts.map +1 -0
- package/models/components/sapienterror.js +56 -0
- package/models/components/sapienterror.js.map +1 -0
- package/models/components/sapientregistrationack.d.ts +11 -0
- package/models/components/sapientregistrationack.d.ts.map +1 -0
- package/models/components/sapientregistrationack.js +56 -0
- package/models/components/sapientregistrationack.js.map +1 -0
- package/models/components/searchvaluecountsinputbody.d.ts +1 -1
- package/models/components/service.d.ts +2 -0
- package/models/components/service.d.ts.map +1 -1
- package/models/components/service.js +2 -0
- package/models/components/service.js.map +1 -1
- package/models/components/servicescan.d.ts +2 -0
- package/models/components/servicescan.d.ts.map +1 -1
- package/models/components/servicescan.js +2 -0
- package/models/components/servicescan.js.map +1 -1
- package/models/components/servicesonhostresponse.d.ts +6 -0
- package/models/components/servicesonhostresponse.d.ts.map +1 -1
- package/models/components/servicesonhostresponse.js +3 -4
- package/models/components/servicesonhostresponse.js.map +1 -1
- package/models/components/socks.d.ts +1 -0
- package/models/components/socks.d.ts.map +1 -1
- package/models/components/socks.js +2 -0
- package/models/components/socks.js.map +1 -1
- package/models/operations/index.d.ts +3 -0
- package/models/operations/index.d.ts.map +1 -1
- package/models/operations/index.js +3 -0
- package/models/operations/index.js.map +1 -1
- package/models/operations/v3threathuntingcenseyejobresults.d.ts +45 -0
- package/models/operations/v3threathuntingcenseyejobresults.d.ts.map +1 -0
- package/models/operations/v3threathuntingcenseyejobresults.js +76 -0
- package/models/operations/v3threathuntingcenseyejobresults.js.map +1 -0
- package/models/operations/v3threathuntingcenseyejobscreate.d.ts +32 -0
- package/models/operations/v3threathuntingcenseyejobscreate.d.ts.map +1 -0
- package/models/operations/v3threathuntingcenseyejobscreate.js +72 -0
- package/models/operations/v3threathuntingcenseyejobscreate.js.map +1 -0
- package/models/operations/v3threathuntingcenseyejobsget.d.ts +35 -0
- package/models/operations/v3threathuntingcenseyejobsget.d.ts.map +1 -0
- package/models/operations/v3threathuntingcenseyejobsget.js +72 -0
- package/models/operations/v3threathuntingcenseyejobsget.js.map +1 -0
- package/package.json +1 -1
- package/sdk/threathunting.d.ts +22 -1
- package/sdk/threathunting.d.ts.map +1 -1
- package/sdk/threathunting.js +31 -1
- package/sdk/threathunting.js.map +1 -1
- package/src/funcs/accountManagementGetMemberCreditUsage.ts +0 -1
- package/src/funcs/accountManagementGetOrganizationCreditUsage.ts +0 -1
- package/src/funcs/accountManagementGetOrganizationCredits.ts +0 -1
- package/src/funcs/accountManagementGetOrganizationDetails.ts +0 -1
- package/src/funcs/accountManagementInviteUserToOrganization.ts +0 -1
- package/src/funcs/accountManagementListOrganizationMembers.ts +0 -1
- package/src/funcs/accountManagementRemoveOrganizationMember.ts +0 -1
- package/src/funcs/accountManagementUpdateOrganizationMember.ts +0 -1
- package/src/funcs/collectionsAggregate.ts +0 -1
- package/src/funcs/collectionsDelete.ts +0 -1
- package/src/funcs/collectionsGet.ts +0 -1
- package/src/funcs/collectionsListEvents.ts +0 -1
- package/src/funcs/collectionsSearch.ts +0 -1
- package/src/funcs/collectionsUpdate.ts +0 -1
- package/src/funcs/globalDataGetCertificate.ts +0 -1
- package/src/funcs/globalDataGetCertificateRaw.ts +0 -1
- package/src/funcs/globalDataGetHost.ts +0 -1
- package/src/funcs/globalDataGetHostTimeline.ts +0 -1
- package/src/funcs/globalDataGetTrackedScan.ts +0 -1
- package/src/funcs/globalDataGetWebProperty.ts +0 -1
- package/src/funcs/globalDataListServicesOnHost.ts +0 -1
- package/src/funcs/threatHuntingCreateCenseyeJob.ts +195 -0
- package/src/funcs/threatHuntingGetCenseyeJob.ts +200 -0
- package/src/funcs/threatHuntingGetCenseyeJobResults.ts +202 -0
- package/src/funcs/threatHuntingGetHostObservationsWithCertificate.ts +0 -1
- package/src/funcs/threatHuntingGetTrackedScanThreatHunting.ts +0 -1
- package/src/funcs/threatHuntingValueCounts.ts +1 -1
- package/src/lib/config.ts +4 -4
- package/src/lib/encodings.ts +23 -4
- package/src/lib/files.ts +22 -0
- package/src/lib/matchers.ts +3 -2
- package/src/lib/sdks.ts +7 -5
- package/src/lib/security.ts +15 -4
- package/src/lib/url.ts +16 -14
- package/src/models/components/censeyejob.ts +106 -0
- package/src/models/components/censeyeresult.ts +48 -0
- package/src/models/components/censeyeresultsresponse.ts +45 -0
- package/src/models/components/censeyetarget.ts +77 -0
- package/src/models/components/countcondition.ts +1 -1
- package/src/models/components/createcenseyejobinputbody.ts +36 -0
- package/src/models/components/fieldvaluepair.ts +21 -0
- package/src/models/components/host.ts +19 -0
- package/src/models/components/index.ts +21 -0
- package/src/models/components/networkclassification.ts +60 -0
- package/src/models/components/networkmobileinfo.ts +49 -0
- package/src/models/components/privacy.ts +73 -0
- package/src/models/components/privacytorinfo.ts +35 -0
- package/src/models/components/privacytorinforelay.ts +227 -0
- package/src/models/components/privacytorinforelayexitpolicysummary.ts +40 -0
- package/src/models/components/reputation.ts +66 -0
- package/src/models/components/reputationevidence.ts +63 -0
- package/src/models/components/reputationevidenceexternalsignal.ts +50 -0
- package/src/models/components/reputationevidencefieldvalue.ts +33 -0
- package/src/models/components/reputationevidencethreat.ts +42 -0
- package/src/models/components/responseenvelopecenseyejob.ts +32 -0
- package/src/models/components/responseenvelopecenseyeresultsresponse.ts +36 -0
- package/src/models/components/sapient.ts +44 -0
- package/src/models/components/sapienterror.ts +38 -0
- package/src/models/components/sapientregistrationack.ts +38 -0
- package/src/models/components/searchvaluecountsinputbody.ts +1 -1
- package/src/models/components/service.ts +3 -0
- package/src/models/components/servicescan.ts +3 -0
- package/src/models/components/servicesonhostresponse.ts +9 -4
- package/src/models/components/socks.ts +3 -0
- package/src/models/operations/index.ts +3 -0
- package/src/models/operations/v3threathuntingcenseyejobresults.ts +107 -0
- package/src/models/operations/v3threathuntingcenseyejobscreate.ts +91 -0
- package/src/models/operations/v3threathuntingcenseyejobsget.ts +87 -0
- package/src/sdk/threathunting.ts +55 -1
- package/tests/sdk.test.ts +412 -259
package/tests/sdk.test.ts
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach } from "vitest";
|
|
2
2
|
import { SDK } from "@censys/platform-sdk";
|
|
3
|
+
import { RFCDate } from "@censys/platform-sdk/types";
|
|
3
4
|
import {
|
|
4
|
-
V3CollectionsCrudCreateRequest,
|
|
5
|
-
V3CollectionsCrudDeleteRequest,
|
|
6
|
-
V3CollectionsCrudGetRequest,
|
|
7
|
-
V3CollectionsCrudUpdateRequest,
|
|
8
|
-
V3CollectionsListEventsRequest,
|
|
9
|
-
V3CollectionsSearchAggregateRequest,
|
|
10
|
-
V3CollectionsSearchQueryRequest,
|
|
11
5
|
V3GlobaldataAssetCertificateListPostRequest,
|
|
12
6
|
V3GlobaldataAssetCertificateListRawPostRequest,
|
|
13
7
|
V3GlobaldataAssetCertificateRequest,
|
|
@@ -19,291 +13,412 @@ import {
|
|
|
19
13
|
V3GlobaldataAssetWebpropertyRequest,
|
|
20
14
|
V3GlobaldataSearchAggregateRequest,
|
|
21
15
|
V3GlobaldataSearchQueryRequest,
|
|
16
|
+
V3GlobaldataSearchConvertRequest,
|
|
17
|
+
V3GlobaldataScansRescanRequest,
|
|
18
|
+
V3GlobaldataScansGetRequest,
|
|
19
|
+
V3CollectionsCrudCreateRequest,
|
|
20
|
+
V3CollectionsCrudDeleteRequest,
|
|
21
|
+
V3CollectionsCrudGetRequest,
|
|
22
|
+
V3CollectionsCrudUpdateRequest,
|
|
23
|
+
V3CollectionsListEventsRequest,
|
|
24
|
+
V3CollectionsSearchAggregateRequest,
|
|
25
|
+
V3CollectionsSearchQueryRequest,
|
|
26
|
+
V3AccountmanagementOrgDetailsRequest,
|
|
27
|
+
V3AccountmanagementOrgCreditsRequest,
|
|
28
|
+
V3AccountmanagementOrgCreditsUsageRequest,
|
|
29
|
+
V3AccountmanagementListOrgMembersRequest,
|
|
30
|
+
V3AccountmanagementMemberCreditsUsageRequest,
|
|
31
|
+
V3AccountmanagementUserCreditsUsageRequest,
|
|
22
32
|
V3ThreathuntingValueCountsRequest,
|
|
33
|
+
V3ThreathuntingGetHostObservationsWithCertificateRequest,
|
|
34
|
+
V3ThreathuntingThreatsListRequest,
|
|
35
|
+
V3ThreathuntingScansDiscoveryRequest,
|
|
36
|
+
V3ThreathuntingScansGetRequest,
|
|
23
37
|
} from "@censys/platform-sdk/models/operations";
|
|
24
38
|
|
|
39
|
+
const CERT_IDS = [
|
|
40
|
+
"00000002741c89f06524afbbb4720876bc173aca3a6ce344e08584859b9ac34e",
|
|
41
|
+
"000000033b547e13ee216c65b0ff50237f0decef12acb76fce0a96afa9c70d50",
|
|
42
|
+
];
|
|
43
|
+
const HOST_IDS = ["1.1.1.1", "8.8.8.8"];
|
|
44
|
+
const WEB_PROPERTY_IDS = ["104.236.29.250:443", "78.133.74.135:49152"];
|
|
45
|
+
const COLLECTION_QUERY =
|
|
46
|
+
"host.services.protocol='SSH' and host.location.country = 'Netherlands' and host.services.port = 9100 and host.autonomous_system.name = 'WORLDSTREAM'";
|
|
47
|
+
|
|
48
|
+
function thirtyDaysAgo(): RFCDate {
|
|
49
|
+
const d = new Date();
|
|
50
|
+
d.setDate(d.getDate() - 30);
|
|
51
|
+
return new RFCDate(d);
|
|
52
|
+
}
|
|
53
|
+
|
|
25
54
|
describe("Censys SDK", () => {
|
|
26
55
|
let sdk: SDK;
|
|
56
|
+
const orgId = process.env["ORG_ID"]!;
|
|
27
57
|
|
|
28
58
|
beforeEach(() => {
|
|
29
59
|
sdk = new SDK({
|
|
30
|
-
organizationId:
|
|
60
|
+
organizationId: orgId,
|
|
31
61
|
personalAccessToken: process.env["TOKEN"],
|
|
32
62
|
});
|
|
33
63
|
});
|
|
34
64
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
// Global Data
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
describe("Global Data", () => {
|
|
69
|
+
describe("Certificates", () => {
|
|
70
|
+
it("should get certificate by ID", async () => {
|
|
71
|
+
const request = {
|
|
72
|
+
certificateId: CERT_IDS[0],
|
|
73
|
+
} satisfies V3GlobaldataAssetCertificateRequest;
|
|
74
|
+
|
|
75
|
+
const response = await sdk.globalData.getCertificate(request);
|
|
76
|
+
expect(response.result.result?.resource.fingerprintSha256).toBe(
|
|
77
|
+
CERT_IDS[0]
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it("should get certificate in raw format by ID", async () => {
|
|
82
|
+
const request = {
|
|
83
|
+
certificateId: CERT_IDS[0],
|
|
84
|
+
} satisfies V3GlobaldataAssetCertificateRawRequest;
|
|
85
|
+
|
|
86
|
+
const response = await sdk.globalData.getCertificateRaw(request);
|
|
87
|
+
expect(response.result).toBeDefined();
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it("should get multiple certificates by IDs", async () => {
|
|
91
|
+
const request = {
|
|
92
|
+
assetCertificateListInputBody: { certificateIds: CERT_IDS },
|
|
93
|
+
} satisfies V3GlobaldataAssetCertificateListPostRequest;
|
|
94
|
+
|
|
95
|
+
const response = await sdk.globalData.getCertificates(request);
|
|
96
|
+
expect(response.result.result?.length).toBe(CERT_IDS.length);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it("should get multiple certificates in raw format by IDs", async () => {
|
|
100
|
+
const request = {
|
|
101
|
+
assetCertificateListInputBody: { certificateIds: CERT_IDS },
|
|
102
|
+
} satisfies V3GlobaldataAssetCertificateListRawPostRequest;
|
|
103
|
+
|
|
104
|
+
const response = await sdk.globalData.getCertificatesRaw(request);
|
|
105
|
+
expect(response.result).toBeDefined();
|
|
106
|
+
});
|
|
48
107
|
});
|
|
49
108
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it("should get multiple certificates in raw format by IDs", async () => {
|
|
84
|
-
const certIDs = [
|
|
85
|
-
"00000002741c89f06524afbbb4720876bc173aca3a6ce344e08584859b9ac34e",
|
|
86
|
-
"000000033b547e13ee216c65b0ff50237f0decef12acb76fce0a96afa9c70d50",
|
|
87
|
-
];
|
|
88
|
-
|
|
89
|
-
const request = {
|
|
90
|
-
assetCertificateListInputBody: {
|
|
91
|
-
certificateIds: certIDs,
|
|
92
|
-
},
|
|
93
|
-
} satisfies V3GlobaldataAssetCertificateListRawPostRequest;
|
|
94
|
-
|
|
95
|
-
const response = await sdk.globalData.getCertificatesRaw(request);
|
|
96
|
-
|
|
97
|
-
expect(response).toBeDefined();
|
|
98
|
-
expect(response.result).toBeDefined();
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
describe("Global Data Host List", () => {
|
|
102
|
-
it("should get multiple hosts by IPs", async () => {
|
|
103
|
-
const hostIDs = ["1.1.1.1", "8.8.8.8"];
|
|
104
|
-
|
|
105
|
-
const request = {
|
|
106
|
-
assetHostListInputBody: {
|
|
107
|
-
hostIds: hostIDs,
|
|
109
|
+
describe("Hosts", () => {
|
|
110
|
+
it("should get multiple hosts by IPs", async () => {
|
|
111
|
+
const request = {
|
|
112
|
+
assetHostListInputBody: { hostIds: HOST_IDS },
|
|
113
|
+
} satisfies V3GlobaldataAssetHostListPostRequest;
|
|
114
|
+
|
|
115
|
+
const response = await sdk.globalData.getHosts(request);
|
|
116
|
+
expect(response).toBeDefined();
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it("should get host by IP", async () => {
|
|
120
|
+
const request = {
|
|
121
|
+
hostId: "1.1.1.1",
|
|
122
|
+
atTime: new Date("2025-03-20T00:00:00Z"),
|
|
123
|
+
} satisfies V3GlobaldataAssetHostRequest;
|
|
124
|
+
|
|
125
|
+
const response = await sdk.globalData.getHost(request);
|
|
126
|
+
expect(response.result.result).toBeDefined();
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
it(
|
|
130
|
+
"should get host timeline",
|
|
131
|
+
async () => {
|
|
132
|
+
const request: V3GlobaldataAssetHostTimelineRequest = {
|
|
133
|
+
hostId: "125.13.31.107",
|
|
134
|
+
startTime: new Date("2025-03-20T00:00:00Z"),
|
|
135
|
+
endTime: new Date("2025-03-22T00:00:00Z"),
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
const response = await sdk.globalData.getHostTimeline(request);
|
|
139
|
+
expect(response.result.result).toBeDefined();
|
|
108
140
|
},
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const response = await sdk.globalData.getHosts(request);
|
|
112
|
-
|
|
113
|
-
expect(response).toBeDefined();
|
|
141
|
+
30_000
|
|
142
|
+
);
|
|
114
143
|
});
|
|
115
144
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
145
|
+
describe("Web Properties", () => {
|
|
146
|
+
it("should get web property by ID", async () => {
|
|
147
|
+
const request = {
|
|
148
|
+
webpropertyId: WEB_PROPERTY_IDS[0],
|
|
149
|
+
} satisfies V3GlobaldataAssetWebpropertyRequest;
|
|
150
|
+
|
|
151
|
+
const response = await sdk.globalData.getWebProperty(request);
|
|
152
|
+
expect(response.result.result).toBeDefined();
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
it("should get multiple web properties by IDs", async () => {
|
|
156
|
+
const request = {
|
|
157
|
+
assetWebpropertyListInputBody: {
|
|
158
|
+
webpropertyIds: WEB_PROPERTY_IDS,
|
|
159
|
+
},
|
|
160
|
+
} satisfies V3GlobaldataAssetWebpropertyListPostRequest;
|
|
161
|
+
|
|
162
|
+
const response = await sdk.globalData.getWebProperties(request);
|
|
163
|
+
expect(response.result.result?.length).toBe(WEB_PROPERTY_IDS.length);
|
|
164
|
+
});
|
|
129
165
|
});
|
|
130
166
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
167
|
+
describe("Search", () => {
|
|
168
|
+
it("should perform search query", async () => {
|
|
169
|
+
const request = {
|
|
170
|
+
searchQueryInputBody: {
|
|
171
|
+
query: "web.port: *",
|
|
172
|
+
pageSize: 3,
|
|
173
|
+
fields: ["web.port"],
|
|
174
|
+
},
|
|
175
|
+
} satisfies V3GlobaldataSearchQueryRequest;
|
|
176
|
+
|
|
177
|
+
const response = await sdk.globalData.search(request);
|
|
178
|
+
expect(response.result.result).toBeDefined();
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
it("should perform aggregate search", async () => {
|
|
182
|
+
const request = {
|
|
183
|
+
searchAggregateInputBody: {
|
|
184
|
+
field: "web.endpoints.http.status_reason",
|
|
185
|
+
numberOfBuckets: 2,
|
|
186
|
+
query: "web.port: *",
|
|
187
|
+
},
|
|
188
|
+
} satisfies V3GlobaldataSearchAggregateRequest;
|
|
189
|
+
|
|
190
|
+
const response = await sdk.globalData.aggregate(request);
|
|
191
|
+
expect(response.result.result).toBeDefined();
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
it("should convert legacy search queries", async () => {
|
|
195
|
+
const request = {
|
|
196
|
+
searchConvertQueryInputBody: {
|
|
197
|
+
queries: ["parsed.names: censys.io AND tags: trusted"],
|
|
198
|
+
},
|
|
199
|
+
} satisfies V3GlobaldataSearchConvertRequest;
|
|
200
|
+
|
|
201
|
+
const response =
|
|
202
|
+
await sdk.globalData.convertLegacySearchQueries(request);
|
|
203
|
+
expect(response.result.result).toBeDefined();
|
|
204
|
+
});
|
|
205
|
+
});
|
|
143
206
|
|
|
144
|
-
|
|
145
|
-
|
|
207
|
+
describe("Tracked Scans (Live Rescan)", () => {
|
|
208
|
+
it("should create and get a tracked scan", async () => {
|
|
209
|
+
const createRequest = {
|
|
210
|
+
scansRescanInputBody: {
|
|
211
|
+
target: {
|
|
212
|
+
serviceId: {
|
|
213
|
+
ip: "1.1.1.1",
|
|
214
|
+
port: 443,
|
|
215
|
+
protocol: "HTTP",
|
|
216
|
+
transportProtocol: "tcp" as const,
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
} satisfies V3GlobaldataScansRescanRequest;
|
|
221
|
+
|
|
222
|
+
const createResponse =
|
|
223
|
+
await sdk.globalData.createTrackedScan(createRequest);
|
|
224
|
+
const scanId = createResponse.result.result?.trackedScanId ?? "";
|
|
225
|
+
expect(scanId).toBeTruthy();
|
|
226
|
+
|
|
227
|
+
const getRequest = { scanId } satisfies V3GlobaldataScansGetRequest;
|
|
228
|
+
const getResponse = await sdk.globalData.getTrackedScan(getRequest);
|
|
229
|
+
expect(getResponse.result.result).toBeDefined();
|
|
230
|
+
});
|
|
146
231
|
});
|
|
147
232
|
});
|
|
148
233
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
} satisfies V3GlobaldataAssetWebpropertyRequest;
|
|
156
|
-
|
|
157
|
-
const response = await sdk.globalData.getWebProperty(request);
|
|
158
|
-
|
|
159
|
-
expect(response).toBeDefined();
|
|
234
|
+
// ---------------------------------------------------------------------------
|
|
235
|
+
// Collections
|
|
236
|
+
// ---------------------------------------------------------------------------
|
|
237
|
+
describe("Collections", () => {
|
|
238
|
+
it("should list collections", async () => {
|
|
239
|
+
const response = await sdk.collections.list({});
|
|
160
240
|
expect(response.result.result).toBeDefined();
|
|
161
241
|
});
|
|
162
242
|
|
|
163
|
-
it(
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
243
|
+
it(
|
|
244
|
+
"should perform full CRUD operations",
|
|
245
|
+
async () => {
|
|
246
|
+
const tag = Math.random().toString(36).substring(2, 15);
|
|
247
|
+
const name = `Test Collection TS - ${tag}`;
|
|
248
|
+
const description = `Description - ${tag}`;
|
|
249
|
+
|
|
250
|
+
// Create
|
|
251
|
+
const createRequest = {
|
|
252
|
+
crudCreateInputBody: {
|
|
253
|
+
name,
|
|
254
|
+
description,
|
|
255
|
+
query: COLLECTION_QUERY,
|
|
256
|
+
},
|
|
257
|
+
} satisfies V3CollectionsCrudCreateRequest;
|
|
258
|
+
const createResponse = await sdk.collections.create(createRequest);
|
|
259
|
+
const collectionUid = createResponse.result.result?.id ?? "";
|
|
260
|
+
expect(collectionUid).toBeTruthy();
|
|
261
|
+
|
|
262
|
+
// Get
|
|
263
|
+
const getRequest = {
|
|
264
|
+
collectionUid,
|
|
265
|
+
} satisfies V3CollectionsCrudGetRequest;
|
|
266
|
+
const getResponse = await sdk.collections.get(getRequest);
|
|
267
|
+
expect(getResponse.result.result?.name).toBe(name);
|
|
268
|
+
|
|
269
|
+
// List Events
|
|
270
|
+
const listEventsRequest = {
|
|
271
|
+
collectionUid,
|
|
272
|
+
} satisfies V3CollectionsListEventsRequest;
|
|
273
|
+
const listEventsResponse =
|
|
274
|
+
await sdk.collections.listEvents(listEventsRequest);
|
|
275
|
+
expect(listEventsResponse).toBeDefined();
|
|
276
|
+
|
|
277
|
+
// Aggregate
|
|
278
|
+
const aggregateRequest = {
|
|
279
|
+
collectionUid,
|
|
280
|
+
searchAggregateInputBody: {
|
|
281
|
+
field: "host.autonomous_system.name",
|
|
282
|
+
numberOfBuckets: 10,
|
|
283
|
+
query: "host.services.labels.value = 'REMOTE_ACCESS'",
|
|
284
|
+
},
|
|
285
|
+
} satisfies V3CollectionsSearchAggregateRequest;
|
|
286
|
+
const aggregateResponse =
|
|
287
|
+
await sdk.collections.aggregate(aggregateRequest);
|
|
288
|
+
expect(aggregateResponse).toBeDefined();
|
|
289
|
+
|
|
290
|
+
// Search
|
|
291
|
+
const searchRequest = {
|
|
292
|
+
collectionUid,
|
|
293
|
+
searchQueryInputBody: {
|
|
294
|
+
query: "host.services.labels.value = 'REMOTE_ACCESS'",
|
|
295
|
+
},
|
|
296
|
+
} satisfies V3CollectionsSearchQueryRequest;
|
|
297
|
+
const searchResponse = await sdk.collections.search(searchRequest);
|
|
298
|
+
expect(searchResponse).toBeDefined();
|
|
299
|
+
|
|
300
|
+
// Update
|
|
301
|
+
const newName = `Updated - ${tag}`;
|
|
302
|
+
const updateRequest = {
|
|
303
|
+
collectionUid,
|
|
304
|
+
crudUpdateInputBody: {
|
|
305
|
+
name: newName,
|
|
306
|
+
description,
|
|
307
|
+
query: COLLECTION_QUERY,
|
|
308
|
+
},
|
|
309
|
+
} satisfies V3CollectionsCrudUpdateRequest;
|
|
310
|
+
const updateResponse = await sdk.collections.update(updateRequest);
|
|
311
|
+
expect(updateResponse).toBeDefined();
|
|
312
|
+
|
|
313
|
+
const updatedGet = await sdk.collections.get(getRequest);
|
|
314
|
+
expect(updatedGet.result.result?.name).toBe(newName);
|
|
315
|
+
|
|
316
|
+
// Delete
|
|
317
|
+
const deleteRequest = {
|
|
318
|
+
collectionUid,
|
|
319
|
+
} satisfies V3CollectionsCrudDeleteRequest;
|
|
320
|
+
await sdk.collections.delete(deleteRequest);
|
|
321
|
+
|
|
322
|
+
await expect(sdk.collections.get(getRequest)).rejects.toThrow();
|
|
323
|
+
},
|
|
324
|
+
60_000
|
|
325
|
+
);
|
|
177
326
|
});
|
|
178
327
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
328
|
+
// ---------------------------------------------------------------------------
|
|
329
|
+
// Account Management
|
|
330
|
+
// ---------------------------------------------------------------------------
|
|
331
|
+
describe("Account Management", () => {
|
|
332
|
+
describe("Organization", () => {
|
|
333
|
+
it("should get organization details", async () => {
|
|
334
|
+
const request = {
|
|
335
|
+
organizationId: orgId,
|
|
336
|
+
includeMemberCounts: true,
|
|
337
|
+
} satisfies V3AccountmanagementOrgDetailsRequest;
|
|
338
|
+
|
|
339
|
+
const response =
|
|
340
|
+
await sdk.accountManagement.getOrganizationDetails(request);
|
|
341
|
+
expect(response.result.result).toBeDefined();
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
it("should get organization credits", async () => {
|
|
345
|
+
const request = {
|
|
346
|
+
organizationId: orgId,
|
|
347
|
+
} satisfies V3AccountmanagementOrgCreditsRequest;
|
|
348
|
+
|
|
349
|
+
const response =
|
|
350
|
+
await sdk.accountManagement.getOrganizationCredits(request);
|
|
351
|
+
expect(response.result.result).toBeDefined();
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
it("should get organization credit usage", async () => {
|
|
355
|
+
const request = {
|
|
356
|
+
organizationId: orgId,
|
|
357
|
+
startDate: thirtyDaysAgo(),
|
|
358
|
+
granularity: "daily",
|
|
359
|
+
} satisfies V3AccountmanagementOrgCreditsUsageRequest;
|
|
360
|
+
|
|
361
|
+
const response =
|
|
362
|
+
await sdk.accountManagement.getOrganizationCreditUsage(request);
|
|
363
|
+
expect(response.result.result).toBeDefined();
|
|
364
|
+
});
|
|
193
365
|
});
|
|
194
366
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
367
|
+
describe("Members", () => {
|
|
368
|
+
it("should list organization members", async () => {
|
|
369
|
+
const request = {
|
|
370
|
+
organizationId: orgId,
|
|
371
|
+
} satisfies V3AccountmanagementListOrgMembersRequest;
|
|
372
|
+
|
|
373
|
+
const response =
|
|
374
|
+
await sdk.accountManagement.listOrganizationMembers(request);
|
|
375
|
+
expect(response.result.result).toBeDefined();
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
it("should get member credit usage", async () => {
|
|
379
|
+
const membersResponse =
|
|
380
|
+
await sdk.accountManagement.listOrganizationMembers({
|
|
381
|
+
organizationId: orgId,
|
|
382
|
+
});
|
|
383
|
+
const userId =
|
|
384
|
+
membersResponse.result.result?.members?.[0]?.uid ?? "";
|
|
385
|
+
expect(userId).toBeTruthy();
|
|
386
|
+
|
|
387
|
+
const request = {
|
|
388
|
+
organizationId: orgId,
|
|
389
|
+
userId,
|
|
390
|
+
startDate: thirtyDaysAgo(),
|
|
391
|
+
granularity: "daily",
|
|
392
|
+
} satisfies V3AccountmanagementMemberCreditsUsageRequest;
|
|
393
|
+
|
|
394
|
+
const response =
|
|
395
|
+
await sdk.accountManagement.getMemberCreditUsage(request);
|
|
396
|
+
expect(response.result.result).toBeDefined();
|
|
397
|
+
});
|
|
210
398
|
});
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
describe("Collections", () => {
|
|
214
|
-
it("should perform full CRUD operations on collections", async () => {
|
|
215
|
-
const randomString = Math.random().toString(36).substring(2, 15); // Make it random to prevent name collisions. Might require manual test clean up from time to time.
|
|
216
|
-
const collectionName = `Test Collection NL - ${randomString}`;
|
|
217
|
-
const collectionDescription = `Test Collection NL - ${randomString} description`;
|
|
218
|
-
const collectionQuery =
|
|
219
|
-
"host.services.protocol='SSH' and host.location.country = 'Netherlands' and host.services.port = 9100 and host.autonomous_system.name = 'WORLDSTREAM'";
|
|
220
|
-
|
|
221
|
-
const createRequest = {
|
|
222
|
-
crudCreateInputBody: {
|
|
223
|
-
name: collectionName,
|
|
224
|
-
description: collectionDescription,
|
|
225
|
-
query: collectionQuery,
|
|
226
|
-
},
|
|
227
|
-
} satisfies V3CollectionsCrudCreateRequest;
|
|
228
|
-
|
|
229
|
-
const response = await sdk.collections.create(createRequest);
|
|
230
|
-
expect(response).toBeDefined();
|
|
231
|
-
|
|
232
|
-
const collectionUid = response.result.result?.id ?? "";
|
|
233
|
-
expect(collectionUid).toBeDefined();
|
|
234
|
-
|
|
235
|
-
const getRequest = {
|
|
236
|
-
collectionUid,
|
|
237
|
-
} satisfies V3CollectionsCrudGetRequest;
|
|
238
|
-
|
|
239
|
-
const getResult = await sdk.collections.get(getRequest);
|
|
240
|
-
expect(getResult).toBeDefined();
|
|
241
|
-
|
|
242
|
-
const listEventsRequest = {
|
|
243
|
-
collectionUid,
|
|
244
|
-
} satisfies V3CollectionsListEventsRequest;
|
|
245
|
-
|
|
246
|
-
const listEventsResult = await sdk.collections.listEvents(
|
|
247
|
-
listEventsRequest
|
|
248
|
-
);
|
|
249
|
-
expect(listEventsResult).toBeDefined();
|
|
250
|
-
|
|
251
|
-
const searchAggregateRequest = {
|
|
252
|
-
collectionUid,
|
|
253
|
-
searchAggregateInputBody: {
|
|
254
|
-
field: "host.autonomous_system.name",
|
|
255
|
-
numberOfBuckets: 10,
|
|
256
|
-
query: "host.services.labels.value = 'REMOTE_ACCESS'",
|
|
257
|
-
},
|
|
258
|
-
} satisfies V3CollectionsSearchAggregateRequest;
|
|
259
399
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
const newDescription = `New desc - ${randomString} description`;
|
|
279
|
-
const newName = `New name - ${randomString}`;
|
|
280
|
-
|
|
281
|
-
const updateRequest = {
|
|
282
|
-
collectionUid,
|
|
283
|
-
crudUpdateInputBody: {
|
|
284
|
-
description: newDescription,
|
|
285
|
-
name: newName,
|
|
286
|
-
query: collectionQuery,
|
|
287
|
-
},
|
|
288
|
-
} satisfies V3CollectionsCrudUpdateRequest;
|
|
289
|
-
|
|
290
|
-
const updateResult = await sdk.collections.update(updateRequest);
|
|
291
|
-
expect(updateResult).toBeDefined();
|
|
292
|
-
|
|
293
|
-
const updatedGetResult = await sdk.collections.get(getRequest);
|
|
294
|
-
expect(updatedGetResult.result.result?.description).toBe(newDescription);
|
|
295
|
-
|
|
296
|
-
const deleteRequest = {
|
|
297
|
-
collectionUid,
|
|
298
|
-
} satisfies V3CollectionsCrudDeleteRequest;
|
|
299
|
-
|
|
300
|
-
const deleteResult = await sdk.collections.delete(deleteRequest);
|
|
301
|
-
expect(deleteResult).toBeDefined();
|
|
302
|
-
|
|
303
|
-
await expect(sdk.collections.get(getRequest)).rejects.toThrow();
|
|
304
|
-
}, 60_000); // Extra long-lived to ensure it we have time to complete these tests.
|
|
400
|
+
describe("User", () => {
|
|
401
|
+
it("should get user credits", async () => {
|
|
402
|
+
const response = await sdk.accountManagement.getUserCredits();
|
|
403
|
+
expect(response.result.result).toBeDefined();
|
|
404
|
+
});
|
|
405
|
+
|
|
406
|
+
it("should get user credit usage", async () => {
|
|
407
|
+
const request = {
|
|
408
|
+
startDate: thirtyDaysAgo(),
|
|
409
|
+
granularity: "daily",
|
|
410
|
+
} satisfies V3AccountmanagementUserCreditsUsageRequest;
|
|
411
|
+
|
|
412
|
+
const response =
|
|
413
|
+
await sdk.accountManagement.getUserCreditsUsage(request);
|
|
414
|
+
expect(response.result.result).toBeDefined();
|
|
415
|
+
});
|
|
416
|
+
});
|
|
305
417
|
});
|
|
306
418
|
|
|
419
|
+
// ---------------------------------------------------------------------------
|
|
420
|
+
// Threat Hunting
|
|
421
|
+
// ---------------------------------------------------------------------------
|
|
307
422
|
describe("Threat Hunting", () => {
|
|
308
423
|
it("should perform value counts search", async () => {
|
|
309
424
|
const request = {
|
|
@@ -320,9 +435,47 @@ describe("Censys SDK", () => {
|
|
|
320
435
|
} satisfies V3ThreathuntingValueCountsRequest;
|
|
321
436
|
|
|
322
437
|
const response = await sdk.threatHunting.valueCounts(request);
|
|
438
|
+
expect(response.result.result).toBeDefined();
|
|
439
|
+
});
|
|
440
|
+
|
|
441
|
+
it("should get host observations with certificate", async () => {
|
|
442
|
+
const request = {
|
|
443
|
+
certificateId: CERT_IDS[0],
|
|
444
|
+
} satisfies V3ThreathuntingGetHostObservationsWithCertificateRequest;
|
|
445
|
+
|
|
446
|
+
const response =
|
|
447
|
+
await sdk.threatHunting.getHostObservationsWithCertificate(request);
|
|
448
|
+
expect(response.result.result).toBeDefined();
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
it("should list threats", async () => {
|
|
452
|
+
const request = {} satisfies V3ThreathuntingThreatsListRequest;
|
|
323
453
|
|
|
324
|
-
|
|
454
|
+
const response = await sdk.threatHunting.listThreats(request);
|
|
325
455
|
expect(response.result.result).toBeDefined();
|
|
326
456
|
});
|
|
457
|
+
|
|
458
|
+
it("should create and get a tracked scan (Live Discovery)", async () => {
|
|
459
|
+
const createRequest = {
|
|
460
|
+
scansDiscoveryInputBody: {
|
|
461
|
+
target: {
|
|
462
|
+
hostPort: {
|
|
463
|
+
ip: "1.1.1.1",
|
|
464
|
+
port: 443,
|
|
465
|
+
},
|
|
466
|
+
},
|
|
467
|
+
},
|
|
468
|
+
} satisfies V3ThreathuntingScansDiscoveryRequest;
|
|
469
|
+
|
|
470
|
+
const createResponse =
|
|
471
|
+
await sdk.threatHunting.createTrackedScan(createRequest);
|
|
472
|
+
const scanId = createResponse.result.result?.trackedScanId ?? "";
|
|
473
|
+
expect(scanId).toBeTruthy();
|
|
474
|
+
|
|
475
|
+
const getRequest = { scanId } satisfies V3ThreathuntingScansGetRequest;
|
|
476
|
+
const getResponse =
|
|
477
|
+
await sdk.threatHunting.getTrackedScanThreatHunting(getRequest);
|
|
478
|
+
expect(getResponse.result.result).toBeDefined();
|
|
479
|
+
});
|
|
327
480
|
});
|
|
328
481
|
});
|