@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,129 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "circleci-pipelines",
|
|
5
|
+
name: "Pipeline Runs",
|
|
6
|
+
description: "Fetch CircleCI pipeline and workflow run history",
|
|
7
|
+
evidenceCategories: ["ci_cd", "monitoring"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "circleci-config",
|
|
11
|
+
name: "Pipeline Configuration",
|
|
12
|
+
description: "Fetch CircleCI pipeline configuration and orb usage",
|
|
13
|
+
evidenceCategories: ["ci_cd", "configuration"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "circleci-insights",
|
|
17
|
+
name: "Pipeline Insights",
|
|
18
|
+
description: "Fetch CircleCI pipeline performance and failure metrics",
|
|
19
|
+
evidenceCategories: ["monitoring", "change_management"],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "circleci-contexts",
|
|
23
|
+
name: "Contexts & Secrets",
|
|
24
|
+
description: "Fetch CircleCI context and environment variable configurations",
|
|
25
|
+
evidenceCategories: ["access_control", "data_protection"],
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
export class CircleCIConnector {
|
|
29
|
+
id = "circleci";
|
|
30
|
+
name = "CircleCI";
|
|
31
|
+
category = "ci_cd";
|
|
32
|
+
authType = "api_key";
|
|
33
|
+
capabilities = capabilities;
|
|
34
|
+
frameworks = [
|
|
35
|
+
"SOC2",
|
|
36
|
+
"ISO27001",
|
|
37
|
+
"NIST_CSF",
|
|
38
|
+
];
|
|
39
|
+
async fetchApi(config, endpoint) {
|
|
40
|
+
const base = config.baseUrl || "https://circleci.com/api/v2";
|
|
41
|
+
const resp = await fetch(`${base}${endpoint}`, {
|
|
42
|
+
headers: {
|
|
43
|
+
"Circle-Token": config.apiToken || "",
|
|
44
|
+
Accept: "application/json",
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
if (!resp.ok)
|
|
48
|
+
throw new Error(`CircleCI API ${resp.status}: ${resp.statusText}`);
|
|
49
|
+
return (await resp.json());
|
|
50
|
+
}
|
|
51
|
+
async testConnection(config) {
|
|
52
|
+
try {
|
|
53
|
+
await this.fetchApi(config, "/me");
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async collectEvidence(config) {
|
|
61
|
+
const artifacts = [];
|
|
62
|
+
const now = new Date().toISOString();
|
|
63
|
+
const projectSlug = config.extra?.projectSlug || "gh/default/project";
|
|
64
|
+
const pipelines = await this.fetchApi(config, `/project/${encodeURIComponent(projectSlug)}/pipeline?limit=10`).catch(() => ({ items: [] }));
|
|
65
|
+
const pipelineList = Array.isArray(pipelines.items) ? pipelines.items : [];
|
|
66
|
+
artifacts.push({
|
|
67
|
+
id: generateEvidenceId(),
|
|
68
|
+
connectorId: this.id,
|
|
69
|
+
capabilityId: "circleci-pipelines",
|
|
70
|
+
timestamp: now,
|
|
71
|
+
hash: hashEvidence({ count: pipelineList.length }),
|
|
72
|
+
framework: "SOC2",
|
|
73
|
+
controlId: "CC8.1",
|
|
74
|
+
source: `circleci/${projectSlug}/pipelines`,
|
|
75
|
+
status: pipelineList.length > 0 ? "compliant" : "partial",
|
|
76
|
+
data: { recentPipelines: pipelineList.length },
|
|
77
|
+
metadata: { projectSlug },
|
|
78
|
+
});
|
|
79
|
+
const configData = await this.fetchApi(config, `/project/${encodeURIComponent(projectSlug)}/config`).catch(() => ({ output: "" }));
|
|
80
|
+
artifacts.push({
|
|
81
|
+
id: generateEvidenceId(),
|
|
82
|
+
connectorId: this.id,
|
|
83
|
+
capabilityId: "circleci-config",
|
|
84
|
+
timestamp: now,
|
|
85
|
+
hash: hashEvidence({ hasConfig: !!configData.output }),
|
|
86
|
+
framework: "ISO27001",
|
|
87
|
+
controlId: "A.12.1.1",
|
|
88
|
+
source: `circleci/${projectSlug}/config`,
|
|
89
|
+
status: configData.output ? "compliant" : "partial",
|
|
90
|
+
data: { hasConfig: !!configData.output },
|
|
91
|
+
metadata: { projectSlug },
|
|
92
|
+
});
|
|
93
|
+
const insights = await this.fetchApi(config, `/insights/${encodeURIComponent(projectSlug)}/workflows?limit=10`).catch(() => ({ items: [] }));
|
|
94
|
+
const insightList = Array.isArray(insights.items) ? insights.items : [];
|
|
95
|
+
const failedWorkflows = insightList.filter((w) => w.status === "failed");
|
|
96
|
+
artifacts.push({
|
|
97
|
+
id: generateEvidenceId(),
|
|
98
|
+
connectorId: this.id,
|
|
99
|
+
capabilityId: "circleci-insights",
|
|
100
|
+
timestamp: now,
|
|
101
|
+
hash: hashEvidence({ total: insightList.length, failed: failedWorkflows.length }),
|
|
102
|
+
framework: "NIST_CSF",
|
|
103
|
+
controlId: "DE.CM",
|
|
104
|
+
source: `circleci/${projectSlug}/insights`,
|
|
105
|
+
status: failedWorkflows.length === 0 ? "compliant" : "partial",
|
|
106
|
+
data: {
|
|
107
|
+
recentWorkflows: insightList.length,
|
|
108
|
+
failedWorkflows: failedWorkflows.length,
|
|
109
|
+
},
|
|
110
|
+
metadata: { projectSlug },
|
|
111
|
+
});
|
|
112
|
+
const contexts = await this.fetchApi(config, "/context").catch(() => ({ items: [] }));
|
|
113
|
+
const contextList = Array.isArray(contexts.items) ? contexts.items : [];
|
|
114
|
+
artifacts.push({
|
|
115
|
+
id: generateEvidenceId(),
|
|
116
|
+
connectorId: this.id,
|
|
117
|
+
capabilityId: "circleci-contexts",
|
|
118
|
+
timestamp: now,
|
|
119
|
+
hash: hashEvidence({ count: contextList.length }),
|
|
120
|
+
framework: "SOC2",
|
|
121
|
+
controlId: "CC6.1",
|
|
122
|
+
source: `circleci/${projectSlug}/contexts`,
|
|
123
|
+
status: contextList.length > 0 ? "compliant" : "partial",
|
|
124
|
+
data: { contextCount: contextList.length },
|
|
125
|
+
metadata: { projectSlug },
|
|
126
|
+
});
|
|
127
|
+
return artifacts;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class CircleCIConnectorsConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "circleci-connectors";
|
|
4
|
+
readonly name = "CircleCI (Connectors)";
|
|
5
|
+
readonly category: "ci_cd";
|
|
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: "circleci-pipelines",
|
|
5
|
+
name: "CI Pipelines",
|
|
6
|
+
description: "Fetch CircleCI pipeline configurations and workflow execution history",
|
|
7
|
+
evidenceCategories: ["ci_cd", "change_management"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "circleci-environments",
|
|
11
|
+
name: "Environment Variables",
|
|
12
|
+
description: "Fetch CircleCI environment variable groups and context assignments",
|
|
13
|
+
evidenceCategories: ["secret_management", "configuration"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "circleci-insights",
|
|
17
|
+
name: "Pipeline Insights",
|
|
18
|
+
description: "Fetch CircleCI workflow duration metrics and failure rate analytics",
|
|
19
|
+
evidenceCategories: ["monitoring", "performance"],
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
export class CircleCIConnectorsConnector {
|
|
23
|
+
id = "circleci-connectors";
|
|
24
|
+
name = "CircleCI (Connectors)";
|
|
25
|
+
category = "ci_cd";
|
|
26
|
+
authType = "api_key";
|
|
27
|
+
capabilities = capabilities;
|
|
28
|
+
frameworks = ["SOC2", "ISO27001", "NIST_CSF"];
|
|
29
|
+
async fetchApi(config, endpoint) {
|
|
30
|
+
const base = config.baseUrl || "https://circleci.com/api/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(`CircleCI API ${resp.status}: ${resp.statusText}`);
|
|
39
|
+
return (await resp.json());
|
|
40
|
+
}
|
|
41
|
+
async testConnection(config) {
|
|
42
|
+
try {
|
|
43
|
+
await this.fetchApi(config, "/me");
|
|
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 me = await this.fetchApi(config, "/me").catch(() => ({}));
|
|
54
|
+
artifacts.push({
|
|
55
|
+
id: generateEvidenceId(),
|
|
56
|
+
connectorId: this.id,
|
|
57
|
+
capabilityId: "circleci-pipelines",
|
|
58
|
+
timestamp: now,
|
|
59
|
+
hash: hashEvidence(me),
|
|
60
|
+
framework: "SOC2",
|
|
61
|
+
controlId: "CC8.1",
|
|
62
|
+
source: "circleci-connectors/me",
|
|
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 CiscoUmbrellaConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "cisco-umbrella";
|
|
4
|
+
readonly name = "Cisco Umbrella";
|
|
5
|
+
readonly category: "cloud_provider";
|
|
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,96 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "umbrella-dns",
|
|
5
|
+
name: "DNS Security",
|
|
6
|
+
description: "Fetch DNS-layer security policies and block lists",
|
|
7
|
+
evidenceCategories: ["access_control", "vulnerability_management"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "umbrella-sig",
|
|
11
|
+
name: "Secure Internet Gateway",
|
|
12
|
+
description: "Fetch SIG proxy and URL filtering policies",
|
|
13
|
+
evidenceCategories: ["access_control", "data_protection"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "umbrella-dga",
|
|
17
|
+
name: "DGA Detection",
|
|
18
|
+
description: "Fetch domain generation algorithm detection alerts",
|
|
19
|
+
evidenceCategories: ["vulnerability_management", "monitoring"],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "umbrella-roaming",
|
|
23
|
+
name: "Roaming Security",
|
|
24
|
+
description: "Fetch roaming client compliance and coverage",
|
|
25
|
+
evidenceCategories: ["endpoint", "access_control"],
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
export class CiscoUmbrellaConnector {
|
|
29
|
+
id = "cisco-umbrella";
|
|
30
|
+
name = "Cisco Umbrella";
|
|
31
|
+
category = "cloud_provider";
|
|
32
|
+
authType = "api_key";
|
|
33
|
+
capabilities = capabilities;
|
|
34
|
+
frameworks = [
|
|
35
|
+
"SOC2",
|
|
36
|
+
"ISO27001",
|
|
37
|
+
"NIST_CSF",
|
|
38
|
+
"PCI_DSS",
|
|
39
|
+
"HIPAA",
|
|
40
|
+
];
|
|
41
|
+
async fetchApi(config, endpoint) {
|
|
42
|
+
const base = config.baseUrl || "https://api Umbrella.com";
|
|
43
|
+
const resp = await fetch(`${base}${endpoint}`, {
|
|
44
|
+
headers: {
|
|
45
|
+
Authorization: `Bearer ${config.apiToken}`,
|
|
46
|
+
"Content-Type": "application/json",
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
if (!resp.ok)
|
|
50
|
+
throw new Error(`Cisco Umbrella API ${resp.status}: ${resp.statusText}`);
|
|
51
|
+
return (await resp.json());
|
|
52
|
+
}
|
|
53
|
+
async testConnection(config) {
|
|
54
|
+
try {
|
|
55
|
+
await this.fetchApi(config, "/deployments/org");
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async collectEvidence(config) {
|
|
63
|
+
const artifacts = [];
|
|
64
|
+
const now = new Date().toISOString();
|
|
65
|
+
const orgId = config.extra?.orgId || "default";
|
|
66
|
+
const policies = await this.fetchApi(config, `/policies/v2/policies?orgId=${orgId}`).catch(() => ({ data: [] }));
|
|
67
|
+
artifacts.push({
|
|
68
|
+
id: generateEvidenceId(),
|
|
69
|
+
connectorId: this.id,
|
|
70
|
+
capabilityId: "umbrella-dns",
|
|
71
|
+
timestamp: now,
|
|
72
|
+
hash: hashEvidence(policies),
|
|
73
|
+
framework: "SOC2",
|
|
74
|
+
controlId: "CC6.1",
|
|
75
|
+
source: `umbrella/${orgId}/policies`,
|
|
76
|
+
status: policies.data?.length > 0 ? "compliant" : "unknown",
|
|
77
|
+
data: { policyCount: policies.data?.length || 0 },
|
|
78
|
+
metadata: { orgId },
|
|
79
|
+
});
|
|
80
|
+
const destinations = await this.fetchApi(config, `/deployments/v2/destinations?orgId=${orgId}`).catch(() => ({ data: [] }));
|
|
81
|
+
artifacts.push({
|
|
82
|
+
id: generateEvidenceId(),
|
|
83
|
+
connectorId: this.id,
|
|
84
|
+
capabilityId: "umbrella-roaming",
|
|
85
|
+
timestamp: now,
|
|
86
|
+
hash: hashEvidence(destinations),
|
|
87
|
+
framework: "ISO27001",
|
|
88
|
+
controlId: "A.6.2.1",
|
|
89
|
+
source: `umbrella/${orgId}/destinations`,
|
|
90
|
+
status: "partial",
|
|
91
|
+
data: { destinations: destinations.data?.length || 0 },
|
|
92
|
+
metadata: { orgId },
|
|
93
|
+
});
|
|
94
|
+
return artifacts;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class CloudBeesJenkinsConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "cloudbees-jenkins";
|
|
4
|
+
readonly name = "CloudBees Jenkins";
|
|
5
|
+
readonly category: "ci_cd";
|
|
6
|
+
readonly authType: "bearer_token";
|
|
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: "cloudbees-jenkins-jobs",
|
|
5
|
+
name: "Jenkins Jobs",
|
|
6
|
+
description: "Fetch CloudBees Jenkins job configurations and build history",
|
|
7
|
+
evidenceCategories: ["ci_cd", "change_management"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "cloudbees-jenkins-agents",
|
|
11
|
+
name: "Jenkins Agents",
|
|
12
|
+
description: "Fetch Jenkins agent configurations and connection status",
|
|
13
|
+
evidenceCategories: ["infrastructure", "monitoring"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "cloudbees-jenkins-security",
|
|
17
|
+
name: "Jenkins Security",
|
|
18
|
+
description: "Fetch Jenkins security realm configurations and credential scopes",
|
|
19
|
+
evidenceCategories: ["access_control", "secret_management"],
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
export class CloudBeesJenkinsConnector {
|
|
23
|
+
id = "cloudbees-jenkins";
|
|
24
|
+
name = "CloudBees Jenkins";
|
|
25
|
+
category = "ci_cd";
|
|
26
|
+
authType = "bearer_token";
|
|
27
|
+
capabilities = capabilities;
|
|
28
|
+
frameworks = ["SOC2", "ISO27001", "NIST_CSF"];
|
|
29
|
+
async fetchApi(config, endpoint) {
|
|
30
|
+
const base = config.baseUrl || "https://jenkins.example.com";
|
|
31
|
+
const resp = await fetch(`${base}/api/json${endpoint}`, {
|
|
32
|
+
headers: {
|
|
33
|
+
Authorization: `Bearer ${config.apiToken}`,
|
|
34
|
+
"Content-Type": "application/json",
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
if (!resp.ok)
|
|
38
|
+
throw new Error(`Jenkins API ${resp.status}: ${resp.statusText}`);
|
|
39
|
+
return (await resp.json());
|
|
40
|
+
}
|
|
41
|
+
async testConnection(config) {
|
|
42
|
+
try {
|
|
43
|
+
await this.fetchApi(config, "?tree=name");
|
|
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 jobs = await this.fetchApi(config, "?tree=jobs[name,url]{0,100}").catch(() => ({ jobs: [] }));
|
|
54
|
+
const jobList = (jobs.jobs || []);
|
|
55
|
+
artifacts.push({
|
|
56
|
+
id: generateEvidenceId(),
|
|
57
|
+
connectorId: this.id,
|
|
58
|
+
capabilityId: "cloudbees-jenkins-jobs",
|
|
59
|
+
timestamp: now,
|
|
60
|
+
hash: hashEvidence({ jobCount: jobList.length }),
|
|
61
|
+
framework: "SOC2",
|
|
62
|
+
controlId: "CC8.1",
|
|
63
|
+
source: "cloudbees-jenkins/jobs",
|
|
64
|
+
status: "unknown",
|
|
65
|
+
data: { jobCount: jobList.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 CloudflareDNSConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "cloudflare-dns";
|
|
4
|
+
readonly name = "Cloudflare DNS";
|
|
5
|
+
readonly category: "infrastructure";
|
|
6
|
+
readonly authType: "bearer_token";
|
|
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,71 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "cloudflare-dns",
|
|
5
|
+
name: "DNS Configurations",
|
|
6
|
+
description: "Fetch Cloudflare DNS zone configurations and record counts",
|
|
7
|
+
evidenceCategories: ["network_security", "configuration"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "cloudflare-ssl",
|
|
11
|
+
name: "SSL/TLS Settings",
|
|
12
|
+
description: "Fetch Cloudflare SSL/TLS mode, HSTS, and certificate status",
|
|
13
|
+
evidenceCategories: ["encryption", "configuration"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "cloudflare-analytics",
|
|
17
|
+
name: "Traffic Analytics",
|
|
18
|
+
description: "Fetch Cloudflare traffic statistics and threat detection metrics",
|
|
19
|
+
evidenceCategories: ["monitoring", "network_security"],
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
export class CloudflareDNSConnector {
|
|
23
|
+
id = "cloudflare-dns";
|
|
24
|
+
name = "Cloudflare DNS";
|
|
25
|
+
category = "infrastructure";
|
|
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.cloudflare.com/client/v4";
|
|
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(`Cloudflare API ${resp.status}: ${resp.statusText}`);
|
|
39
|
+
return (await resp.json());
|
|
40
|
+
}
|
|
41
|
+
async testConnection(config) {
|
|
42
|
+
try {
|
|
43
|
+
await this.fetchApi(config, "/user/tokens/verify");
|
|
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 zoneId = config.extra?.zoneId || "default";
|
|
54
|
+
const zone = await this.fetchApi(config, `/zones/${zoneId}`).catch(() => ({ result: {} }));
|
|
55
|
+
const result = zone.result;
|
|
56
|
+
artifacts.push({
|
|
57
|
+
id: generateEvidenceId(),
|
|
58
|
+
connectorId: this.id,
|
|
59
|
+
capabilityId: "cloudflare-dns",
|
|
60
|
+
timestamp: now,
|
|
61
|
+
hash: hashEvidence(result),
|
|
62
|
+
framework: "SOC2",
|
|
63
|
+
controlId: "CC6.1",
|
|
64
|
+
source: "cloudflare-dns/zone",
|
|
65
|
+
status: "unknown",
|
|
66
|
+
data: { zoneName: result.name },
|
|
67
|
+
metadata: { zoneId },
|
|
68
|
+
});
|
|
69
|
+
return artifacts;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class CloudflareWAFConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "cloudflare-waf";
|
|
4
|
+
readonly name = "Cloudflare WAF";
|
|
5
|
+
readonly category: "cloud_provider";
|
|
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,98 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "cloudflare-waf-rules",
|
|
5
|
+
name: "WAF Rules",
|
|
6
|
+
description: "Fetch managed and custom WAF rule configurations",
|
|
7
|
+
evidenceCategories: ["vulnerability_management", "configuration"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "cloudflare-firewall",
|
|
11
|
+
name: "Firewall Rules",
|
|
12
|
+
description: "Fetch firewall rules and IP access lists",
|
|
13
|
+
evidenceCategories: ["access_control", "configuration"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "cloudflare-ddos",
|
|
17
|
+
name: "DDoS Protection",
|
|
18
|
+
description: "Fetch DDoS mitigation settings and attack analytics",
|
|
19
|
+
evidenceCategories: ["vulnerability_management", "monitoring"],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "cloudflare-ssl",
|
|
23
|
+
name: "SSL/TLS Configuration",
|
|
24
|
+
description: "Fetch SSL/TLS mode and certificate status",
|
|
25
|
+
evidenceCategories: ["data_protection", "configuration"],
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
export class CloudflareWAFConnector {
|
|
29
|
+
id = "cloudflare-waf";
|
|
30
|
+
name = "Cloudflare WAF";
|
|
31
|
+
category = "cloud_provider";
|
|
32
|
+
authType = "api_key";
|
|
33
|
+
capabilities = capabilities;
|
|
34
|
+
frameworks = [
|
|
35
|
+
"SOC2",
|
|
36
|
+
"ISO27001",
|
|
37
|
+
"NIST_CSF",
|
|
38
|
+
"PCI_DSS",
|
|
39
|
+
];
|
|
40
|
+
async fetchApi(config, endpoint) {
|
|
41
|
+
const base = config.baseUrl || "https://api.cloudflare.com";
|
|
42
|
+
const zoneId = config.extra?.zoneId || "default";
|
|
43
|
+
const resp = await fetch(`${base}/client/v4/zones/${zoneId}${endpoint}`, {
|
|
44
|
+
headers: {
|
|
45
|
+
Authorization: `Bearer ${config.apiToken}`,
|
|
46
|
+
"Content-Type": "application/json",
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
if (!resp.ok)
|
|
50
|
+
throw new Error(`Cloudflare API ${resp.status}: ${resp.statusText}`);
|
|
51
|
+
return (await resp.json());
|
|
52
|
+
}
|
|
53
|
+
async testConnection(config) {
|
|
54
|
+
try {
|
|
55
|
+
await this.fetchApi(config, "");
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async collectEvidence(config) {
|
|
63
|
+
const artifacts = [];
|
|
64
|
+
const now = new Date().toISOString();
|
|
65
|
+
const zoneId = config.extra?.zoneId || "default";
|
|
66
|
+
const rules = await this.fetchApi(config, "/firewall/rules").catch(() => ({ result: [] }));
|
|
67
|
+
artifacts.push({
|
|
68
|
+
id: generateEvidenceId(),
|
|
69
|
+
connectorId: this.id,
|
|
70
|
+
capabilityId: "cloudflare-waf-rules",
|
|
71
|
+
timestamp: now,
|
|
72
|
+
hash: hashEvidence(rules),
|
|
73
|
+
framework: "SOC2",
|
|
74
|
+
controlId: "CC6.1",
|
|
75
|
+
source: `cloudflare/${zoneId}/firewall-rules`,
|
|
76
|
+
status: rules.result?.length > 0 ? "compliant" : "unknown",
|
|
77
|
+
data: { firewallRules: rules.result?.length || 0 },
|
|
78
|
+
metadata: { zoneId },
|
|
79
|
+
});
|
|
80
|
+
const ssl = await this.fetchApi(config, "/settings/ssl").catch(() => ({ result: { value: "off" } }));
|
|
81
|
+
const sslResult = ssl;
|
|
82
|
+
const sslVal = sslResult.result?.value ?? "unknown";
|
|
83
|
+
artifacts.push({
|
|
84
|
+
id: generateEvidenceId(),
|
|
85
|
+
connectorId: this.id,
|
|
86
|
+
capabilityId: "cloudflare-ssl",
|
|
87
|
+
timestamp: now,
|
|
88
|
+
hash: hashEvidence(ssl),
|
|
89
|
+
framework: "PCI_DSS",
|
|
90
|
+
controlId: "4.1",
|
|
91
|
+
source: `cloudflare/${zoneId}/ssl`,
|
|
92
|
+
status: sslVal !== "off" ? "compliant" : "non_compliant",
|
|
93
|
+
data: { sslMode: sslVal },
|
|
94
|
+
metadata: { zoneId },
|
|
95
|
+
});
|
|
96
|
+
return artifacts;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class ConfluenceConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "confluence";
|
|
4
|
+
readonly name = "Confluence";
|
|
5
|
+
readonly category: "documentation";
|
|
6
|
+
readonly authType: "bearer_token";
|
|
7
|
+
readonly capabilities: IntegrationCapability[];
|
|
8
|
+
readonly frameworks: ComplianceFramework[];
|
|
9
|
+
private fetchApi;
|
|
10
|
+
testConnection(config: ConnectorConfig): Promise<boolean>;
|
|
11
|
+
collectEvidence(config: ConnectorConfig): Promise<EvidenceArtifact[]>;
|
|
12
|
+
}
|