@grc-claw/integration-marketplace 0.8.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/dist/IntegrationMarketplace.d.ts +32 -0
- package/dist/IntegrationMarketplace.js +319 -0
- package/dist/connectors/ADPConnector.d.ts +12 -0
- package/dist/connectors/ADPConnector.js +97 -0
- package/dist/connectors/AWSCloudTrailConnector.d.ts +12 -0
- package/dist/connectors/AWSCloudTrailConnector.js +77 -0
- package/dist/connectors/AWSCloudWatchConnector.d.ts +12 -0
- package/dist/connectors/AWSCloudWatchConnector.js +70 -0
- package/dist/connectors/AWSGuardDutyConnector.d.ts +12 -0
- package/dist/connectors/AWSGuardDutyConnector.js +139 -0
- package/dist/connectors/AWSIAMConnector.d.ts +12 -0
- package/dist/connectors/AWSIAMConnector.js +90 -0
- package/dist/connectors/AWSKMSConnector.d.ts +12 -0
- package/dist/connectors/AWSKMSConnector.js +70 -0
- package/dist/connectors/AWSLambdaConnector.d.ts +12 -0
- package/dist/connectors/AWSLambdaConnector.js +84 -0
- package/dist/connectors/AWSRDSConnector.d.ts +12 -0
- package/dist/connectors/AWSRDSConnector.js +84 -0
- package/dist/connectors/AWSS3Connector.d.ts +12 -0
- package/dist/connectors/AWSS3Connector.js +112 -0
- package/dist/connectors/AkamaiConnector.d.ts +12 -0
- package/dist/connectors/AkamaiConnector.js +98 -0
- package/dist/connectors/ArgoCDConnector.d.ts +12 -0
- package/dist/connectors/ArgoCDConnector.js +93 -0
- package/dist/connectors/ArtifactoryConnector.d.ts +12 -0
- package/dist/connectors/ArtifactoryConnector.js +94 -0
- package/dist/connectors/AtlassianJiraConnector.d.ts +12 -0
- package/dist/connectors/AtlassianJiraConnector.js +134 -0
- package/dist/connectors/Auth0Connector.d.ts +12 -0
- package/dist/connectors/Auth0Connector.js +150 -0
- package/dist/connectors/AzureADConnector.d.ts +12 -0
- package/dist/connectors/AzureADConnector.js +115 -0
- package/dist/connectors/AzureDevOpsConnector.d.ts +12 -0
- package/dist/connectors/AzureDevOpsConnector.js +130 -0
- package/dist/connectors/AzureDevOpsPipelinesConnector.d.ts +12 -0
- package/dist/connectors/AzureDevOpsPipelinesConnector.js +72 -0
- package/dist/connectors/AzurePipelinesConnector.d.ts +12 -0
- package/dist/connectors/AzurePipelinesConnector.js +72 -0
- package/dist/connectors/AzurePolicyConnector.d.ts +12 -0
- package/dist/connectors/AzurePolicyConnector.js +141 -0
- package/dist/connectors/AzureReposConnector.d.ts +12 -0
- package/dist/connectors/AzureReposConnector.js +96 -0
- package/dist/connectors/AzureSentinelConnector.d.ts +12 -0
- package/dist/connectors/AzureSentinelConnector.js +88 -0
- package/dist/connectors/BambooCICDConnector.d.ts +12 -0
- package/dist/connectors/BambooCICDConnector.js +72 -0
- package/dist/connectors/BambooHRConnector.d.ts +12 -0
- package/dist/connectors/BambooHRConnector.js +84 -0
- package/dist/connectors/BeyondTrustConnector.d.ts +12 -0
- package/dist/connectors/BeyondTrustConnector.js +94 -0
- package/dist/connectors/BitbucketConnector.d.ts +12 -0
- package/dist/connectors/BitbucketConnector.js +100 -0
- package/dist/connectors/BitbucketPipelinesConnector.d.ts +12 -0
- package/dist/connectors/BitbucketPipelinesConnector.js +72 -0
- package/dist/connectors/BoxConnector.d.ts +12 -0
- package/dist/connectors/BoxConnector.js +122 -0
- package/dist/connectors/BuildkiteConnector.d.ts +12 -0
- package/dist/connectors/BuildkiteConnector.js +95 -0
- package/dist/connectors/CarbonBlackConnector.d.ts +12 -0
- package/dist/connectors/CarbonBlackConnector.js +89 -0
- package/dist/connectors/CassandraConnector.d.ts +12 -0
- package/dist/connectors/CassandraConnector.js +69 -0
- package/dist/connectors/CheckPointConnector.d.ts +12 -0
- package/dist/connectors/CheckPointConnector.js +98 -0
- package/dist/connectors/CircleCIConnector.d.ts +12 -0
- package/dist/connectors/CircleCIConnector.js +129 -0
- package/dist/connectors/CircleCIConnectorsConnector.d.ts +12 -0
- package/dist/connectors/CircleCIConnectorsConnector.js +69 -0
- package/dist/connectors/CiscoUmbrellaConnector.d.ts +12 -0
- package/dist/connectors/CiscoUmbrellaConnector.js +96 -0
- package/dist/connectors/CloudBeesJenkinsConnector.d.ts +12 -0
- package/dist/connectors/CloudBeesJenkinsConnector.js +70 -0
- package/dist/connectors/CloudflareDNSConnector.d.ts +12 -0
- package/dist/connectors/CloudflareDNSConnector.js +71 -0
- package/dist/connectors/CloudflareWAFConnector.d.ts +12 -0
- package/dist/connectors/CloudflareWAFConnector.js +98 -0
- package/dist/connectors/ConfluenceConnector.d.ts +12 -0
- package/dist/connectors/ConfluenceConnector.js +101 -0
- package/dist/connectors/ConstantContactConnector.d.ts +12 -0
- package/dist/connectors/ConstantContactConnector.js +70 -0
- package/dist/connectors/CouchDBConnector.d.ts +12 -0
- package/dist/connectors/CouchDBConnector.js +69 -0
- package/dist/connectors/CrowdStrikeConnector.d.ts +12 -0
- package/dist/connectors/CrowdStrikeConnector.js +86 -0
- package/dist/connectors/CrowdStrikeFalconConnector.d.ts +12 -0
- package/dist/connectors/CrowdStrikeFalconConnector.js +92 -0
- package/dist/connectors/CrowdStrikeSpotlightConnector.d.ts +12 -0
- package/dist/connectors/CrowdStrikeSpotlightConnector.js +139 -0
- package/dist/connectors/CyberArkConnector.d.ts +12 -0
- package/dist/connectors/CyberArkConnector.js +95 -0
- package/dist/connectors/DatabricksConnector.d.ts +12 -0
- package/dist/connectors/DatabricksConnector.js +95 -0
- package/dist/connectors/DatadogConnector.d.ts +12 -0
- package/dist/connectors/DatadogConnector.js +110 -0
- package/dist/connectors/DigitalOceanConnector.d.ts +12 -0
- package/dist/connectors/DigitalOceanConnector.js +85 -0
- package/dist/connectors/DiscordConnector.d.ts +12 -0
- package/dist/connectors/DiscordConnector.js +98 -0
- package/dist/connectors/DockerHubConnector.d.ts +12 -0
- package/dist/connectors/DockerHubConnector.js +80 -0
- package/dist/connectors/DocuSignConnector.d.ts +12 -0
- package/dist/connectors/DocuSignConnector.js +96 -0
- package/dist/connectors/DriftConnector.d.ts +12 -0
- package/dist/connectors/DriftConnector.js +69 -0
- package/dist/connectors/DropboxConnector.d.ts +12 -0
- package/dist/connectors/DropboxConnector.js +127 -0
- package/dist/connectors/ESETConnector.d.ts +12 -0
- package/dist/connectors/ESETConnector.js +70 -0
- package/dist/connectors/ElasticsearchCloudConnector.d.ts +12 -0
- package/dist/connectors/ElasticsearchCloudConnector.js +70 -0
- package/dist/connectors/FSecureConnector.d.ts +12 -0
- package/dist/connectors/FSecureConnector.js +70 -0
- package/dist/connectors/FeatureFlagConnector.d.ts +12 -0
- package/dist/connectors/FeatureFlagConnector.js +70 -0
- package/dist/connectors/FluxCDConnector.d.ts +12 -0
- package/dist/connectors/FluxCDConnector.js +94 -0
- package/dist/connectors/ForgeRockConnector.d.ts +12 -0
- package/dist/connectors/ForgeRockConnector.js +95 -0
- package/dist/connectors/FortinetConnector.d.ts +12 -0
- package/dist/connectors/FortinetConnector.js +98 -0
- package/dist/connectors/FreshdeskConnector.d.ts +12 -0
- package/dist/connectors/FreshdeskConnector.js +71 -0
- package/dist/connectors/GCPBigQueryConnector.d.ts +12 -0
- package/dist/connectors/GCPBigQueryConnector.js +71 -0
- package/dist/connectors/GCPComputeConnector.d.ts +12 -0
- package/dist/connectors/GCPComputeConnector.js +87 -0
- package/dist/connectors/GCPConfigConnector.d.ts +12 -0
- package/dist/connectors/GCPConfigConnector.js +149 -0
- package/dist/connectors/GCPFirestoreConnector.d.ts +12 -0
- package/dist/connectors/GCPFirestoreConnector.js +71 -0
- package/dist/connectors/GCPIAMConnector.d.ts +12 -0
- package/dist/connectors/GCPIAMConnector.js +98 -0
- package/dist/connectors/GCPSCCConnector.d.ts +12 -0
- package/dist/connectors/GCPSCCConnector.js +94 -0
- package/dist/connectors/GitHubActionsConnector.d.ts +12 -0
- package/dist/connectors/GitHubActionsConnector.js +104 -0
- package/dist/connectors/GitHubConnector.d.ts +12 -0
- package/dist/connectors/GitHubConnector.js +135 -0
- package/dist/connectors/GitHubCopilotConnector.d.ts +12 -0
- package/dist/connectors/GitHubCopilotConnector.js +72 -0
- package/dist/connectors/GitLabCIConnector.d.ts +12 -0
- package/dist/connectors/GitLabCIConnector.js +71 -0
- package/dist/connectors/GitLabConnector.d.ts +12 -0
- package/dist/connectors/GitLabConnector.js +101 -0
- package/dist/connectors/GitLabSASTConnector.d.ts +12 -0
- package/dist/connectors/GitLabSASTConnector.js +130 -0
- package/dist/connectors/GoogleWorkspaceConnector.d.ts +12 -0
- package/dist/connectors/GoogleWorkspaceConnector.js +136 -0
- package/dist/connectors/HelmConnector.d.ts +12 -0
- package/dist/connectors/HelmConnector.js +94 -0
- package/dist/connectors/HubSpotConnector.d.ts +12 -0
- package/dist/connectors/HubSpotConnector.js +77 -0
- package/dist/connectors/IFTTTConnector.d.ts +12 -0
- package/dist/connectors/IFTTTConnector.js +70 -0
- package/dist/connectors/ImpervaConnector.d.ts +12 -0
- package/dist/connectors/ImpervaConnector.js +94 -0
- package/dist/connectors/InfluxDBConnector.d.ts +12 -0
- package/dist/connectors/InfluxDBConnector.js +70 -0
- package/dist/connectors/IntercomConnector.d.ts +12 -0
- package/dist/connectors/IntercomConnector.js +69 -0
- package/dist/connectors/JenkinsConnector.d.ts +12 -0
- package/dist/connectors/JenkinsConnector.js +96 -0
- package/dist/connectors/JiraConnector.d.ts +12 -0
- package/dist/connectors/JiraConnector.js +103 -0
- package/dist/connectors/KafkaConnector.d.ts +12 -0
- package/dist/connectors/KafkaConnector.js +70 -0
- package/dist/connectors/KasperskyConnector.d.ts +12 -0
- package/dist/connectors/KasperskyConnector.js +70 -0
- package/dist/connectors/KubernetesConnector.d.ts +12 -0
- package/dist/connectors/KubernetesConnector.js +109 -0
- package/dist/connectors/LaceworkConnector.d.ts +13 -0
- package/dist/connectors/LaceworkConnector.js +143 -0
- package/dist/connectors/LaunchDarklyConnector.d.ts +12 -0
- package/dist/connectors/LaunchDarklyConnector.js +86 -0
- package/dist/connectors/LinodeConnector.d.ts +12 -0
- package/dist/connectors/LinodeConnector.js +70 -0
- package/dist/connectors/LookerConnector.d.ts +12 -0
- package/dist/connectors/LookerConnector.js +94 -0
- package/dist/connectors/MailchimpConnector.d.ts +12 -0
- package/dist/connectors/MailchimpConnector.js +71 -0
- package/dist/connectors/MalwarebytesConnector.d.ts +12 -0
- package/dist/connectors/MalwarebytesConnector.js +85 -0
- package/dist/connectors/McAfeeConnector.d.ts +12 -0
- package/dist/connectors/McAfeeConnector.js +85 -0
- package/dist/connectors/Microsoft365Connector.d.ts +12 -0
- package/dist/connectors/Microsoft365Connector.js +139 -0
- package/dist/connectors/MongoDBConnector.d.ts +12 -0
- package/dist/connectors/MongoDBConnector.js +86 -0
- package/dist/connectors/NamelyConnector.d.ts +12 -0
- package/dist/connectors/NamelyConnector.js +97 -0
- package/dist/connectors/Neo4jConnector.d.ts +12 -0
- package/dist/connectors/Neo4jConnector.js +70 -0
- package/dist/connectors/NetSuiteConnector.d.ts +12 -0
- package/dist/connectors/NetSuiteConnector.js +94 -0
- package/dist/connectors/NetskopeConnector.d.ts +12 -0
- package/dist/connectors/NetskopeConnector.js +98 -0
- package/dist/connectors/NexusConnector.d.ts +12 -0
- package/dist/connectors/NexusConnector.js +93 -0
- package/dist/connectors/NotionConnector.d.ts +12 -0
- package/dist/connectors/NotionConnector.js +109 -0
- package/dist/connectors/OktaConnector.d.ts +12 -0
- package/dist/connectors/OktaConnector.js +123 -0
- package/dist/connectors/OktaSystemLogConnector.d.ts +12 -0
- package/dist/connectors/OktaSystemLogConnector.js +129 -0
- package/dist/connectors/OpsgenieConnector.d.ts +12 -0
- package/dist/connectors/OpsgenieConnector.js +70 -0
- package/dist/connectors/PagerDutyConnector.d.ts +12 -0
- package/dist/connectors/PagerDutyConnector.js +106 -0
- package/dist/connectors/PalantirConnector.d.ts +12 -0
- package/dist/connectors/PalantirConnector.js +95 -0
- package/dist/connectors/PaloAltoPrismaCloudConnector.d.ts +12 -0
- package/dist/connectors/PaloAltoPrismaCloudConnector.js +110 -0
- package/dist/connectors/PingFederateConnector.d.ts +12 -0
- package/dist/connectors/PingFederateConnector.js +97 -0
- package/dist/connectors/PostgreSQLCloudConnector.d.ts +12 -0
- package/dist/connectors/PostgreSQLCloudConnector.js +70 -0
- package/dist/connectors/PowerBIConnector.d.ts +12 -0
- package/dist/connectors/PowerBIConnector.js +95 -0
- package/dist/connectors/PrismaCloudConnector.d.ts +12 -0
- package/dist/connectors/PrismaCloudConnector.js +147 -0
- package/dist/connectors/QualysConnector.d.ts +12 -0
- package/dist/connectors/QualysConnector.js +96 -0
- package/dist/connectors/QualysScannerConnector.d.ts +12 -0
- package/dist/connectors/QualysScannerConnector.js +131 -0
- package/dist/connectors/QuickBooksConnector.d.ts +12 -0
- package/dist/connectors/QuickBooksConnector.js +97 -0
- package/dist/connectors/RabbitMQConnector.d.ts +12 -0
- package/dist/connectors/RabbitMQConnector.js +69 -0
- package/dist/connectors/RadwareConnector.d.ts +12 -0
- package/dist/connectors/RadwareConnector.js +94 -0
- package/dist/connectors/RedisCloudConnector.d.ts +12 -0
- package/dist/connectors/RedisCloudConnector.js +70 -0
- package/dist/connectors/RingCentralConnector.d.ts +12 -0
- package/dist/connectors/RingCentralConnector.js +94 -0
- package/dist/connectors/SAPSuccessFactorsConnector.d.ts +12 -0
- package/dist/connectors/SAPSuccessFactorsConnector.js +103 -0
- package/dist/connectors/SailPointConnector.d.ts +12 -0
- package/dist/connectors/SailPointConnector.js +97 -0
- package/dist/connectors/SalesforceConnector.d.ts +12 -0
- package/dist/connectors/SalesforceConnector.js +91 -0
- package/dist/connectors/SendGridConnector.d.ts +12 -0
- package/dist/connectors/SendGridConnector.js +69 -0
- package/dist/connectors/SentinelOneConnector.d.ts +12 -0
- package/dist/connectors/SentinelOneConnector.js +89 -0
- package/dist/connectors/ServiceNowConnector.d.ts +12 -0
- package/dist/connectors/ServiceNowConnector.js +123 -0
- package/dist/connectors/SlackConnector.d.ts +12 -0
- package/dist/connectors/SlackConnector.js +109 -0
- package/dist/connectors/SnowflakeConnector.d.ts +12 -0
- package/dist/connectors/SnowflakeConnector.js +105 -0
- package/dist/connectors/SnykConnector.d.ts +12 -0
- package/dist/connectors/SnykConnector.js +84 -0
- package/dist/connectors/SnykMonitorConnector.d.ts +12 -0
- package/dist/connectors/SnykMonitorConnector.js +131 -0
- package/dist/connectors/SophosConnector.d.ts +12 -0
- package/dist/connectors/SophosConnector.js +87 -0
- package/dist/connectors/SpinnakerConnector.d.ts +12 -0
- package/dist/connectors/SpinnakerConnector.js +70 -0
- package/dist/connectors/SplunkConnector.d.ts +12 -0
- package/dist/connectors/SplunkConnector.js +126 -0
- package/dist/connectors/StripeConnector.d.ts +12 -0
- package/dist/connectors/StripeConnector.js +97 -0
- package/dist/connectors/TableauConnector.d.ts +12 -0
- package/dist/connectors/TableauConnector.js +101 -0
- package/dist/connectors/TaniumConnector.d.ts +12 -0
- package/dist/connectors/TaniumConnector.js +97 -0
- package/dist/connectors/TeamCityConnector.d.ts +12 -0
- package/dist/connectors/TeamCityConnector.js +71 -0
- package/dist/connectors/TeamsConnector.d.ts +12 -0
- package/dist/connectors/TeamsConnector.js +96 -0
- package/dist/connectors/TenableIOConnector.d.ts +12 -0
- package/dist/connectors/TenableIOConnector.js +130 -0
- package/dist/connectors/TerraformCloudConnector.d.ts +12 -0
- package/dist/connectors/TerraformCloudConnector.js +106 -0
- package/dist/connectors/TravisCIConnector.d.ts +12 -0
- package/dist/connectors/TravisCIConnector.js +95 -0
- package/dist/connectors/TrendMicroConnector.d.ts +12 -0
- package/dist/connectors/TrendMicroConnector.js +85 -0
- package/dist/connectors/TwilioConnector.d.ts +12 -0
- package/dist/connectors/TwilioConnector.js +70 -0
- package/dist/connectors/VercelConnector.d.ts +12 -0
- package/dist/connectors/VercelConnector.js +70 -0
- package/dist/connectors/VultrConnector.d.ts +12 -0
- package/dist/connectors/VultrConnector.js +70 -0
- package/dist/connectors/WebexConnector.d.ts +12 -0
- package/dist/connectors/WebexConnector.js +94 -0
- package/dist/connectors/WizConnector.d.ts +12 -0
- package/dist/connectors/WizConnector.js +172 -0
- package/dist/connectors/WorkdayConnector.d.ts +12 -0
- package/dist/connectors/WorkdayConnector.js +100 -0
- package/dist/connectors/XeroConnector.d.ts +12 -0
- package/dist/connectors/XeroConnector.js +96 -0
- package/dist/connectors/ZapierConnector.d.ts +12 -0
- package/dist/connectors/ZapierConnector.js +70 -0
- package/dist/connectors/ZendeskConnector.d.ts +12 -0
- package/dist/connectors/ZendeskConnector.js +71 -0
- package/dist/connectors/ZenefitsConnector.d.ts +12 -0
- package/dist/connectors/ZenefitsConnector.js +93 -0
- package/dist/connectors/ZoomConnector.d.ts +12 -0
- package/dist/connectors/ZoomConnector.js +97 -0
- package/dist/connectors/ZscalerConnector.d.ts +12 -0
- package/dist/connectors/ZscalerConnector.js +97 -0
- package/dist/connectors/index.d.ts +150 -0
- package/dist/connectors/index.js +157 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +16 -0
- package/dist/index.test.d.ts +1 -0
- package/dist/index.test.js +139 -0
- package/dist/types.d.ts +57 -0
- package/dist/types.js +8 -0
- package/package.json +33 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "confluence-spaces",
|
|
5
|
+
name: "Spaces",
|
|
6
|
+
description: "Fetch Confluence spaces and their configurations",
|
|
7
|
+
evidenceCategories: ["documentation", "configuration"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "confluence-pages",
|
|
11
|
+
name: "Pages",
|
|
12
|
+
description: "Fetch recently updated pages for policy and procedure documentation evidence",
|
|
13
|
+
evidenceCategories: ["documentation", "policy_management"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "confluence-permissions",
|
|
17
|
+
name: "Space Permissions",
|
|
18
|
+
description: "Fetch space-level permission and access configurations",
|
|
19
|
+
evidenceCategories: ["access_control", "data_protection"],
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
export class ConfluenceConnector {
|
|
23
|
+
id = "confluence";
|
|
24
|
+
name = "Confluence";
|
|
25
|
+
category = "documentation";
|
|
26
|
+
authType = "bearer_token";
|
|
27
|
+
capabilities = capabilities;
|
|
28
|
+
frameworks = ["SOC2", "ISO27001", "NIST_CSF"];
|
|
29
|
+
async fetchApi(config, endpoint) {
|
|
30
|
+
const base = config.baseUrl || "https://api.atlassian.com/ex/confluence";
|
|
31
|
+
const cloudId = config.extra?.cloudId || "";
|
|
32
|
+
const resp = await fetch(`${base}/wiki/api/v2${endpoint}`, {
|
|
33
|
+
headers: {
|
|
34
|
+
Authorization: `Bearer ${config.apiToken}`,
|
|
35
|
+
Accept: "application/json",
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
if (!resp.ok)
|
|
39
|
+
throw new Error(`Confluence API ${resp.status}: ${resp.statusText}`);
|
|
40
|
+
return (await resp.json());
|
|
41
|
+
}
|
|
42
|
+
async testConnection(config) {
|
|
43
|
+
try {
|
|
44
|
+
await this.fetchApi(config, "/space?limit=1");
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async collectEvidence(config) {
|
|
52
|
+
const artifacts = [];
|
|
53
|
+
const now = new Date().toISOString();
|
|
54
|
+
const spaces = await this.fetchApi(config, "/space?limit=50").catch(() => ({ results: [] }));
|
|
55
|
+
const spaceList = (spaces.results || []);
|
|
56
|
+
artifacts.push({
|
|
57
|
+
id: generateEvidenceId(),
|
|
58
|
+
connectorId: this.id,
|
|
59
|
+
capabilityId: "confluence-spaces",
|
|
60
|
+
timestamp: now,
|
|
61
|
+
hash: hashEvidence({ spaceCount: spaceList.length }),
|
|
62
|
+
framework: "ISO27001",
|
|
63
|
+
controlId: "A.7.2.2",
|
|
64
|
+
source: "confluence/space",
|
|
65
|
+
status: spaceList.length > 0 ? "compliant" : "non_compliant",
|
|
66
|
+
data: { spaceCount: spaceList.length },
|
|
67
|
+
metadata: { cloudId: config.extra?.cloudId || "" },
|
|
68
|
+
});
|
|
69
|
+
const pages = await this.fetchApi(config, "/pages?limit=50&sort=-modified_date").catch(() => ({ results: [] }));
|
|
70
|
+
const pageList = (pages.results || []);
|
|
71
|
+
artifacts.push({
|
|
72
|
+
id: generateEvidenceId(),
|
|
73
|
+
connectorId: this.id,
|
|
74
|
+
capabilityId: "confluence-pages",
|
|
75
|
+
timestamp: now,
|
|
76
|
+
hash: hashEvidence({ pageCount: pageList.length }),
|
|
77
|
+
framework: "SOC2",
|
|
78
|
+
controlId: "CC7.1",
|
|
79
|
+
source: "confluence/pages",
|
|
80
|
+
status: "unknown",
|
|
81
|
+
data: { pageCount: pageList.length },
|
|
82
|
+
metadata: { cloudId: config.extra?.cloudId || "" },
|
|
83
|
+
});
|
|
84
|
+
const permissions = await this.fetchApi(config, "/space?limit=50").catch(() => ({ results: [] }));
|
|
85
|
+
const permList = (permissions.results || []);
|
|
86
|
+
artifacts.push({
|
|
87
|
+
id: generateEvidenceId(),
|
|
88
|
+
connectorId: this.id,
|
|
89
|
+
capabilityId: "confluence-permissions",
|
|
90
|
+
timestamp: now,
|
|
91
|
+
hash: hashEvidence({ spaceCount: permList.length }),
|
|
92
|
+
framework: "ISO27001",
|
|
93
|
+
controlId: "A.9.1.2",
|
|
94
|
+
source: "confluence/permissions",
|
|
95
|
+
status: "unknown",
|
|
96
|
+
data: { spaceCount: permList.length },
|
|
97
|
+
metadata: { cloudId: config.extra?.cloudId || "" },
|
|
98
|
+
});
|
|
99
|
+
return artifacts;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class ConstantContactConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "constantcontact";
|
|
4
|
+
readonly name = "Constant Contact";
|
|
5
|
+
readonly category: "communication";
|
|
6
|
+
readonly authType: "api_key";
|
|
7
|
+
readonly capabilities: IntegrationCapability[];
|
|
8
|
+
readonly frameworks: ComplianceFramework[];
|
|
9
|
+
private fetchApi;
|
|
10
|
+
testConnection(config: ConnectorConfig): Promise<boolean>;
|
|
11
|
+
collectEvidence(config: ConnectorConfig): Promise<EvidenceArtifact[]>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "constantcontact-contacts",
|
|
5
|
+
name: "Contact Lists",
|
|
6
|
+
description: "Fetch Constant Contact contact lists and segmentation data",
|
|
7
|
+
evidenceCategories: ["data_protection", "configuration"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "constantcontact-security",
|
|
11
|
+
name: "Account Security",
|
|
12
|
+
description: "Fetch Constant Contact API key permissions and user access controls",
|
|
13
|
+
evidenceCategories: ["access_control", "audit"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "constantcontact-campaigns",
|
|
17
|
+
name: "Campaign Performance",
|
|
18
|
+
description: "Fetch email campaign delivery and engagement metrics",
|
|
19
|
+
evidenceCategories: ["monitoring", "configuration"],
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
export class ConstantContactConnector {
|
|
23
|
+
id = "constantcontact";
|
|
24
|
+
name = "Constant Contact";
|
|
25
|
+
category = "communication";
|
|
26
|
+
authType = "api_key";
|
|
27
|
+
capabilities = capabilities;
|
|
28
|
+
frameworks = ["SOC2", "ISO27001"];
|
|
29
|
+
async fetchApi(config, endpoint) {
|
|
30
|
+
const base = config.baseUrl || "https://api.constantcontact.com/v2";
|
|
31
|
+
const resp = await fetch(`${base}${endpoint}`, {
|
|
32
|
+
headers: {
|
|
33
|
+
Authorization: `Bearer ${config.apiToken}`,
|
|
34
|
+
"Content-Type": "application/json",
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
if (!resp.ok)
|
|
38
|
+
throw new Error(`Constant Contact API ${resp.status}: ${resp.statusText}`);
|
|
39
|
+
return (await resp.json());
|
|
40
|
+
}
|
|
41
|
+
async testConnection(config) {
|
|
42
|
+
try {
|
|
43
|
+
await this.fetchApi(config, "/accounts?limit=1");
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async collectEvidence(config) {
|
|
51
|
+
const artifacts = [];
|
|
52
|
+
const now = new Date().toISOString();
|
|
53
|
+
const lists = await this.fetchApi(config, "/lists?limit=100").catch(() => ({ lists: [] }));
|
|
54
|
+
const listList = (lists.lists || []);
|
|
55
|
+
artifacts.push({
|
|
56
|
+
id: generateEvidenceId(),
|
|
57
|
+
connectorId: this.id,
|
|
58
|
+
capabilityId: "constantcontact-contacts",
|
|
59
|
+
timestamp: now,
|
|
60
|
+
hash: hashEvidence({ listCount: listList.length }),
|
|
61
|
+
framework: "SOC2",
|
|
62
|
+
controlId: "CC6.1",
|
|
63
|
+
source: "constantcontact/lists",
|
|
64
|
+
status: "unknown",
|
|
65
|
+
data: { contactListCount: listList.length },
|
|
66
|
+
metadata: {},
|
|
67
|
+
});
|
|
68
|
+
return artifacts;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class CouchDBConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "couchdb";
|
|
4
|
+
readonly name = "Apache CouchDB";
|
|
5
|
+
readonly category: "data_warehouse";
|
|
6
|
+
readonly authType: "api_key";
|
|
7
|
+
readonly capabilities: IntegrationCapability[];
|
|
8
|
+
readonly frameworks: ComplianceFramework[];
|
|
9
|
+
private fetchApi;
|
|
10
|
+
testConnection(config: ConnectorConfig): Promise<boolean>;
|
|
11
|
+
collectEvidence(config: ConnectorConfig): Promise<EvidenceArtifact[]>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "couchdb-databases",
|
|
5
|
+
name: "CouchDB Databases",
|
|
6
|
+
description: "Fetch CouchDB database configurations and replication status",
|
|
7
|
+
evidenceCategories: ["data_protection", "cloud_configuration"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "couchdb-security",
|
|
11
|
+
name: "Security Configurations",
|
|
12
|
+
description: "Fetch CouchDB authentication, CORS settings, and admin accounts",
|
|
13
|
+
evidenceCategories: ["access_control", "configuration"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "couchdb-replication",
|
|
17
|
+
name: "Replication Status",
|
|
18
|
+
description: "Fetch CouchDB replication jobs and cluster synchronization health",
|
|
19
|
+
evidenceCategories: ["data_protection", "availability"],
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
export class CouchDBConnector {
|
|
23
|
+
id = "couchdb";
|
|
24
|
+
name = "Apache CouchDB";
|
|
25
|
+
category = "data_warehouse";
|
|
26
|
+
authType = "api_key";
|
|
27
|
+
capabilities = capabilities;
|
|
28
|
+
frameworks = ["SOC2", "ISO27001", "NIST_CSF"];
|
|
29
|
+
async fetchApi(config, endpoint) {
|
|
30
|
+
const base = config.baseUrl || "https://api.couchdb.example.com";
|
|
31
|
+
const resp = await fetch(`${base}${endpoint}`, {
|
|
32
|
+
headers: {
|
|
33
|
+
Authorization: `Bearer ${config.apiToken}`,
|
|
34
|
+
"Content-Type": "application/json",
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
if (!resp.ok)
|
|
38
|
+
throw new Error(`CouchDB API ${resp.status}: ${resp.statusText}`);
|
|
39
|
+
return (await resp.json());
|
|
40
|
+
}
|
|
41
|
+
async testConnection(config) {
|
|
42
|
+
try {
|
|
43
|
+
await this.fetchApi(config, "/_membership");
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async collectEvidence(config) {
|
|
51
|
+
const artifacts = [];
|
|
52
|
+
const now = new Date().toISOString();
|
|
53
|
+
const membership = await this.fetchApi(config, "/_membership").catch(() => ({}));
|
|
54
|
+
artifacts.push({
|
|
55
|
+
id: generateEvidenceId(),
|
|
56
|
+
connectorId: this.id,
|
|
57
|
+
capabilityId: "couchdb-databases",
|
|
58
|
+
timestamp: now,
|
|
59
|
+
hash: hashEvidence(membership),
|
|
60
|
+
framework: "SOC2",
|
|
61
|
+
controlId: "CC6.1",
|
|
62
|
+
source: "couchdb/membership",
|
|
63
|
+
status: "unknown",
|
|
64
|
+
data: { connected: true },
|
|
65
|
+
metadata: {},
|
|
66
|
+
});
|
|
67
|
+
return artifacts;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class CrowdStrikeConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "crowdstrike";
|
|
4
|
+
readonly name = "CrowdStrike Falcon";
|
|
5
|
+
readonly category: "endpoint";
|
|
6
|
+
readonly authType: "oauth2";
|
|
7
|
+
readonly capabilities: IntegrationCapability[];
|
|
8
|
+
readonly frameworks: ComplianceFramework[];
|
|
9
|
+
private getAccessToken;
|
|
10
|
+
testConnection(config: ConnectorConfig): Promise<boolean>;
|
|
11
|
+
collectEvidence(config: ConnectorConfig): Promise<EvidenceArtifact[]>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "cs-device-posture",
|
|
5
|
+
name: "Device Posture",
|
|
6
|
+
description: "Fetch CrowdStrike device posture assessments and compliance",
|
|
7
|
+
evidenceCategories: ["endpoint_security", "device_management"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "cs-threat-detections",
|
|
11
|
+
name: "Threat Detections",
|
|
12
|
+
description: "Fetch CrowdStrike Falcon threat detections",
|
|
13
|
+
evidenceCategories: ["threat_detection", "incident_management"],
|
|
14
|
+
},
|
|
15
|
+
];
|
|
16
|
+
export class CrowdStrikeConnector {
|
|
17
|
+
id = "crowdstrike";
|
|
18
|
+
name = "CrowdStrike Falcon";
|
|
19
|
+
category = "endpoint";
|
|
20
|
+
authType = "oauth2";
|
|
21
|
+
capabilities = capabilities;
|
|
22
|
+
frameworks = ["SOC2", "ISO27001", "NIST_CSF"];
|
|
23
|
+
async getAccessToken(config) {
|
|
24
|
+
const resp = await fetch("https://api.crowdstrike.com/oauth2/token", {
|
|
25
|
+
method: "POST",
|
|
26
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
27
|
+
body: new URLSearchParams({
|
|
28
|
+
client_id: config.clientId || "",
|
|
29
|
+
client_secret: config.clientSecret || "",
|
|
30
|
+
}),
|
|
31
|
+
});
|
|
32
|
+
if (!resp.ok)
|
|
33
|
+
throw new Error(`CrowdStrike token ${resp.status}`);
|
|
34
|
+
const data = (await resp.json());
|
|
35
|
+
return data.access_token;
|
|
36
|
+
}
|
|
37
|
+
async testConnection(config) {
|
|
38
|
+
try {
|
|
39
|
+
const token = await this.getAccessToken(config);
|
|
40
|
+
const resp = await fetch("https://api.crowdstrike.com/devices/queries/devices/v1?limit=1", {
|
|
41
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
42
|
+
});
|
|
43
|
+
return resp.ok;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async collectEvidence(config) {
|
|
50
|
+
const artifacts = [];
|
|
51
|
+
const now = new Date().toISOString();
|
|
52
|
+
const token = await this.getAccessToken(config);
|
|
53
|
+
const headers = { Authorization: `Bearer ${token}` };
|
|
54
|
+
const devices = await fetch("https://api.crowdstrike.com/devices/queries/devices/v1?limit=100", { headers }).then((r) => r.json());
|
|
55
|
+
const deviceIds = (devices.resources || []);
|
|
56
|
+
artifacts.push({
|
|
57
|
+
id: generateEvidenceId(),
|
|
58
|
+
connectorId: this.id,
|
|
59
|
+
capabilityId: "cs-device-posture",
|
|
60
|
+
timestamp: now,
|
|
61
|
+
hash: hashEvidence({ deviceCount: deviceIds.length }),
|
|
62
|
+
framework: "SOC2",
|
|
63
|
+
controlId: "CC6.8",
|
|
64
|
+
source: "crowdstrike/devices",
|
|
65
|
+
status: deviceIds.length > 0 ? "compliant" : "non_compliant",
|
|
66
|
+
data: { deviceCount: deviceIds.length },
|
|
67
|
+
metadata: {},
|
|
68
|
+
});
|
|
69
|
+
const detections = await fetch("https://api.crowdstrike.com/detects/queries/detects/v1?limit=100&sort=created_timestamp|desc", { headers }).then((r) => r.json());
|
|
70
|
+
const detectionIds = (detections.resources || []);
|
|
71
|
+
artifacts.push({
|
|
72
|
+
id: generateEvidenceId(),
|
|
73
|
+
connectorId: this.id,
|
|
74
|
+
capabilityId: "cs-threat-detections",
|
|
75
|
+
timestamp: now,
|
|
76
|
+
hash: hashEvidence({ detectionCount: detectionIds.length }),
|
|
77
|
+
framework: "SOC2",
|
|
78
|
+
controlId: "CC7.2",
|
|
79
|
+
source: "crowdstrike/detects",
|
|
80
|
+
status: "unknown",
|
|
81
|
+
data: { detectionCount: detectionIds.length },
|
|
82
|
+
metadata: {},
|
|
83
|
+
});
|
|
84
|
+
return artifacts;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class CrowdStrikeFalconConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "crowdstrike-falcon";
|
|
4
|
+
readonly name = "CrowdStrike Falcon";
|
|
5
|
+
readonly category: "endpoint";
|
|
6
|
+
readonly authType: "oauth2";
|
|
7
|
+
readonly capabilities: IntegrationCapability[];
|
|
8
|
+
readonly frameworks: ComplianceFramework[];
|
|
9
|
+
private getAccessToken;
|
|
10
|
+
testConnection(config: ConnectorConfig): Promise<boolean>;
|
|
11
|
+
collectEvidence(config: ConnectorConfig): Promise<EvidenceArtifact[]>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "crowdstrike-falcon-endpoints",
|
|
5
|
+
name: "Falcon Endpoint Protection",
|
|
6
|
+
description: "Fetch CrowdStrike Falcon endpoint detection and prevention status",
|
|
7
|
+
evidenceCategories: ["endpoint_security", "posture_assessment"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "crowdstrike-falcon-incidents",
|
|
11
|
+
name: "Falcon Incidents",
|
|
12
|
+
description: "Fetch CrowdStrike Falcon incident detections and response actions",
|
|
13
|
+
evidenceCategories: ["vulnerability_management", "incident_management"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "crowdstrike-falcon-policies",
|
|
17
|
+
name: "Falcon Detection Policies",
|
|
18
|
+
description: "Fetch CrowdStrike Falcon detection policy configurations and tuning",
|
|
19
|
+
evidenceCategories: ["policy_compliance", "configuration"],
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
export class CrowdStrikeFalconConnector {
|
|
23
|
+
id = "crowdstrike-falcon";
|
|
24
|
+
name = "CrowdStrike Falcon";
|
|
25
|
+
category = "endpoint";
|
|
26
|
+
authType = "oauth2";
|
|
27
|
+
capabilities = capabilities;
|
|
28
|
+
frameworks = ["SOC2", "ISO27001", "NIST_CSF", "HIPAA", "PCI_DSS"];
|
|
29
|
+
async getAccessToken(config) {
|
|
30
|
+
const resp = await fetch("https://api.crowdstrike.com/oauth2/token", {
|
|
31
|
+
method: "POST",
|
|
32
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
33
|
+
body: new URLSearchParams({
|
|
34
|
+
client_id: config.clientId || "",
|
|
35
|
+
client_secret: config.clientSecret || "",
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
38
|
+
if (!resp.ok)
|
|
39
|
+
throw new Error(`CrowdStrike Falcon token ${resp.status}`);
|
|
40
|
+
const data = (await resp.json());
|
|
41
|
+
return data.access_token;
|
|
42
|
+
}
|
|
43
|
+
async testConnection(config) {
|
|
44
|
+
try {
|
|
45
|
+
const token = await this.getAccessToken(config);
|
|
46
|
+
const resp = await fetch("https://api.crowdstrike.com/devices/queries/devices/v1?limit=1", {
|
|
47
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
48
|
+
});
|
|
49
|
+
return resp.ok;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async collectEvidence(config) {
|
|
56
|
+
const artifacts = [];
|
|
57
|
+
const now = new Date().toISOString();
|
|
58
|
+
const token = await this.getAccessToken(config);
|
|
59
|
+
const headers = { Authorization: `Bearer ${token}` };
|
|
60
|
+
const devices = await fetch("https://api.crowdstrike.com/devices/queries/devices/v1?limit=100", { headers }).then((r) => r.json());
|
|
61
|
+
const deviceIds = (devices.resources || []);
|
|
62
|
+
artifacts.push({
|
|
63
|
+
id: generateEvidenceId(),
|
|
64
|
+
connectorId: this.id,
|
|
65
|
+
capabilityId: "crowdstrike-falcon-endpoints",
|
|
66
|
+
timestamp: now,
|
|
67
|
+
hash: hashEvidence({ deviceCount: deviceIds.length }),
|
|
68
|
+
framework: "SOC2",
|
|
69
|
+
controlId: "CC6.8",
|
|
70
|
+
source: "crowdstrike-falcon/devices",
|
|
71
|
+
status: deviceIds.length > 0 ? "compliant" : "non_compliant",
|
|
72
|
+
data: { deviceCount: deviceIds.length },
|
|
73
|
+
metadata: {},
|
|
74
|
+
});
|
|
75
|
+
const detections = await fetch("https://api.crowdstrike.com/detects/queries/detects/v1?limit=100", { headers }).then((r) => r.json()).catch(() => ({ resources: [] }));
|
|
76
|
+
const detectIds = (detections.resources || []);
|
|
77
|
+
artifacts.push({
|
|
78
|
+
id: generateEvidenceId(),
|
|
79
|
+
connectorId: this.id,
|
|
80
|
+
capabilityId: "crowdstrike-falcon-incidents",
|
|
81
|
+
timestamp: now,
|
|
82
|
+
hash: hashEvidence({ detectionCount: detectIds.length }),
|
|
83
|
+
framework: "ISO27001",
|
|
84
|
+
controlId: "A.12.2.1",
|
|
85
|
+
source: "crowdstrike-falcon/detections",
|
|
86
|
+
status: detectIds.length === 0 ? "compliant" : "non_compliant",
|
|
87
|
+
data: { openDetections: detectIds.length },
|
|
88
|
+
metadata: {},
|
|
89
|
+
});
|
|
90
|
+
return artifacts;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class CrowdStrikeSpotlightConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "crowdstrike_spotlight";
|
|
4
|
+
readonly name = "CrowdStrike Spotlight";
|
|
5
|
+
readonly category: "endpoint";
|
|
6
|
+
readonly authType: "oauth2";
|
|
7
|
+
readonly capabilities: IntegrationCapability[];
|
|
8
|
+
readonly frameworks: ComplianceFramework[];
|
|
9
|
+
private getToken;
|
|
10
|
+
testConnection(config: ConnectorConfig): Promise<boolean>;
|
|
11
|
+
collectEvidence(config: ConnectorConfig): Promise<EvidenceArtifact[]>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "cs-spotlight-vulns",
|
|
5
|
+
name: "Spotlight Vulnerabilities",
|
|
6
|
+
description: "Fetch CrowdSpotlight vulnerability findings with risk scores",
|
|
7
|
+
evidenceCategories: ["vulnerability_management", "threat_detection"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "cs-spotlight-cves",
|
|
11
|
+
name: "CVE Intelligence",
|
|
12
|
+
description: "Fetch CVE-based vulnerability intelligence and exploit status",
|
|
13
|
+
evidenceCategories: ["vulnerability_management", "threat_intelligence"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "cs-spotlight-remediations",
|
|
17
|
+
name: "Remediation Recommendations",
|
|
18
|
+
description: "Fetch CrowdStrike remediation guidance and prioritized fixes",
|
|
19
|
+
evidenceCategories: ["vulnerability_management", "change_management"],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "cs-spotlight-hosts",
|
|
23
|
+
name: "Affected Hosts",
|
|
24
|
+
description: "Fetch hosts affected by Spotlight vulnerabilities",
|
|
25
|
+
evidenceCategories: ["asset_management", "vulnerability_management"],
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
export class CrowdStrikeSpotlightConnector {
|
|
29
|
+
id = "crowdstrike_spotlight";
|
|
30
|
+
name = "CrowdStrike Spotlight";
|
|
31
|
+
category = "endpoint";
|
|
32
|
+
authType = "oauth2";
|
|
33
|
+
capabilities = capabilities;
|
|
34
|
+
frameworks = [
|
|
35
|
+
"SOC2",
|
|
36
|
+
"ISO27001",
|
|
37
|
+
"NIST_CSF",
|
|
38
|
+
"PCI_DSS",
|
|
39
|
+
];
|
|
40
|
+
async getToken(config) {
|
|
41
|
+
const base = config.baseUrl || "https://api.crowdstrike.com";
|
|
42
|
+
const resp = await fetch(`${base}/oauth2/token`, {
|
|
43
|
+
method: "POST",
|
|
44
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
45
|
+
body: new URLSearchParams({
|
|
46
|
+
client_id: config.clientId || "",
|
|
47
|
+
client_secret: config.clientSecret || "",
|
|
48
|
+
}),
|
|
49
|
+
});
|
|
50
|
+
const data = (await resp.json());
|
|
51
|
+
return data.access_token;
|
|
52
|
+
}
|
|
53
|
+
async testConnection(config) {
|
|
54
|
+
try {
|
|
55
|
+
const token = await this.getToken(config);
|
|
56
|
+
const base = config.baseUrl || "https://api.crowdstrike.com";
|
|
57
|
+
const resp = await fetch(`${base}/spotlight/queries/vulnerabilities/v1?limit=1`, {
|
|
58
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
59
|
+
});
|
|
60
|
+
return resp.ok;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async collectEvidence(config) {
|
|
67
|
+
const artifacts = [];
|
|
68
|
+
const now = new Date().toISOString();
|
|
69
|
+
const token = await this.getToken(config);
|
|
70
|
+
const base = config.baseUrl || "https://api.crowdstrike.com";
|
|
71
|
+
const headers = { Authorization: `Bearer ${token}` };
|
|
72
|
+
const vulnQuery = await fetch(`${base}/spotlight/queries/vulnerabilities/v1?limit=100&filter=severity:%27Critical%27+OR+severity:%27High%27`, { headers })
|
|
73
|
+
.then((r) => r.json())
|
|
74
|
+
.catch(() => ({ resources: [] }));
|
|
75
|
+
const vulnResources = Array.isArray(vulnQuery.resources) ? vulnQuery.resources : [];
|
|
76
|
+
artifacts.push({
|
|
77
|
+
id: generateEvidenceId(),
|
|
78
|
+
connectorId: this.id,
|
|
79
|
+
capabilityId: "cs-spotlight-vulns",
|
|
80
|
+
timestamp: now,
|
|
81
|
+
hash: hashEvidence(vulnQuery),
|
|
82
|
+
framework: "SOC2",
|
|
83
|
+
controlId: "CC6.6",
|
|
84
|
+
source: "crowdstrike/spotlight/vulnerabilities",
|
|
85
|
+
status: vulnResources.length === 0 ? "compliant" : "non_compliant",
|
|
86
|
+
data: { criticalHighVulns: vulnResources.length },
|
|
87
|
+
metadata: {},
|
|
88
|
+
});
|
|
89
|
+
const cveIntel = await fetch(`${base}/spotlight/queries/vulnerabilities/v1?limit=20&filter=cve.id:!%27%27`, { headers })
|
|
90
|
+
.then((r) => r.json())
|
|
91
|
+
.catch(() => ({ resources: [] }));
|
|
92
|
+
artifacts.push({
|
|
93
|
+
id: generateEvidenceId(),
|
|
94
|
+
connectorId: this.id,
|
|
95
|
+
capabilityId: "cs-spotlight-cves",
|
|
96
|
+
timestamp: now,
|
|
97
|
+
hash: hashEvidence(cveIntel),
|
|
98
|
+
framework: "NIST_CSF",
|
|
99
|
+
controlId: "ID.RA",
|
|
100
|
+
source: "crowdstrike/spotlight/cve-intel",
|
|
101
|
+
status: "compliant",
|
|
102
|
+
data: { cveFindings: Array.isArray(cveIntel.resources) ? cveIntel.resources.length : 0 },
|
|
103
|
+
metadata: {},
|
|
104
|
+
});
|
|
105
|
+
const remediations = await fetch(`${base}/spotlight/queries/vulnerabilities/v1?limit=50&filter=remediation.guidance:!%27%27`, { headers })
|
|
106
|
+
.then((r) => r.json())
|
|
107
|
+
.catch(() => ({ resources: [] }));
|
|
108
|
+
artifacts.push({
|
|
109
|
+
id: generateEvidenceId(),
|
|
110
|
+
connectorId: this.id,
|
|
111
|
+
capabilityId: "cs-spotlight-remediations",
|
|
112
|
+
timestamp: now,
|
|
113
|
+
hash: hashEvidence(remediations),
|
|
114
|
+
framework: "ISO27001",
|
|
115
|
+
controlId: "A.12.6.1",
|
|
116
|
+
source: "crowdstrike/spotlight/remediations",
|
|
117
|
+
status: "compliant",
|
|
118
|
+
data: { remediationsAvailable: Array.isArray(remediations.resources) ? remediations.resources.length : 0 },
|
|
119
|
+
metadata: {},
|
|
120
|
+
});
|
|
121
|
+
const affectedHosts = await fetch(`${base}/spotlight/queries/vulnerabilities/v1?limit=1&filter=host_info.hostname:!%27%27`, { headers })
|
|
122
|
+
.then((r) => r.json())
|
|
123
|
+
.catch(() => ({ resources: [] }));
|
|
124
|
+
artifacts.push({
|
|
125
|
+
id: generateEvidenceId(),
|
|
126
|
+
connectorId: this.id,
|
|
127
|
+
capabilityId: "cs-spotlight-hosts",
|
|
128
|
+
timestamp: now,
|
|
129
|
+
hash: hashEvidence(affectedHosts),
|
|
130
|
+
framework: "PCI_DSS",
|
|
131
|
+
controlId: "2.2.1",
|
|
132
|
+
source: "crowdstrike/spotlight/affected-hosts",
|
|
133
|
+
status: "compliant",
|
|
134
|
+
data: { hostsWithVulns: Array.isArray(affectedHosts.resources) ? affectedHosts.resources.length : 0 },
|
|
135
|
+
metadata: {},
|
|
136
|
+
});
|
|
137
|
+
return artifacts;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class CyberArkConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "cyberark";
|
|
4
|
+
readonly name = "CyberArk";
|
|
5
|
+
readonly category: "identity";
|
|
6
|
+
readonly authType: "api_key";
|
|
7
|
+
readonly capabilities: IntegrationCapability[];
|
|
8
|
+
readonly frameworks: ComplianceFramework[];
|
|
9
|
+
private fetchApi;
|
|
10
|
+
testConnection(config: ConnectorConfig): Promise<boolean>;
|
|
11
|
+
collectEvidence(config: ConnectorConfig): Promise<EvidenceArtifact[]>;
|
|
12
|
+
}
|