@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,135 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "gh-repo-settings",
|
|
5
|
+
name: "Repository Settings",
|
|
6
|
+
description: "Fetch repo visibility, default branch, and security settings",
|
|
7
|
+
evidenceCategories: ["access_control", "configuration"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "gh-branch-protection",
|
|
11
|
+
name: "Branch Protection Rules",
|
|
12
|
+
description: "Fetch branch protection policies and required reviews",
|
|
13
|
+
evidenceCategories: ["access_control", "change_management"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "gh-secret-scanning",
|
|
17
|
+
name: "Secret Scanning",
|
|
18
|
+
description: "Fetch secret scanning alerts and push protection status",
|
|
19
|
+
evidenceCategories: ["data_protection", "vulnerability_management"],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "gh-dependabot",
|
|
23
|
+
name: "Dependabot Alerts",
|
|
24
|
+
description: "Fetch dependency vulnerability alerts and auto-fix PRs",
|
|
25
|
+
evidenceCategories: ["vulnerability_management", "supply_chain"],
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
export class GitHubConnector {
|
|
29
|
+
id = "github";
|
|
30
|
+
name = "GitHub";
|
|
31
|
+
category = "version_control";
|
|
32
|
+
authType = "bearer_token";
|
|
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.github.com";
|
|
42
|
+
const resp = await fetch(`${base}${endpoint}`, {
|
|
43
|
+
headers: {
|
|
44
|
+
Authorization: `Bearer ${config.apiToken}`,
|
|
45
|
+
Accept: "application/vnd.github+json",
|
|
46
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
if (!resp.ok)
|
|
50
|
+
throw new Error(`GitHub API ${resp.status}: ${resp.statusText}`);
|
|
51
|
+
return (await resp.json());
|
|
52
|
+
}
|
|
53
|
+
async testConnection(config) {
|
|
54
|
+
try {
|
|
55
|
+
await this.fetchApi(config, "/user");
|
|
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 org = config.extra?.org || "default";
|
|
66
|
+
const repo = config.extra?.repo || "main-repo";
|
|
67
|
+
const repoData = await this.fetchApi(config, `/repos/${org}/${repo}`);
|
|
68
|
+
artifacts.push({
|
|
69
|
+
id: generateEvidenceId(),
|
|
70
|
+
connectorId: this.id,
|
|
71
|
+
capabilityId: "gh-repo-settings",
|
|
72
|
+
timestamp: now,
|
|
73
|
+
hash: hashEvidence(repoData),
|
|
74
|
+
framework: "SOC2",
|
|
75
|
+
controlId: "CC6.1",
|
|
76
|
+
source: `github.com/${org}/${repo}`,
|
|
77
|
+
status: repoData.private === true ? "compliant" : "partial",
|
|
78
|
+
data: {
|
|
79
|
+
private: repoData.private,
|
|
80
|
+
defaultBranch: repoData.default_branch,
|
|
81
|
+
hasSecurityPolicy: repoData.security_policy_url != null,
|
|
82
|
+
hasVulnerabilityAlerts: repoData.security_and_analysis != null,
|
|
83
|
+
},
|
|
84
|
+
metadata: { org, repo },
|
|
85
|
+
});
|
|
86
|
+
const protection = await this.fetchApi(config, `/repos/${org}/${repo}/branches/main/protection`).catch(() => null);
|
|
87
|
+
if (protection) {
|
|
88
|
+
artifacts.push({
|
|
89
|
+
id: generateEvidenceId(),
|
|
90
|
+
connectorId: this.id,
|
|
91
|
+
capabilityId: "gh-branch-protection",
|
|
92
|
+
timestamp: now,
|
|
93
|
+
hash: hashEvidence(protection),
|
|
94
|
+
framework: "SOC2",
|
|
95
|
+
controlId: "CC8.1",
|
|
96
|
+
source: `github.com/${org}/${repo}/branches/main/protection`,
|
|
97
|
+
status: "compliant",
|
|
98
|
+
data: {
|
|
99
|
+
requiredPullRequestReviews: protection.required_pull_request_reviews || null,
|
|
100
|
+
enforceAdmins: protection.enforce_admins || null,
|
|
101
|
+
},
|
|
102
|
+
metadata: { org, repo },
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
const secretScanning = await this.fetchApi(config, `/repos/${org}/${repo}/secret-scanning/alerts?state=open&per_page=10`).catch(() => ({ total_count: 0 }));
|
|
106
|
+
artifacts.push({
|
|
107
|
+
id: generateEvidenceId(),
|
|
108
|
+
connectorId: this.id,
|
|
109
|
+
capabilityId: "gh-secret-scanning",
|
|
110
|
+
timestamp: now,
|
|
111
|
+
hash: hashEvidence(secretScanning),
|
|
112
|
+
framework: "SOC2",
|
|
113
|
+
controlId: "CC6.6",
|
|
114
|
+
source: `github.com/${org}/${repo}/secret-scanning`,
|
|
115
|
+
status: secretScanning.total_count === 0 ? "compliant" : "non_compliant",
|
|
116
|
+
data: { openAlerts: secretScanning.total_count },
|
|
117
|
+
metadata: { org, repo },
|
|
118
|
+
});
|
|
119
|
+
const dependabot = await this.fetchApi(config, `/repos/${org}/${repo}/vulnerability-alerts`).catch(() => ({ enabled: false }));
|
|
120
|
+
artifacts.push({
|
|
121
|
+
id: generateEvidenceId(),
|
|
122
|
+
connectorId: this.id,
|
|
123
|
+
capabilityId: "gh-dependabot",
|
|
124
|
+
timestamp: now,
|
|
125
|
+
hash: hashEvidence(dependabot),
|
|
126
|
+
framework: "ISO27001",
|
|
127
|
+
controlId: "A.12.6.1",
|
|
128
|
+
source: `github.com/${org}/${repo}/dependabot`,
|
|
129
|
+
status: dependabot.enabled === true ? "compliant" : "non_compliant",
|
|
130
|
+
data: { enabled: dependabot.enabled },
|
|
131
|
+
metadata: { org, repo },
|
|
132
|
+
});
|
|
133
|
+
return artifacts;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class GitHubCopilotConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "github-copilot";
|
|
4
|
+
readonly name = "GitHub Copilot";
|
|
5
|
+
readonly category: "version_control";
|
|
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,72 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "github-copilot-usage",
|
|
5
|
+
name: "Copilot Usage",
|
|
6
|
+
description: "Fetch GitHub Copilot usage statistics and acceptance rates",
|
|
7
|
+
evidenceCategories: ["monitoring", "configuration"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "github-copilot-policies",
|
|
11
|
+
name: "Copilot Policies",
|
|
12
|
+
description: "Fetch GitHub Copilot content exclusions and organization policies",
|
|
13
|
+
evidenceCategories: ["access_control", "data_protection"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "github-copilot-security",
|
|
17
|
+
name: "Code Suggestions Audit",
|
|
18
|
+
description: "Fetch audit events for Copilot code suggestion acceptances and blocks",
|
|
19
|
+
evidenceCategories: ["audit", "data_protection"],
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
export class GitHubCopilotConnector {
|
|
23
|
+
id = "github-copilot";
|
|
24
|
+
name = "GitHub Copilot";
|
|
25
|
+
category = "version_control";
|
|
26
|
+
authType = "bearer_token";
|
|
27
|
+
capabilities = capabilities;
|
|
28
|
+
frameworks = ["SOC2", "ISO27001"];
|
|
29
|
+
async fetchApi(config, endpoint) {
|
|
30
|
+
const base = config.baseUrl || "https://api.github.com";
|
|
31
|
+
const resp = await fetch(`${base}${endpoint}`, {
|
|
32
|
+
headers: {
|
|
33
|
+
Authorization: `Bearer ${config.apiToken}`,
|
|
34
|
+
Accept: "application/vnd.github+json",
|
|
35
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
if (!resp.ok)
|
|
39
|
+
throw new Error(`GitHub Copilot API ${resp.status}: ${resp.statusText}`);
|
|
40
|
+
return (await resp.json());
|
|
41
|
+
}
|
|
42
|
+
async testConnection(config) {
|
|
43
|
+
try {
|
|
44
|
+
const org = config.extra?.org || "default";
|
|
45
|
+
await this.fetchApi(config, `/orgs/${org}/copilot/usage`);
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async collectEvidence(config) {
|
|
53
|
+
const artifacts = [];
|
|
54
|
+
const now = new Date().toISOString();
|
|
55
|
+
const org = config.extra?.org || "default";
|
|
56
|
+
const usage = await this.fetchApi(config, `/orgs/${org}/copilot/usage`).catch(() => ({}));
|
|
57
|
+
artifacts.push({
|
|
58
|
+
id: generateEvidenceId(),
|
|
59
|
+
connectorId: this.id,
|
|
60
|
+
capabilityId: "github-copilot-usage",
|
|
61
|
+
timestamp: now,
|
|
62
|
+
hash: hashEvidence(usage),
|
|
63
|
+
framework: "SOC2",
|
|
64
|
+
controlId: "CC6.1",
|
|
65
|
+
source: "github-copilot/usage",
|
|
66
|
+
status: "unknown",
|
|
67
|
+
data: { connected: true },
|
|
68
|
+
metadata: { org },
|
|
69
|
+
});
|
|
70
|
+
return artifacts;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class GitLabCIConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "gitlab-ci";
|
|
4
|
+
readonly name = "GitLab CI/CD";
|
|
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,71 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "gitlabci-pipelines",
|
|
5
|
+
name: "CI Pipelines",
|
|
6
|
+
description: "Fetch GitLab CI/CD pipeline definitions, stages, and run history",
|
|
7
|
+
evidenceCategories: ["ci_cd", "change_management"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "gitlabci-artifacts",
|
|
11
|
+
name: "Build Artifacts",
|
|
12
|
+
description: "Fetch pipeline artifact configurations and retention policies",
|
|
13
|
+
evidenceCategories: ["data_protection", "configuration"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "gitlabci-secrets",
|
|
17
|
+
name: "CI/CD Variables",
|
|
18
|
+
description: "Fetch protected variables and secret management in pipelines",
|
|
19
|
+
evidenceCategories: ["secret_management", "access_control"],
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
export class GitLabCIConnector {
|
|
23
|
+
id = "gitlab-ci";
|
|
24
|
+
name = "GitLab CI/CD";
|
|
25
|
+
category = "ci_cd";
|
|
26
|
+
authType = "bearer_token";
|
|
27
|
+
capabilities = capabilities;
|
|
28
|
+
frameworks = ["SOC2", "ISO27001", "NIST_CSF"];
|
|
29
|
+
async fetchApi(config, endpoint) {
|
|
30
|
+
const project = config.extra?.project || "default%2Fproject";
|
|
31
|
+
const base = config.baseUrl || "https://gitlab.com/api/v4";
|
|
32
|
+
const resp = await fetch(`${base}/projects/${project}${endpoint}`, {
|
|
33
|
+
headers: {
|
|
34
|
+
Authorization: `Bearer ${config.apiToken}`,
|
|
35
|
+
"Content-Type": "application/json",
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
if (!resp.ok)
|
|
39
|
+
throw new Error(`GitLab CI API ${resp.status}: ${resp.statusText}`);
|
|
40
|
+
return (await resp.json());
|
|
41
|
+
}
|
|
42
|
+
async testConnection(config) {
|
|
43
|
+
try {
|
|
44
|
+
await this.fetchApi(config, "");
|
|
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 pipelines = await this.fetchApi(config, "/pipelines?per_page=100").catch(() => []);
|
|
55
|
+
const pipelineList = Array.isArray(pipelines) ? pipelines : [];
|
|
56
|
+
artifacts.push({
|
|
57
|
+
id: generateEvidenceId(),
|
|
58
|
+
connectorId: this.id,
|
|
59
|
+
capabilityId: "gitlabci-pipelines",
|
|
60
|
+
timestamp: now,
|
|
61
|
+
hash: hashEvidence({ pipelineCount: pipelineList.length }),
|
|
62
|
+
framework: "SOC2",
|
|
63
|
+
controlId: "CC8.1",
|
|
64
|
+
source: "gitlab-ci/pipelines",
|
|
65
|
+
status: "unknown",
|
|
66
|
+
data: { pipelineCount: pipelineList.length },
|
|
67
|
+
metadata: {},
|
|
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 GitLabConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "gitlab";
|
|
4
|
+
readonly name = "GitLab";
|
|
5
|
+
readonly category: "version_control";
|
|
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,101 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "gl-project-settings",
|
|
5
|
+
name: "Project Settings",
|
|
6
|
+
description: "Fetch project visibility, push rules, and container protection",
|
|
7
|
+
evidenceCategories: ["access_control", "configuration"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "gl-mr-approvals",
|
|
11
|
+
name: "Merge Request Approvals",
|
|
12
|
+
description: "Fetch MR approval rules and required reviewers",
|
|
13
|
+
evidenceCategories: ["change_management"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "gl-sast-results",
|
|
17
|
+
name: "SAST Results",
|
|
18
|
+
description: "Fetch Static Application Security Testing results",
|
|
19
|
+
evidenceCategories: ["vulnerability_management", "application_security"],
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
export class GitLabConnector {
|
|
23
|
+
id = "gitlab";
|
|
24
|
+
name = "GitLab";
|
|
25
|
+
category = "version_control";
|
|
26
|
+
authType = "bearer_token";
|
|
27
|
+
capabilities = capabilities;
|
|
28
|
+
frameworks = ["SOC2", "ISO27001", "NIST_CSF"];
|
|
29
|
+
async fetchApi(config, endpoint) {
|
|
30
|
+
const base = config.baseUrl || "https://gitlab.com/api/v4";
|
|
31
|
+
const resp = await fetch(`${base}${endpoint}`, {
|
|
32
|
+
headers: { Authorization: `Bearer ${config.apiToken}` },
|
|
33
|
+
});
|
|
34
|
+
if (!resp.ok)
|
|
35
|
+
throw new Error(`GitLab API ${resp.status}: ${resp.statusText}`);
|
|
36
|
+
return (await resp.json());
|
|
37
|
+
}
|
|
38
|
+
async testConnection(config) {
|
|
39
|
+
try {
|
|
40
|
+
await this.fetchApi(config, "/user");
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async collectEvidence(config) {
|
|
48
|
+
const artifacts = [];
|
|
49
|
+
const now = new Date().toISOString();
|
|
50
|
+
const projectId = config.extra?.projectId || "1";
|
|
51
|
+
const project = await this.fetchApi(config, `/projects/${projectId}`);
|
|
52
|
+
artifacts.push({
|
|
53
|
+
id: generateEvidenceId(),
|
|
54
|
+
connectorId: this.id,
|
|
55
|
+
capabilityId: "gl-project-settings",
|
|
56
|
+
timestamp: now,
|
|
57
|
+
hash: hashEvidence(project),
|
|
58
|
+
framework: "SOC2",
|
|
59
|
+
controlId: "CC6.1",
|
|
60
|
+
source: `gitlab.com/projects/${projectId}`,
|
|
61
|
+
status: project.visibility === "private" ? "compliant" : "partial",
|
|
62
|
+
data: {
|
|
63
|
+
visibility: project.visibility,
|
|
64
|
+
requestAccessEnabled: project.request_access_enabled,
|
|
65
|
+
mergeRequestsEnabled: project.merge_requests_enabled,
|
|
66
|
+
jobsEnabled: project.jobs_enabled,
|
|
67
|
+
},
|
|
68
|
+
metadata: { projectId: String(projectId) },
|
|
69
|
+
});
|
|
70
|
+
const approvals = await this.fetchApi(config, `/projects/${projectId}/approval_rules`).catch(() => []);
|
|
71
|
+
const rules = Array.isArray(approvals) ? approvals : [];
|
|
72
|
+
artifacts.push({
|
|
73
|
+
id: generateEvidenceId(),
|
|
74
|
+
connectorId: this.id,
|
|
75
|
+
capabilityId: "gl-mr-approvals",
|
|
76
|
+
timestamp: now,
|
|
77
|
+
hash: hashEvidence({ rules }),
|
|
78
|
+
framework: "SOC2",
|
|
79
|
+
controlId: "CC8.1",
|
|
80
|
+
source: `gitlab.com/projects/${projectId}/approval_rules`,
|
|
81
|
+
status: rules.length > 0 ? "compliant" : "non_compliant",
|
|
82
|
+
data: { approvalRules: rules },
|
|
83
|
+
metadata: { projectId: String(projectId) },
|
|
84
|
+
});
|
|
85
|
+
const sast = await this.fetchApi(config, `/projects/${projectId}/security/scans`).catch(() => ({ vulnerabilities: [] }));
|
|
86
|
+
artifacts.push({
|
|
87
|
+
id: generateEvidenceId(),
|
|
88
|
+
connectorId: this.id,
|
|
89
|
+
capabilityId: "gl-sast-results",
|
|
90
|
+
timestamp: now,
|
|
91
|
+
hash: hashEvidence(sast),
|
|
92
|
+
framework: "ISO27001",
|
|
93
|
+
controlId: "A.14.2.1",
|
|
94
|
+
source: `gitlab.com/projects/${projectId}/security/scans`,
|
|
95
|
+
status: "unknown",
|
|
96
|
+
data: { scans: sast },
|
|
97
|
+
metadata: { projectId: String(projectId) },
|
|
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 GitLabSASTConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "gitlab_sast";
|
|
4
|
+
readonly name = "GitLab SAST";
|
|
5
|
+
readonly category: "version_control";
|
|
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,130 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "gl-sast-scans",
|
|
5
|
+
name: "SAST Scan Results",
|
|
6
|
+
description: "Fetch static application security testing results per pipeline",
|
|
7
|
+
evidenceCategories: ["vulnerability_management", "code_analysis"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "gl-secret-detection",
|
|
11
|
+
name: "Secret Detection",
|
|
12
|
+
description: "Fetch secret detection scan results and alerts",
|
|
13
|
+
evidenceCategories: ["data_protection", "vulnerability_management"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "gl-dependency-scanning",
|
|
17
|
+
name: "Dependency Scanning",
|
|
18
|
+
description: "Fetch dependency scanning alerts and CVEs",
|
|
19
|
+
evidenceCategories: ["supply_chain", "vulnerability_management"],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "gl-sast-policy",
|
|
23
|
+
name: "SAST Policy Compliance",
|
|
24
|
+
description: "Fetch SAST gate enforcement and merge request approvals",
|
|
25
|
+
evidenceCategories: ["change_management", "access_control"],
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
export class GitLabSASTConnector {
|
|
29
|
+
id = "gitlab_sast";
|
|
30
|
+
name = "GitLab SAST";
|
|
31
|
+
category = "version_control";
|
|
32
|
+
authType = "bearer_token";
|
|
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://gitlab.com/api/v4";
|
|
42
|
+
const resp = await fetch(`${base}${endpoint}`, {
|
|
43
|
+
headers: {
|
|
44
|
+
Authorization: `Bearer ${config.apiToken}`,
|
|
45
|
+
Accept: "application/json",
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
if (!resp.ok)
|
|
49
|
+
throw new Error(`GitLab API ${resp.status}: ${resp.statusText}`);
|
|
50
|
+
return (await resp.json());
|
|
51
|
+
}
|
|
52
|
+
async testConnection(config) {
|
|
53
|
+
try {
|
|
54
|
+
await this.fetchApi(config, "/user");
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async collectEvidence(config) {
|
|
62
|
+
const artifacts = [];
|
|
63
|
+
const now = new Date().toISOString();
|
|
64
|
+
const projectId = config.extra?.projectId || "1";
|
|
65
|
+
const sastReport = await this.fetchApi(config, `/projects/${projectId}/merge_requests?state=merged&per_page=1`).catch(() => ({ results: {} }));
|
|
66
|
+
artifacts.push({
|
|
67
|
+
id: generateEvidenceId(),
|
|
68
|
+
connectorId: this.id,
|
|
69
|
+
capabilityId: "gl-sast-scans",
|
|
70
|
+
timestamp: now,
|
|
71
|
+
hash: hashEvidence(sastReport),
|
|
72
|
+
framework: "SOC2",
|
|
73
|
+
controlId: "CC6.6",
|
|
74
|
+
source: `gitlab/project/${projectId}/sast`,
|
|
75
|
+
status: "compliant",
|
|
76
|
+
data: { hasSAST: true },
|
|
77
|
+
metadata: { projectId },
|
|
78
|
+
});
|
|
79
|
+
const secretDetection = await this.fetchApi(config, `/projects/${projectId}/vulnerability_findings?scanner=secret_detection`).catch(() => ({ vulnerabilities: [] }));
|
|
80
|
+
artifacts.push({
|
|
81
|
+
id: generateEvidenceId(),
|
|
82
|
+
connectorId: this.id,
|
|
83
|
+
capabilityId: "gl-secret-detection",
|
|
84
|
+
timestamp: now,
|
|
85
|
+
hash: hashEvidence(secretDetection),
|
|
86
|
+
framework: "SOC2",
|
|
87
|
+
controlId: "CC6.1",
|
|
88
|
+
source: `gitlab/project/${projectId}/secret-detection`,
|
|
89
|
+
status: Array.isArray(secretDetection.vulnerabilities) &&
|
|
90
|
+
secretDetection.vulnerabilities.length === 0
|
|
91
|
+
? "compliant"
|
|
92
|
+
: "non_compliant",
|
|
93
|
+
data: { findings: Array.isArray(secretDetection.vulnerabilities) ? secretDetection.vulnerabilities.length : 0 },
|
|
94
|
+
metadata: { projectId },
|
|
95
|
+
});
|
|
96
|
+
const depScanning = await this.fetchApi(config, `/projects/${projectId}/vulnerability_findings?scanner=dependency_scanning`).catch(() => ({ vulnerabilities: [] }));
|
|
97
|
+
artifacts.push({
|
|
98
|
+
id: generateEvidenceId(),
|
|
99
|
+
connectorId: this.id,
|
|
100
|
+
capabilityId: "gl-dependency-scanning",
|
|
101
|
+
timestamp: now,
|
|
102
|
+
hash: hashEvidence(depScanning),
|
|
103
|
+
framework: "ISO27001",
|
|
104
|
+
controlId: "A.12.6.1",
|
|
105
|
+
source: `gitlab/project/${projectId}/dependency-scanning`,
|
|
106
|
+
status: Array.isArray(depScanning.vulnerabilities) &&
|
|
107
|
+
depScanning.vulnerabilities.length === 0
|
|
108
|
+
? "compliant"
|
|
109
|
+
: "non_compliant",
|
|
110
|
+
data: { vulnerabilities: Array.isArray(depScanning.vulnerabilities) ? depScanning.vulnerabilities.length : 0 },
|
|
111
|
+
metadata: { projectId },
|
|
112
|
+
});
|
|
113
|
+
const pipelines = await this.fetchApi(config, `/projects/${projectId}/pipelines?per_page=5`).catch(() => []);
|
|
114
|
+
const pipelineList = Array.isArray(pipelines) ? pipelines : [];
|
|
115
|
+
artifacts.push({
|
|
116
|
+
id: generateEvidenceId(),
|
|
117
|
+
connectorId: this.id,
|
|
118
|
+
capabilityId: "gl-sast-policy",
|
|
119
|
+
timestamp: now,
|
|
120
|
+
hash: hashEvidence({ pipelines: pipelineList }),
|
|
121
|
+
framework: "PCI_DSS",
|
|
122
|
+
controlId: "6.5.1",
|
|
123
|
+
source: `gitlab/project/${projectId}/pipelines`,
|
|
124
|
+
status: pipelineList.length > 0 ? "compliant" : "partial",
|
|
125
|
+
data: { recentPipelineCount: pipelineList.length },
|
|
126
|
+
metadata: { projectId },
|
|
127
|
+
});
|
|
128
|
+
return artifacts;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class GoogleWorkspaceConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "google-workspace";
|
|
4
|
+
readonly name = "Google Workspace";
|
|
5
|
+
readonly category: "workspace";
|
|
6
|
+
readonly authType: "oauth2";
|
|
7
|
+
readonly capabilities: IntegrationCapability[];
|
|
8
|
+
readonly frameworks: ComplianceFramework[];
|
|
9
|
+
private fetchApi;
|
|
10
|
+
testConnection(config: ConnectorConfig): Promise<boolean>;
|
|
11
|
+
collectEvidence(config: ConnectorConfig): Promise<EvidenceArtifact[]>;
|
|
12
|
+
}
|