@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,85 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "mcafee-endpoints",
|
|
5
|
+
name: "Endpoint Protection",
|
|
6
|
+
description: "Fetch McAfee/Trellix endpoint agent status and protection health",
|
|
7
|
+
evidenceCategories: ["endpoint_security", "monitoring"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "mcafee-detections",
|
|
11
|
+
name: "Threat Detections",
|
|
12
|
+
description: "Fetch threat detection and remediation event history",
|
|
13
|
+
evidenceCategories: ["vulnerability_management", "monitoring"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "mcafee-policies",
|
|
17
|
+
name: "Security Policies",
|
|
18
|
+
description: "Fetch McAfee ePO policy assignments and compliance reports",
|
|
19
|
+
evidenceCategories: ["policy_compliance", "configuration"],
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
export class McAfeeConnector {
|
|
23
|
+
id = "mcafee";
|
|
24
|
+
name = "McAfee (Trellix)";
|
|
25
|
+
category = "endpoint";
|
|
26
|
+
authType = "api_key";
|
|
27
|
+
capabilities = capabilities;
|
|
28
|
+
frameworks = ["SOC2", "ISO27001", "NIST_CSF", "HIPAA"];
|
|
29
|
+
async fetchApi(config, endpoint) {
|
|
30
|
+
const base = config.baseUrl || "https://api.trellix.com/v1";
|
|
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(`McAfee API ${resp.status}: ${resp.statusText}`);
|
|
39
|
+
return (await resp.json());
|
|
40
|
+
}
|
|
41
|
+
async testConnection(config) {
|
|
42
|
+
try {
|
|
43
|
+
await this.fetchApi(config, "/devices?pageSize=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 devices = await this.fetchApi(config, "/devices?pageSize=100").catch(() => ({ data: [] }));
|
|
54
|
+
const deviceList = (devices.data || []);
|
|
55
|
+
artifacts.push({
|
|
56
|
+
id: generateEvidenceId(),
|
|
57
|
+
connectorId: this.id,
|
|
58
|
+
capabilityId: "mcafee-endpoints",
|
|
59
|
+
timestamp: now,
|
|
60
|
+
hash: hashEvidence({ deviceCount: deviceList.length }),
|
|
61
|
+
framework: "SOC2",
|
|
62
|
+
controlId: "CC6.8",
|
|
63
|
+
source: "mcafee/devices",
|
|
64
|
+
status: deviceList.length > 0 ? "compliant" : "unknown",
|
|
65
|
+
data: { endpointCount: deviceList.length },
|
|
66
|
+
metadata: {},
|
|
67
|
+
});
|
|
68
|
+
const threats = await this.fetchApi(config, "/events?pageSize=10").catch(() => ({ data: [] }));
|
|
69
|
+
const threatList = (threats.data || []);
|
|
70
|
+
artifacts.push({
|
|
71
|
+
id: generateEvidenceId(),
|
|
72
|
+
connectorId: this.id,
|
|
73
|
+
capabilityId: "mcafee-detections",
|
|
74
|
+
timestamp: now,
|
|
75
|
+
hash: hashEvidence({ threatCount: threatList.length }),
|
|
76
|
+
framework: "ISO27001",
|
|
77
|
+
controlId: "A.12.2.1",
|
|
78
|
+
source: "mcafee/events",
|
|
79
|
+
status: threatList.length === 0 ? "compliant" : "non_compliant",
|
|
80
|
+
data: { recentThreats: threatList.length },
|
|
81
|
+
metadata: {},
|
|
82
|
+
});
|
|
83
|
+
return artifacts;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class Microsoft365Connector implements IntegrationConnector {
|
|
3
|
+
readonly id = "microsoft-365";
|
|
4
|
+
readonly name = "Microsoft 365";
|
|
5
|
+
readonly category: "workspace";
|
|
6
|
+
readonly authType: "oauth2";
|
|
7
|
+
readonly capabilities: IntegrationCapability[];
|
|
8
|
+
readonly frameworks: ComplianceFramework[];
|
|
9
|
+
private fetchGraph;
|
|
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: "m365-users",
|
|
5
|
+
name: "Users & Groups",
|
|
6
|
+
description: "Fetch Microsoft 365 user accounts, licenses, and group memberships",
|
|
7
|
+
evidenceCategories: ["identity_management", "access_control"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "m365-sharepoint",
|
|
11
|
+
name: "SharePoint Sites",
|
|
12
|
+
description: "Fetch SharePoint site inventory and sharing configurations",
|
|
13
|
+
evidenceCategories: ["document_management", "data_protection"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "m365-teams",
|
|
17
|
+
name: "Teams Settings",
|
|
18
|
+
description: "Fetch Microsoft Teams policies and external access configurations",
|
|
19
|
+
evidenceCategories: ["communication", "data_protection"],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "m365-exchange",
|
|
23
|
+
name: "Exchange Online",
|
|
24
|
+
description: "Fetch Exchange Online mail flow and security configurations",
|
|
25
|
+
evidenceCategories: ["email_security", "configuration"],
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
id: "m365-audit",
|
|
29
|
+
name: "Unified Audit Log",
|
|
30
|
+
description: "Fetch Microsoft 365 unified audit log entries",
|
|
31
|
+
evidenceCategories: ["audit_logging", "compliance"],
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
export class Microsoft365Connector {
|
|
35
|
+
id = "microsoft-365";
|
|
36
|
+
name = "Microsoft 365";
|
|
37
|
+
category = "workspace";
|
|
38
|
+
authType = "oauth2";
|
|
39
|
+
capabilities = capabilities;
|
|
40
|
+
frameworks = ["SOC2", "ISO27001", "NIST_CSF", "HIPAA", "PCI_DSS"];
|
|
41
|
+
async fetchGraph(config, endpoint) {
|
|
42
|
+
const base = config.baseUrl || "https://graph.microsoft.com/v1.0";
|
|
43
|
+
const resp = await fetch(`${base}${endpoint}`, {
|
|
44
|
+
headers: { Authorization: `Bearer ${config.apiToken}` },
|
|
45
|
+
});
|
|
46
|
+
if (!resp.ok)
|
|
47
|
+
throw new Error(`Microsoft Graph ${resp.status}: ${resp.statusText}`);
|
|
48
|
+
return (await resp.json());
|
|
49
|
+
}
|
|
50
|
+
async testConnection(config) {
|
|
51
|
+
try {
|
|
52
|
+
await this.fetchGraph(config, "/me");
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async collectEvidence(config) {
|
|
60
|
+
const artifacts = [];
|
|
61
|
+
const now = new Date().toISOString();
|
|
62
|
+
const users = await this.fetchGraph(config, "/users?$top=100&$select=id,displayName,accountEnabled,assignedLicenses").catch(() => ({ value: [] }));
|
|
63
|
+
const userList = (users.value || []);
|
|
64
|
+
const disabled = userList.filter((u) => u.accountEnabled === false);
|
|
65
|
+
artifacts.push({
|
|
66
|
+
id: generateEvidenceId(),
|
|
67
|
+
connectorId: this.id,
|
|
68
|
+
capabilityId: "m365-users",
|
|
69
|
+
timestamp: now,
|
|
70
|
+
hash: hashEvidence({ total: userList.length, disabled: disabled.length }),
|
|
71
|
+
framework: "SOC2",
|
|
72
|
+
controlId: "CC6.1",
|
|
73
|
+
source: "microsoft365/users",
|
|
74
|
+
status: "unknown",
|
|
75
|
+
data: { userCount: userList.length, disabledCount: disabled.length },
|
|
76
|
+
metadata: { tenantId: config.tenantId || "" },
|
|
77
|
+
});
|
|
78
|
+
const sites = await this.fetchGraph(config, "/sites?$top=50").catch(() => ({ value: [] }));
|
|
79
|
+
const siteList = (sites.value || []);
|
|
80
|
+
artifacts.push({
|
|
81
|
+
id: generateEvidenceId(),
|
|
82
|
+
connectorId: this.id,
|
|
83
|
+
capabilityId: "m365-sharepoint",
|
|
84
|
+
timestamp: now,
|
|
85
|
+
hash: hashEvidence({ siteCount: siteList.length }),
|
|
86
|
+
framework: "ISO27001",
|
|
87
|
+
controlId: "A.8.3.2",
|
|
88
|
+
source: "microsoft365/sites",
|
|
89
|
+
status: "unknown",
|
|
90
|
+
data: { siteCount: siteList.length },
|
|
91
|
+
metadata: { tenantId: config.tenantId || "" },
|
|
92
|
+
});
|
|
93
|
+
const teams = await this.fetchGraph(config, "/teams?$top=50").catch(() => ({ value: [] }));
|
|
94
|
+
const teamList = (teams.value || []);
|
|
95
|
+
artifacts.push({
|
|
96
|
+
id: generateEvidenceId(),
|
|
97
|
+
connectorId: this.id,
|
|
98
|
+
capabilityId: "m365-teams",
|
|
99
|
+
timestamp: now,
|
|
100
|
+
hash: hashEvidence({ teamCount: teamList.length }),
|
|
101
|
+
framework: "SOC2",
|
|
102
|
+
controlId: "CC6.4",
|
|
103
|
+
source: "microsoft365/teams",
|
|
104
|
+
status: "unknown",
|
|
105
|
+
data: { teamCount: teamList.length },
|
|
106
|
+
metadata: { tenantId: config.tenantId || "" },
|
|
107
|
+
});
|
|
108
|
+
const mailConfig = await this.fetchGraph(config, "/admin.exchange/settings?%24select=mailFlowConfiguration").catch(() => ({}));
|
|
109
|
+
artifacts.push({
|
|
110
|
+
id: generateEvidenceId(),
|
|
111
|
+
connectorId: this.id,
|
|
112
|
+
capabilityId: "m365-exchange",
|
|
113
|
+
timestamp: now,
|
|
114
|
+
hash: hashEvidence(mailConfig),
|
|
115
|
+
framework: "SOC2",
|
|
116
|
+
controlId: "CC6.7",
|
|
117
|
+
source: "microsoft365/exchange",
|
|
118
|
+
status: "unknown",
|
|
119
|
+
data: { mailConfig },
|
|
120
|
+
metadata: { tenantId: config.tenantId || "" },
|
|
121
|
+
});
|
|
122
|
+
const audit = await this.fetchGraph(config, "/audit/dimensions/logs/activities?%24top=100&%24orderby=activityDateTime%20desc").catch(() => ({ value: [] }));
|
|
123
|
+
const auditItems = (audit.value || []);
|
|
124
|
+
artifacts.push({
|
|
125
|
+
id: generateEvidenceId(),
|
|
126
|
+
connectorId: this.id,
|
|
127
|
+
capabilityId: "m365-audit",
|
|
128
|
+
timestamp: now,
|
|
129
|
+
hash: hashEvidence({ logCount: auditItems.length }),
|
|
130
|
+
framework: "SOC2",
|
|
131
|
+
controlId: "CC7.2",
|
|
132
|
+
source: "microsoft365/audit",
|
|
133
|
+
status: "unknown",
|
|
134
|
+
data: { auditLogCount: auditItems.length },
|
|
135
|
+
metadata: { tenantId: config.tenantId || "" },
|
|
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 MongoDBConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "mongodb";
|
|
4
|
+
readonly name = "MongoDB Atlas";
|
|
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,86 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "mongodb-clusters",
|
|
5
|
+
name: "Atlas Clusters",
|
|
6
|
+
description: "Fetch MongoDB Atlas cluster configurations and backup status",
|
|
7
|
+
evidenceCategories: ["data_protection", "cloud_configuration"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "mongodb-access",
|
|
11
|
+
name: "Database Access",
|
|
12
|
+
description: "Fetch MongoDB Atlas database user roles and IP whitelist entries",
|
|
13
|
+
evidenceCategories: ["access_control", "data_protection"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "mongodb-audit",
|
|
17
|
+
name: "Audit Logs",
|
|
18
|
+
description: "Fetch MongoDB Atlas audit log events and authentication attempts",
|
|
19
|
+
evidenceCategories: ["monitoring", "audit"],
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
export class MongoDBConnector {
|
|
23
|
+
id = "mongodb";
|
|
24
|
+
name = "MongoDB Atlas";
|
|
25
|
+
category = "data_warehouse";
|
|
26
|
+
authType = "api_key";
|
|
27
|
+
capabilities = capabilities;
|
|
28
|
+
frameworks = ["SOC2", "ISO27001", "NIST_CSF", "HIPAA", "PCI_DSS"];
|
|
29
|
+
async fetchApi(config, endpoint) {
|
|
30
|
+
const base = config.baseUrl || "https://cloud.mongodb.com/api/public/v1.0";
|
|
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(`MongoDB API ${resp.status}: ${resp.statusText}`);
|
|
39
|
+
return (await resp.json());
|
|
40
|
+
}
|
|
41
|
+
async testConnection(config) {
|
|
42
|
+
try {
|
|
43
|
+
await this.fetchApi(config, "/groups");
|
|
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 groupId = config.extra?.groupId || "default";
|
|
54
|
+
const clusters = await this.fetchApi(config, `/groups/${groupId}/clusters`).catch(() => ({ results: [] }));
|
|
55
|
+
const clusterList = (clusters.results || []);
|
|
56
|
+
artifacts.push({
|
|
57
|
+
id: generateEvidenceId(),
|
|
58
|
+
connectorId: this.id,
|
|
59
|
+
capabilityId: "mongodb-clusters",
|
|
60
|
+
timestamp: now,
|
|
61
|
+
hash: hashEvidence({ clusterCount: clusterList.length }),
|
|
62
|
+
framework: "SOC2",
|
|
63
|
+
controlId: "CC6.1",
|
|
64
|
+
source: "mongodb/clusters",
|
|
65
|
+
status: clusterList.length > 0 ? "compliant" : "unknown",
|
|
66
|
+
data: { clusterCount: clusterList.length },
|
|
67
|
+
metadata: { groupId },
|
|
68
|
+
});
|
|
69
|
+
const users = await this.fetchApi(config, `/groups/${groupId}/databaseUsers`).catch(() => ({ results: [] }));
|
|
70
|
+
const userList = (users.results || []);
|
|
71
|
+
artifacts.push({
|
|
72
|
+
id: generateEvidenceId(),
|
|
73
|
+
connectorId: this.id,
|
|
74
|
+
capabilityId: "mongodb-access",
|
|
75
|
+
timestamp: now,
|
|
76
|
+
hash: hashEvidence({ userCount: userList.length }),
|
|
77
|
+
framework: "ISO27001",
|
|
78
|
+
controlId: "A.9.2.1",
|
|
79
|
+
source: "mongodb/databaseUsers",
|
|
80
|
+
status: "unknown",
|
|
81
|
+
data: { databaseUserCount: userList.length },
|
|
82
|
+
metadata: { groupId },
|
|
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 NamelyConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "namely";
|
|
4
|
+
readonly name = "Namely";
|
|
5
|
+
readonly category: "hr";
|
|
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,97 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "namely-employees",
|
|
5
|
+
name: "Employee Profiles",
|
|
6
|
+
description: "Fetch employee directory and employment data",
|
|
7
|
+
evidenceCategories: ["access_control", "data_protection"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "namely-pto",
|
|
11
|
+
name: "Time Off Management",
|
|
12
|
+
description: "Fetch PTO policies and approval workflows",
|
|
13
|
+
evidenceCategories: ["compliance", "configuration"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "namely-performance",
|
|
17
|
+
name: "Performance Reviews",
|
|
18
|
+
description: "Fetch review cycle status and goal completion",
|
|
19
|
+
evidenceCategories: ["compliance", "monitoring"],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "namely-audit",
|
|
23
|
+
name: "Audit Logs",
|
|
24
|
+
description: "Fetch employee data change and access logs",
|
|
25
|
+
evidenceCategories: ["monitoring", "access_control"],
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
export class NamelyConnector {
|
|
29
|
+
id = "namely";
|
|
30
|
+
name = "Namely";
|
|
31
|
+
category = "hr";
|
|
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://api.namely.com";
|
|
41
|
+
const resp = await fetch(`${base}/api/v1${endpoint}`, {
|
|
42
|
+
headers: {
|
|
43
|
+
Authorization: `Bearer ${config.apiToken}`,
|
|
44
|
+
"Content-Type": "application/json",
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
if (!resp.ok)
|
|
48
|
+
throw new Error(`Namely API ${resp.status}: ${resp.statusText}`);
|
|
49
|
+
return (await resp.json());
|
|
50
|
+
}
|
|
51
|
+
async testConnection(config) {
|
|
52
|
+
try {
|
|
53
|
+
await this.fetchApi(config, "/employees?limit=1");
|
|
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 employees = await this.fetchApi(config, "/employees?limit=100").catch(() => ({
|
|
64
|
+
employees: [],
|
|
65
|
+
}));
|
|
66
|
+
artifacts.push({
|
|
67
|
+
id: generateEvidenceId(),
|
|
68
|
+
connectorId: this.id,
|
|
69
|
+
capabilityId: "namely-employees",
|
|
70
|
+
timestamp: now,
|
|
71
|
+
hash: hashEvidence(employees),
|
|
72
|
+
framework: "SOC2",
|
|
73
|
+
controlId: "CC6.1",
|
|
74
|
+
source: "namely/employees",
|
|
75
|
+
status: employees.employees?.length > 0 ? "compliant" : "unknown",
|
|
76
|
+
data: { employeeCount: employees.employees?.length || 0 },
|
|
77
|
+
metadata: {},
|
|
78
|
+
});
|
|
79
|
+
const pto = await this.fetchApi(config, "/time_off/policies").catch(() => ({
|
|
80
|
+
time_off_policies: [],
|
|
81
|
+
}));
|
|
82
|
+
artifacts.push({
|
|
83
|
+
id: generateEvidenceId(),
|
|
84
|
+
connectorId: this.id,
|
|
85
|
+
capabilityId: "namely-pto",
|
|
86
|
+
timestamp: now,
|
|
87
|
+
hash: hashEvidence(pto),
|
|
88
|
+
framework: "ISO27001",
|
|
89
|
+
controlId: "A.6.2.1",
|
|
90
|
+
source: "namely/pto-policies",
|
|
91
|
+
status: pto.time_off_policies?.length > 0 ? "compliant" : "non_compliant",
|
|
92
|
+
data: { ptoPolicies: pto.time_off_policies?.length || 0 },
|
|
93
|
+
metadata: {},
|
|
94
|
+
});
|
|
95
|
+
return artifacts;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class Neo4jConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "neo4j";
|
|
4
|
+
readonly name = "Neo4j";
|
|
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,70 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "neo4j-databases",
|
|
5
|
+
name: "Neo4j Databases",
|
|
6
|
+
description: "Fetch Neo4j database configurations and graph statistics",
|
|
7
|
+
evidenceCategories: ["data_protection", "cloud_configuration"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "neo4j-security",
|
|
11
|
+
name: "Security Configurations",
|
|
12
|
+
description: "Fetch Neo4j authentication, role-based access, and TLS settings",
|
|
13
|
+
evidenceCategories: ["access_control", "encryption"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "neo4j-queries",
|
|
17
|
+
name: "Query Audit",
|
|
18
|
+
description: "Fetch Neo4j query logs and slow query monitoring",
|
|
19
|
+
evidenceCategories: ["monitoring", "audit"],
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
export class Neo4jConnector {
|
|
23
|
+
id = "neo4j";
|
|
24
|
+
name = "Neo4j";
|
|
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.neo4j.example.com/v1";
|
|
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(`Neo4j API ${resp.status}: ${resp.statusText}`);
|
|
39
|
+
return (await resp.json());
|
|
40
|
+
}
|
|
41
|
+
async testConnection(config) {
|
|
42
|
+
try {
|
|
43
|
+
await this.fetchApi(config, "/instances?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 instances = await this.fetchApi(config, "/instances?limit=100").catch(() => ({ items: [] }));
|
|
54
|
+
const instanceList = (instances.items || []);
|
|
55
|
+
artifacts.push({
|
|
56
|
+
id: generateEvidenceId(),
|
|
57
|
+
connectorId: this.id,
|
|
58
|
+
capabilityId: "neo4j-databases",
|
|
59
|
+
timestamp: now,
|
|
60
|
+
hash: hashEvidence({ instanceCount: instanceList.length }),
|
|
61
|
+
framework: "SOC2",
|
|
62
|
+
controlId: "CC6.1",
|
|
63
|
+
source: "neo4j/instances",
|
|
64
|
+
status: instanceList.length > 0 ? "compliant" : "unknown",
|
|
65
|
+
data: { instanceCount: instanceList.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 NetSuiteConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "netsuite";
|
|
4
|
+
readonly name = "NetSuite";
|
|
5
|
+
readonly category: "finance";
|
|
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,94 @@
|
|
|
1
|
+
import { hashEvidence, generateEvidenceId } from "../types.js";
|
|
2
|
+
const capabilities = [
|
|
3
|
+
{
|
|
4
|
+
id: "netsuite-financial",
|
|
5
|
+
name: "Financial Controls",
|
|
6
|
+
description: "Fetch financial reporting access and approval workflows",
|
|
7
|
+
evidenceCategories: ["access_control", "compliance"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
id: "netsuite-roles",
|
|
11
|
+
name: "Role-Based Access",
|
|
12
|
+
description: "Fetch NetSuite roles and permission configurations",
|
|
13
|
+
evidenceCategories: ["access_control", "configuration"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "netsuite-audit",
|
|
17
|
+
name: "System Notes",
|
|
18
|
+
description: "Fetch data change audit trails and system notes",
|
|
19
|
+
evidenceCategories: ["monitoring", "access_control"],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "netsuite-approvals",
|
|
23
|
+
name: "Approval Policies",
|
|
24
|
+
description: "Fetch purchase order and expense approval rules",
|
|
25
|
+
evidenceCategories: ["change_management", "compliance"],
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
export class NetSuiteConnector {
|
|
29
|
+
id = "netsuite";
|
|
30
|
+
name = "NetSuite";
|
|
31
|
+
category = "finance";
|
|
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://rest.netsuite.com";
|
|
42
|
+
const resp = await fetch(`${base}${endpoint}`, {
|
|
43
|
+
headers: {
|
|
44
|
+
Authorization: `Bearer ${config.apiToken}`,
|
|
45
|
+
"Content-Type": "application/json",
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
if (!resp.ok)
|
|
49
|
+
throw new Error(`NetSuite API ${resp.status}: ${resp.statusText}`);
|
|
50
|
+
return (await resp.json());
|
|
51
|
+
}
|
|
52
|
+
async testConnection(config) {
|
|
53
|
+
try {
|
|
54
|
+
await this.fetchApi(config, "/app/site/hosting/restlet.nl");
|
|
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 roles = await this.fetchApi(config, "/app/site/hosting/restlet.nl?script=roles").catch(() => ({ roles: [] }));
|
|
65
|
+
artifacts.push({
|
|
66
|
+
id: generateEvidenceId(),
|
|
67
|
+
connectorId: this.id,
|
|
68
|
+
capabilityId: "netsuite-roles",
|
|
69
|
+
timestamp: now,
|
|
70
|
+
hash: hashEvidence(roles),
|
|
71
|
+
framework: "SOC2",
|
|
72
|
+
controlId: "CC6.1",
|
|
73
|
+
source: "netsuite/roles",
|
|
74
|
+
status: roles.roles?.length > 0 ? "compliant" : "unknown",
|
|
75
|
+
data: { roleCount: roles.roles?.length || 0 },
|
|
76
|
+
metadata: {},
|
|
77
|
+
});
|
|
78
|
+
const audit = await this.fetchApi(config, "/app/site/hosting/restlet.nl?script=audit").catch(() => ({ records: [] }));
|
|
79
|
+
artifacts.push({
|
|
80
|
+
id: generateEvidenceId(),
|
|
81
|
+
connectorId: this.id,
|
|
82
|
+
capabilityId: "netsuite-audit",
|
|
83
|
+
timestamp: now,
|
|
84
|
+
hash: hashEvidence(audit),
|
|
85
|
+
framework: "ISO27001",
|
|
86
|
+
controlId: "A.12.4.1",
|
|
87
|
+
source: "netsuite/audit",
|
|
88
|
+
status: "partial",
|
|
89
|
+
data: { auditRecords: audit.records?.length || 0 },
|
|
90
|
+
metadata: {},
|
|
91
|
+
});
|
|
92
|
+
return artifacts;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
|
|
2
|
+
export declare class NetskopeConnector implements IntegrationConnector {
|
|
3
|
+
readonly id = "netskope";
|
|
4
|
+
readonly name = "Netskope";
|
|
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
|
+
}
|