@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.
Files changed (311) hide show
  1. package/dist/IntegrationMarketplace.d.ts +32 -0
  2. package/dist/IntegrationMarketplace.js +319 -0
  3. package/dist/connectors/ADPConnector.d.ts +12 -0
  4. package/dist/connectors/ADPConnector.js +97 -0
  5. package/dist/connectors/AWSCloudTrailConnector.d.ts +12 -0
  6. package/dist/connectors/AWSCloudTrailConnector.js +77 -0
  7. package/dist/connectors/AWSCloudWatchConnector.d.ts +12 -0
  8. package/dist/connectors/AWSCloudWatchConnector.js +70 -0
  9. package/dist/connectors/AWSGuardDutyConnector.d.ts +12 -0
  10. package/dist/connectors/AWSGuardDutyConnector.js +139 -0
  11. package/dist/connectors/AWSIAMConnector.d.ts +12 -0
  12. package/dist/connectors/AWSIAMConnector.js +90 -0
  13. package/dist/connectors/AWSKMSConnector.d.ts +12 -0
  14. package/dist/connectors/AWSKMSConnector.js +70 -0
  15. package/dist/connectors/AWSLambdaConnector.d.ts +12 -0
  16. package/dist/connectors/AWSLambdaConnector.js +84 -0
  17. package/dist/connectors/AWSRDSConnector.d.ts +12 -0
  18. package/dist/connectors/AWSRDSConnector.js +84 -0
  19. package/dist/connectors/AWSS3Connector.d.ts +12 -0
  20. package/dist/connectors/AWSS3Connector.js +112 -0
  21. package/dist/connectors/AkamaiConnector.d.ts +12 -0
  22. package/dist/connectors/AkamaiConnector.js +98 -0
  23. package/dist/connectors/ArgoCDConnector.d.ts +12 -0
  24. package/dist/connectors/ArgoCDConnector.js +93 -0
  25. package/dist/connectors/ArtifactoryConnector.d.ts +12 -0
  26. package/dist/connectors/ArtifactoryConnector.js +94 -0
  27. package/dist/connectors/AtlassianJiraConnector.d.ts +12 -0
  28. package/dist/connectors/AtlassianJiraConnector.js +134 -0
  29. package/dist/connectors/Auth0Connector.d.ts +12 -0
  30. package/dist/connectors/Auth0Connector.js +150 -0
  31. package/dist/connectors/AzureADConnector.d.ts +12 -0
  32. package/dist/connectors/AzureADConnector.js +115 -0
  33. package/dist/connectors/AzureDevOpsConnector.d.ts +12 -0
  34. package/dist/connectors/AzureDevOpsConnector.js +130 -0
  35. package/dist/connectors/AzureDevOpsPipelinesConnector.d.ts +12 -0
  36. package/dist/connectors/AzureDevOpsPipelinesConnector.js +72 -0
  37. package/dist/connectors/AzurePipelinesConnector.d.ts +12 -0
  38. package/dist/connectors/AzurePipelinesConnector.js +72 -0
  39. package/dist/connectors/AzurePolicyConnector.d.ts +12 -0
  40. package/dist/connectors/AzurePolicyConnector.js +141 -0
  41. package/dist/connectors/AzureReposConnector.d.ts +12 -0
  42. package/dist/connectors/AzureReposConnector.js +96 -0
  43. package/dist/connectors/AzureSentinelConnector.d.ts +12 -0
  44. package/dist/connectors/AzureSentinelConnector.js +88 -0
  45. package/dist/connectors/BambooCICDConnector.d.ts +12 -0
  46. package/dist/connectors/BambooCICDConnector.js +72 -0
  47. package/dist/connectors/BambooHRConnector.d.ts +12 -0
  48. package/dist/connectors/BambooHRConnector.js +84 -0
  49. package/dist/connectors/BeyondTrustConnector.d.ts +12 -0
  50. package/dist/connectors/BeyondTrustConnector.js +94 -0
  51. package/dist/connectors/BitbucketConnector.d.ts +12 -0
  52. package/dist/connectors/BitbucketConnector.js +100 -0
  53. package/dist/connectors/BitbucketPipelinesConnector.d.ts +12 -0
  54. package/dist/connectors/BitbucketPipelinesConnector.js +72 -0
  55. package/dist/connectors/BoxConnector.d.ts +12 -0
  56. package/dist/connectors/BoxConnector.js +122 -0
  57. package/dist/connectors/BuildkiteConnector.d.ts +12 -0
  58. package/dist/connectors/BuildkiteConnector.js +95 -0
  59. package/dist/connectors/CarbonBlackConnector.d.ts +12 -0
  60. package/dist/connectors/CarbonBlackConnector.js +89 -0
  61. package/dist/connectors/CassandraConnector.d.ts +12 -0
  62. package/dist/connectors/CassandraConnector.js +69 -0
  63. package/dist/connectors/CheckPointConnector.d.ts +12 -0
  64. package/dist/connectors/CheckPointConnector.js +98 -0
  65. package/dist/connectors/CircleCIConnector.d.ts +12 -0
  66. package/dist/connectors/CircleCIConnector.js +129 -0
  67. package/dist/connectors/CircleCIConnectorsConnector.d.ts +12 -0
  68. package/dist/connectors/CircleCIConnectorsConnector.js +69 -0
  69. package/dist/connectors/CiscoUmbrellaConnector.d.ts +12 -0
  70. package/dist/connectors/CiscoUmbrellaConnector.js +96 -0
  71. package/dist/connectors/CloudBeesJenkinsConnector.d.ts +12 -0
  72. package/dist/connectors/CloudBeesJenkinsConnector.js +70 -0
  73. package/dist/connectors/CloudflareDNSConnector.d.ts +12 -0
  74. package/dist/connectors/CloudflareDNSConnector.js +71 -0
  75. package/dist/connectors/CloudflareWAFConnector.d.ts +12 -0
  76. package/dist/connectors/CloudflareWAFConnector.js +98 -0
  77. package/dist/connectors/ConfluenceConnector.d.ts +12 -0
  78. package/dist/connectors/ConfluenceConnector.js +101 -0
  79. package/dist/connectors/ConstantContactConnector.d.ts +12 -0
  80. package/dist/connectors/ConstantContactConnector.js +70 -0
  81. package/dist/connectors/CouchDBConnector.d.ts +12 -0
  82. package/dist/connectors/CouchDBConnector.js +69 -0
  83. package/dist/connectors/CrowdStrikeConnector.d.ts +12 -0
  84. package/dist/connectors/CrowdStrikeConnector.js +86 -0
  85. package/dist/connectors/CrowdStrikeFalconConnector.d.ts +12 -0
  86. package/dist/connectors/CrowdStrikeFalconConnector.js +92 -0
  87. package/dist/connectors/CrowdStrikeSpotlightConnector.d.ts +12 -0
  88. package/dist/connectors/CrowdStrikeSpotlightConnector.js +139 -0
  89. package/dist/connectors/CyberArkConnector.d.ts +12 -0
  90. package/dist/connectors/CyberArkConnector.js +95 -0
  91. package/dist/connectors/DatabricksConnector.d.ts +12 -0
  92. package/dist/connectors/DatabricksConnector.js +95 -0
  93. package/dist/connectors/DatadogConnector.d.ts +12 -0
  94. package/dist/connectors/DatadogConnector.js +110 -0
  95. package/dist/connectors/DigitalOceanConnector.d.ts +12 -0
  96. package/dist/connectors/DigitalOceanConnector.js +85 -0
  97. package/dist/connectors/DiscordConnector.d.ts +12 -0
  98. package/dist/connectors/DiscordConnector.js +98 -0
  99. package/dist/connectors/DockerHubConnector.d.ts +12 -0
  100. package/dist/connectors/DockerHubConnector.js +80 -0
  101. package/dist/connectors/DocuSignConnector.d.ts +12 -0
  102. package/dist/connectors/DocuSignConnector.js +96 -0
  103. package/dist/connectors/DriftConnector.d.ts +12 -0
  104. package/dist/connectors/DriftConnector.js +69 -0
  105. package/dist/connectors/DropboxConnector.d.ts +12 -0
  106. package/dist/connectors/DropboxConnector.js +127 -0
  107. package/dist/connectors/ESETConnector.d.ts +12 -0
  108. package/dist/connectors/ESETConnector.js +70 -0
  109. package/dist/connectors/ElasticsearchCloudConnector.d.ts +12 -0
  110. package/dist/connectors/ElasticsearchCloudConnector.js +70 -0
  111. package/dist/connectors/FSecureConnector.d.ts +12 -0
  112. package/dist/connectors/FSecureConnector.js +70 -0
  113. package/dist/connectors/FeatureFlagConnector.d.ts +12 -0
  114. package/dist/connectors/FeatureFlagConnector.js +70 -0
  115. package/dist/connectors/FluxCDConnector.d.ts +12 -0
  116. package/dist/connectors/FluxCDConnector.js +94 -0
  117. package/dist/connectors/ForgeRockConnector.d.ts +12 -0
  118. package/dist/connectors/ForgeRockConnector.js +95 -0
  119. package/dist/connectors/FortinetConnector.d.ts +12 -0
  120. package/dist/connectors/FortinetConnector.js +98 -0
  121. package/dist/connectors/FreshdeskConnector.d.ts +12 -0
  122. package/dist/connectors/FreshdeskConnector.js +71 -0
  123. package/dist/connectors/GCPBigQueryConnector.d.ts +12 -0
  124. package/dist/connectors/GCPBigQueryConnector.js +71 -0
  125. package/dist/connectors/GCPComputeConnector.d.ts +12 -0
  126. package/dist/connectors/GCPComputeConnector.js +87 -0
  127. package/dist/connectors/GCPConfigConnector.d.ts +12 -0
  128. package/dist/connectors/GCPConfigConnector.js +149 -0
  129. package/dist/connectors/GCPFirestoreConnector.d.ts +12 -0
  130. package/dist/connectors/GCPFirestoreConnector.js +71 -0
  131. package/dist/connectors/GCPIAMConnector.d.ts +12 -0
  132. package/dist/connectors/GCPIAMConnector.js +98 -0
  133. package/dist/connectors/GCPSCCConnector.d.ts +12 -0
  134. package/dist/connectors/GCPSCCConnector.js +94 -0
  135. package/dist/connectors/GitHubActionsConnector.d.ts +12 -0
  136. package/dist/connectors/GitHubActionsConnector.js +104 -0
  137. package/dist/connectors/GitHubConnector.d.ts +12 -0
  138. package/dist/connectors/GitHubConnector.js +135 -0
  139. package/dist/connectors/GitHubCopilotConnector.d.ts +12 -0
  140. package/dist/connectors/GitHubCopilotConnector.js +72 -0
  141. package/dist/connectors/GitLabCIConnector.d.ts +12 -0
  142. package/dist/connectors/GitLabCIConnector.js +71 -0
  143. package/dist/connectors/GitLabConnector.d.ts +12 -0
  144. package/dist/connectors/GitLabConnector.js +101 -0
  145. package/dist/connectors/GitLabSASTConnector.d.ts +12 -0
  146. package/dist/connectors/GitLabSASTConnector.js +130 -0
  147. package/dist/connectors/GoogleWorkspaceConnector.d.ts +12 -0
  148. package/dist/connectors/GoogleWorkspaceConnector.js +136 -0
  149. package/dist/connectors/HelmConnector.d.ts +12 -0
  150. package/dist/connectors/HelmConnector.js +94 -0
  151. package/dist/connectors/HubSpotConnector.d.ts +12 -0
  152. package/dist/connectors/HubSpotConnector.js +77 -0
  153. package/dist/connectors/IFTTTConnector.d.ts +12 -0
  154. package/dist/connectors/IFTTTConnector.js +70 -0
  155. package/dist/connectors/ImpervaConnector.d.ts +12 -0
  156. package/dist/connectors/ImpervaConnector.js +94 -0
  157. package/dist/connectors/InfluxDBConnector.d.ts +12 -0
  158. package/dist/connectors/InfluxDBConnector.js +70 -0
  159. package/dist/connectors/IntercomConnector.d.ts +12 -0
  160. package/dist/connectors/IntercomConnector.js +69 -0
  161. package/dist/connectors/JenkinsConnector.d.ts +12 -0
  162. package/dist/connectors/JenkinsConnector.js +96 -0
  163. package/dist/connectors/JiraConnector.d.ts +12 -0
  164. package/dist/connectors/JiraConnector.js +103 -0
  165. package/dist/connectors/KafkaConnector.d.ts +12 -0
  166. package/dist/connectors/KafkaConnector.js +70 -0
  167. package/dist/connectors/KasperskyConnector.d.ts +12 -0
  168. package/dist/connectors/KasperskyConnector.js +70 -0
  169. package/dist/connectors/KubernetesConnector.d.ts +12 -0
  170. package/dist/connectors/KubernetesConnector.js +109 -0
  171. package/dist/connectors/LaceworkConnector.d.ts +13 -0
  172. package/dist/connectors/LaceworkConnector.js +143 -0
  173. package/dist/connectors/LaunchDarklyConnector.d.ts +12 -0
  174. package/dist/connectors/LaunchDarklyConnector.js +86 -0
  175. package/dist/connectors/LinodeConnector.d.ts +12 -0
  176. package/dist/connectors/LinodeConnector.js +70 -0
  177. package/dist/connectors/LookerConnector.d.ts +12 -0
  178. package/dist/connectors/LookerConnector.js +94 -0
  179. package/dist/connectors/MailchimpConnector.d.ts +12 -0
  180. package/dist/connectors/MailchimpConnector.js +71 -0
  181. package/dist/connectors/MalwarebytesConnector.d.ts +12 -0
  182. package/dist/connectors/MalwarebytesConnector.js +85 -0
  183. package/dist/connectors/McAfeeConnector.d.ts +12 -0
  184. package/dist/connectors/McAfeeConnector.js +85 -0
  185. package/dist/connectors/Microsoft365Connector.d.ts +12 -0
  186. package/dist/connectors/Microsoft365Connector.js +139 -0
  187. package/dist/connectors/MongoDBConnector.d.ts +12 -0
  188. package/dist/connectors/MongoDBConnector.js +86 -0
  189. package/dist/connectors/NamelyConnector.d.ts +12 -0
  190. package/dist/connectors/NamelyConnector.js +97 -0
  191. package/dist/connectors/Neo4jConnector.d.ts +12 -0
  192. package/dist/connectors/Neo4jConnector.js +70 -0
  193. package/dist/connectors/NetSuiteConnector.d.ts +12 -0
  194. package/dist/connectors/NetSuiteConnector.js +94 -0
  195. package/dist/connectors/NetskopeConnector.d.ts +12 -0
  196. package/dist/connectors/NetskopeConnector.js +98 -0
  197. package/dist/connectors/NexusConnector.d.ts +12 -0
  198. package/dist/connectors/NexusConnector.js +93 -0
  199. package/dist/connectors/NotionConnector.d.ts +12 -0
  200. package/dist/connectors/NotionConnector.js +109 -0
  201. package/dist/connectors/OktaConnector.d.ts +12 -0
  202. package/dist/connectors/OktaConnector.js +123 -0
  203. package/dist/connectors/OktaSystemLogConnector.d.ts +12 -0
  204. package/dist/connectors/OktaSystemLogConnector.js +129 -0
  205. package/dist/connectors/OpsgenieConnector.d.ts +12 -0
  206. package/dist/connectors/OpsgenieConnector.js +70 -0
  207. package/dist/connectors/PagerDutyConnector.d.ts +12 -0
  208. package/dist/connectors/PagerDutyConnector.js +106 -0
  209. package/dist/connectors/PalantirConnector.d.ts +12 -0
  210. package/dist/connectors/PalantirConnector.js +95 -0
  211. package/dist/connectors/PaloAltoPrismaCloudConnector.d.ts +12 -0
  212. package/dist/connectors/PaloAltoPrismaCloudConnector.js +110 -0
  213. package/dist/connectors/PingFederateConnector.d.ts +12 -0
  214. package/dist/connectors/PingFederateConnector.js +97 -0
  215. package/dist/connectors/PostgreSQLCloudConnector.d.ts +12 -0
  216. package/dist/connectors/PostgreSQLCloudConnector.js +70 -0
  217. package/dist/connectors/PowerBIConnector.d.ts +12 -0
  218. package/dist/connectors/PowerBIConnector.js +95 -0
  219. package/dist/connectors/PrismaCloudConnector.d.ts +12 -0
  220. package/dist/connectors/PrismaCloudConnector.js +147 -0
  221. package/dist/connectors/QualysConnector.d.ts +12 -0
  222. package/dist/connectors/QualysConnector.js +96 -0
  223. package/dist/connectors/QualysScannerConnector.d.ts +12 -0
  224. package/dist/connectors/QualysScannerConnector.js +131 -0
  225. package/dist/connectors/QuickBooksConnector.d.ts +12 -0
  226. package/dist/connectors/QuickBooksConnector.js +97 -0
  227. package/dist/connectors/RabbitMQConnector.d.ts +12 -0
  228. package/dist/connectors/RabbitMQConnector.js +69 -0
  229. package/dist/connectors/RadwareConnector.d.ts +12 -0
  230. package/dist/connectors/RadwareConnector.js +94 -0
  231. package/dist/connectors/RedisCloudConnector.d.ts +12 -0
  232. package/dist/connectors/RedisCloudConnector.js +70 -0
  233. package/dist/connectors/RingCentralConnector.d.ts +12 -0
  234. package/dist/connectors/RingCentralConnector.js +94 -0
  235. package/dist/connectors/SAPSuccessFactorsConnector.d.ts +12 -0
  236. package/dist/connectors/SAPSuccessFactorsConnector.js +103 -0
  237. package/dist/connectors/SailPointConnector.d.ts +12 -0
  238. package/dist/connectors/SailPointConnector.js +97 -0
  239. package/dist/connectors/SalesforceConnector.d.ts +12 -0
  240. package/dist/connectors/SalesforceConnector.js +91 -0
  241. package/dist/connectors/SendGridConnector.d.ts +12 -0
  242. package/dist/connectors/SendGridConnector.js +69 -0
  243. package/dist/connectors/SentinelOneConnector.d.ts +12 -0
  244. package/dist/connectors/SentinelOneConnector.js +89 -0
  245. package/dist/connectors/ServiceNowConnector.d.ts +12 -0
  246. package/dist/connectors/ServiceNowConnector.js +123 -0
  247. package/dist/connectors/SlackConnector.d.ts +12 -0
  248. package/dist/connectors/SlackConnector.js +109 -0
  249. package/dist/connectors/SnowflakeConnector.d.ts +12 -0
  250. package/dist/connectors/SnowflakeConnector.js +105 -0
  251. package/dist/connectors/SnykConnector.d.ts +12 -0
  252. package/dist/connectors/SnykConnector.js +84 -0
  253. package/dist/connectors/SnykMonitorConnector.d.ts +12 -0
  254. package/dist/connectors/SnykMonitorConnector.js +131 -0
  255. package/dist/connectors/SophosConnector.d.ts +12 -0
  256. package/dist/connectors/SophosConnector.js +87 -0
  257. package/dist/connectors/SpinnakerConnector.d.ts +12 -0
  258. package/dist/connectors/SpinnakerConnector.js +70 -0
  259. package/dist/connectors/SplunkConnector.d.ts +12 -0
  260. package/dist/connectors/SplunkConnector.js +126 -0
  261. package/dist/connectors/StripeConnector.d.ts +12 -0
  262. package/dist/connectors/StripeConnector.js +97 -0
  263. package/dist/connectors/TableauConnector.d.ts +12 -0
  264. package/dist/connectors/TableauConnector.js +101 -0
  265. package/dist/connectors/TaniumConnector.d.ts +12 -0
  266. package/dist/connectors/TaniumConnector.js +97 -0
  267. package/dist/connectors/TeamCityConnector.d.ts +12 -0
  268. package/dist/connectors/TeamCityConnector.js +71 -0
  269. package/dist/connectors/TeamsConnector.d.ts +12 -0
  270. package/dist/connectors/TeamsConnector.js +96 -0
  271. package/dist/connectors/TenableIOConnector.d.ts +12 -0
  272. package/dist/connectors/TenableIOConnector.js +130 -0
  273. package/dist/connectors/TerraformCloudConnector.d.ts +12 -0
  274. package/dist/connectors/TerraformCloudConnector.js +106 -0
  275. package/dist/connectors/TravisCIConnector.d.ts +12 -0
  276. package/dist/connectors/TravisCIConnector.js +95 -0
  277. package/dist/connectors/TrendMicroConnector.d.ts +12 -0
  278. package/dist/connectors/TrendMicroConnector.js +85 -0
  279. package/dist/connectors/TwilioConnector.d.ts +12 -0
  280. package/dist/connectors/TwilioConnector.js +70 -0
  281. package/dist/connectors/VercelConnector.d.ts +12 -0
  282. package/dist/connectors/VercelConnector.js +70 -0
  283. package/dist/connectors/VultrConnector.d.ts +12 -0
  284. package/dist/connectors/VultrConnector.js +70 -0
  285. package/dist/connectors/WebexConnector.d.ts +12 -0
  286. package/dist/connectors/WebexConnector.js +94 -0
  287. package/dist/connectors/WizConnector.d.ts +12 -0
  288. package/dist/connectors/WizConnector.js +172 -0
  289. package/dist/connectors/WorkdayConnector.d.ts +12 -0
  290. package/dist/connectors/WorkdayConnector.js +100 -0
  291. package/dist/connectors/XeroConnector.d.ts +12 -0
  292. package/dist/connectors/XeroConnector.js +96 -0
  293. package/dist/connectors/ZapierConnector.d.ts +12 -0
  294. package/dist/connectors/ZapierConnector.js +70 -0
  295. package/dist/connectors/ZendeskConnector.d.ts +12 -0
  296. package/dist/connectors/ZendeskConnector.js +71 -0
  297. package/dist/connectors/ZenefitsConnector.d.ts +12 -0
  298. package/dist/connectors/ZenefitsConnector.js +93 -0
  299. package/dist/connectors/ZoomConnector.d.ts +12 -0
  300. package/dist/connectors/ZoomConnector.js +97 -0
  301. package/dist/connectors/ZscalerConnector.d.ts +12 -0
  302. package/dist/connectors/ZscalerConnector.js +97 -0
  303. package/dist/connectors/index.d.ts +150 -0
  304. package/dist/connectors/index.js +157 -0
  305. package/dist/index.d.ts +5 -0
  306. package/dist/index.js +16 -0
  307. package/dist/index.test.d.ts +1 -0
  308. package/dist/index.test.js +139 -0
  309. package/dist/types.d.ts +57 -0
  310. package/dist/types.js +8 -0
  311. package/package.json +33 -0
@@ -0,0 +1,172 @@
1
+ import { hashEvidence, generateEvidenceId } from "../types.js";
2
+ const capabilities = [
3
+ {
4
+ id: "wiz-issues",
5
+ name: "Security Issues",
6
+ description: "Fetch Wiz security issues with severity and blast radius",
7
+ evidenceCategories: ["vulnerability_management", "cloud_security"],
8
+ },
9
+ {
10
+ id: "wiz-vulnerabilities",
11
+ name: "Vulnerability Findings",
12
+ description: "Fetch Wiz vulnerability scan results across cloud resources",
13
+ evidenceCategories: ["vulnerability_management", "asset_management"],
14
+ },
15
+ {
16
+ id: "wiz-misconfigs",
17
+ name: "Misconfigurations",
18
+ description: "Fetch cloud misconfiguration findings and compliance gaps",
19
+ evidenceCategories: ["compliance", "configuration"],
20
+ },
21
+ {
22
+ id: "wiz-iam",
23
+ name: "IAM Analysis",
24
+ description: "Fetch identity and access management security findings",
25
+ evidenceCategories: ["access_control", "identity_verification"],
26
+ },
27
+ ];
28
+ export class WizConnector {
29
+ id = "wiz";
30
+ name = "Wiz";
31
+ category = "cloud_provider";
32
+ authType = "oauth2";
33
+ capabilities = capabilities;
34
+ frameworks = [
35
+ "SOC2",
36
+ "ISO27001",
37
+ "NIST_CSF",
38
+ "PCI_DSS",
39
+ "CIS",
40
+ ];
41
+ async getToken(config) {
42
+ const base = config.baseUrl || "https://api.us1.app.wiz.io";
43
+ const resp = await fetch(`${base}/graphql/token`, {
44
+ method: "POST",
45
+ headers: { "Content-Type": "application/json" },
46
+ body: JSON.stringify({
47
+ query: `mutation { createServiceAccountToken(input: { clientId: "${config.clientId}", clientSecret: "${config.clientSecret}" }) { token } }`,
48
+ }),
49
+ });
50
+ const data = (await resp.json());
51
+ const authData = data.data;
52
+ const createToken = authData?.createServiceAccountToken;
53
+ return createToken?.token || "";
54
+ }
55
+ async testConnection(config) {
56
+ try {
57
+ const token = await this.getToken(config);
58
+ const base = config.baseUrl || "https://api.us1.app.wiz.io";
59
+ const resp = await fetch(`${base}/graphql`, {
60
+ method: "POST",
61
+ headers: {
62
+ Authorization: `Bearer ${token}`,
63
+ "Content-Type": "application/json",
64
+ },
65
+ body: JSON.stringify({ query: "{ projects(first: 1) { nodes { id } } }" }),
66
+ });
67
+ return resp.ok;
68
+ }
69
+ catch {
70
+ return false;
71
+ }
72
+ }
73
+ async collectEvidence(config) {
74
+ const artifacts = [];
75
+ const now = new Date().toISOString();
76
+ const token = await this.getToken(config);
77
+ const base = config.baseUrl || "https://api.us1.app.wiz.io";
78
+ const headers = {
79
+ Authorization: `Bearer ${token}`,
80
+ "Content-Type": "application/json",
81
+ };
82
+ const issuesQuery = `query { issues(first: 100, filterBy: {severity: [CRITICAL, HIGH]}) { nodes { id severity title } } }`;
83
+ const issues = await fetch(`${base}/graphql`, {
84
+ method: "POST",
85
+ headers,
86
+ body: JSON.stringify({ query: issuesQuery }),
87
+ })
88
+ .then((r) => r.json())
89
+ .catch(() => ({ data: { issues: { nodes: [] } } }));
90
+ const issueNodes = issues.data?.issues?.nodes || [];
91
+ artifacts.push({
92
+ id: generateEvidenceId(),
93
+ connectorId: this.id,
94
+ capabilityId: "wiz-issues",
95
+ timestamp: now,
96
+ hash: hashEvidence({ count: issueNodes.length }),
97
+ framework: "SOC2",
98
+ controlId: "CC7.2",
99
+ source: "wiz/security-issues",
100
+ status: issueNodes.length === 0 ? "compliant" : "non_compliant",
101
+ data: { criticalHighIssues: issueNodes.length },
102
+ metadata: {},
103
+ });
104
+ const vulnQuery = `query { vulnerabilities(first: 100, filterBy: {severity: [CRITICAL, HIGH]}) { nodes { id severity name cveId } } }`;
105
+ const vulns = await fetch(`${base}/graphql`, {
106
+ method: "POST",
107
+ headers,
108
+ body: JSON.stringify({ query: vulnQuery }),
109
+ })
110
+ .then((r) => r.json())
111
+ .catch(() => ({ data: { vulnerabilities: { nodes: [] } } }));
112
+ const vulnNodes = vulns.data?.vulnerabilities?.nodes || [];
113
+ artifacts.push({
114
+ id: generateEvidenceId(),
115
+ connectorId: this.id,
116
+ capabilityId: "wiz-vulnerabilities",
117
+ timestamp: now,
118
+ hash: hashEvidence({ count: vulnNodes.length }),
119
+ framework: "NIST_CSF",
120
+ controlId: "ID.RA",
121
+ source: "wiz/vulnerabilities",
122
+ status: vulnNodes.length === 0 ? "compliant" : "non_compliant",
123
+ data: { vulnerabilities: vulnNodes.length },
124
+ metadata: {},
125
+ });
126
+ const misconfigQuery = `query { misconfigurations(first: 100) { nodes { id severity title cloudPlatform } } }`;
127
+ const misconfigs = await fetch(`${base}/graphql`, {
128
+ method: "POST",
129
+ headers,
130
+ body: JSON.stringify({ query: misconfigQuery }),
131
+ })
132
+ .then((r) => r.json())
133
+ .catch(() => ({ data: { misconfigurations: { nodes: [] } } }));
134
+ const misconfigNodes = misconfigs.data?.misconfigurations?.nodes || [];
135
+ artifacts.push({
136
+ id: generateEvidenceId(),
137
+ connectorId: this.id,
138
+ capabilityId: "wiz-misconfigs",
139
+ timestamp: now,
140
+ hash: hashEvidence({ count: misconfigNodes.length }),
141
+ framework: "ISO27001",
142
+ controlId: "A.12.1.1",
143
+ source: "wiz/misconfigurations",
144
+ status: misconfigNodes.length === 0 ? "compliant" : "non_compliant",
145
+ data: { misconfigurations: misconfigNodes.length },
146
+ metadata: {},
147
+ });
148
+ const iamQuery = `query { iamFindings(first: 50) { nodes { id severity entityType findingType } } }`;
149
+ const iam = await fetch(`${base}/graphql`, {
150
+ method: "POST",
151
+ headers,
152
+ body: JSON.stringify({ query: iamQuery }),
153
+ })
154
+ .then((r) => r.json())
155
+ .catch(() => ({ data: { iamFindings: { nodes: [] } } }));
156
+ const iamNodes = iam.data?.iamFindings?.nodes || [];
157
+ artifacts.push({
158
+ id: generateEvidenceId(),
159
+ connectorId: this.id,
160
+ capabilityId: "wiz-iam",
161
+ timestamp: now,
162
+ hash: hashEvidence({ count: iamNodes.length }),
163
+ framework: "CIS",
164
+ controlId: "1.16",
165
+ source: "wiz/iam-analysis",
166
+ status: iamNodes.length === 0 ? "compliant" : "non_compliant",
167
+ data: { iamFindings: iamNodes.length },
168
+ metadata: {},
169
+ });
170
+ return artifacts;
171
+ }
172
+ }
@@ -0,0 +1,12 @@
1
+ import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
2
+ export declare class WorkdayConnector implements IntegrationConnector {
3
+ readonly id = "workday";
4
+ readonly name = "Workday";
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,100 @@
1
+ import { hashEvidence, generateEvidenceId } from "../types.js";
2
+ const capabilities = [
3
+ {
4
+ id: "workday-employees",
5
+ name: "Employee Data",
6
+ description: "Fetch employee records, org hierarchy, and status",
7
+ evidenceCategories: ["access_control", "data_protection"],
8
+ },
9
+ {
10
+ id: "workday-access",
11
+ name: "Access Reviews",
12
+ description: "Fetch role-based access and access certification status",
13
+ evidenceCategories: ["access_control", "compliance"],
14
+ },
15
+ {
16
+ id: "workday-compliance",
17
+ name: "Compliance Tasks",
18
+ description: "Fetch policy compliance assignments and completion status",
19
+ evidenceCategories: ["compliance", "monitoring"],
20
+ },
21
+ {
22
+ id: "workday-separation",
23
+ name: "Segregation of Duties",
24
+ description: "Fetch SoD conflict detection and mitigation status",
25
+ evidenceCategories: ["access_control", "compliance"],
26
+ },
27
+ ];
28
+ export class WorkdayConnector {
29
+ id = "workday";
30
+ name = "Workday";
31
+ category = "hr";
32
+ authType = "api_key";
33
+ capabilities = capabilities;
34
+ frameworks = [
35
+ "SOC2",
36
+ "ISO27001",
37
+ "NIST_CSF",
38
+ "HIPAA",
39
+ "GDPR",
40
+ ];
41
+ async fetchApi(config, endpoint) {
42
+ const base = config.baseUrl || "https://www.workday.com";
43
+ const tenant = config.extra?.tenant || "wd1";
44
+ const resp = await fetch(`${base}/api/v1/${tenant}${endpoint}`, {
45
+ headers: {
46
+ Authorization: `Bearer ${config.apiToken}`,
47
+ "Content-Type": "application/json",
48
+ },
49
+ });
50
+ if (!resp.ok)
51
+ throw new Error(`Workday API ${resp.status}: ${resp.statusText}`);
52
+ return (await resp.json());
53
+ }
54
+ async testConnection(config) {
55
+ try {
56
+ await this.fetchApi(config, "/me");
57
+ return true;
58
+ }
59
+ catch {
60
+ return false;
61
+ }
62
+ }
63
+ async collectEvidence(config) {
64
+ const artifacts = [];
65
+ const now = new Date().toISOString();
66
+ const employees = await this.fetchApi(config, "/workers?limit=100").catch(() => ({
67
+ data: [],
68
+ }));
69
+ artifacts.push({
70
+ id: generateEvidenceId(),
71
+ connectorId: this.id,
72
+ capabilityId: "workday-employees",
73
+ timestamp: now,
74
+ hash: hashEvidence(employees),
75
+ framework: "SOC2",
76
+ controlId: "CC6.1",
77
+ source: "workday/workers",
78
+ status: employees.data?.length > 0 ? "compliant" : "unknown",
79
+ data: { employeeCount: employees.data?.length || 0 },
80
+ metadata: {},
81
+ });
82
+ const accessReviews = await this.fetchApi(config, "/access-reviews").catch(() => ({
83
+ data: [],
84
+ }));
85
+ artifacts.push({
86
+ id: generateEvidenceId(),
87
+ connectorId: this.id,
88
+ capabilityId: "workday-access",
89
+ timestamp: now,
90
+ hash: hashEvidence(accessReviews),
91
+ framework: "ISO27001",
92
+ controlId: "A.6.2.1",
93
+ source: "workday/access-reviews",
94
+ status: accessReviews.data?.length > 0 ? "compliant" : "non_compliant",
95
+ data: { activeReviews: accessReviews.data?.length || 0 },
96
+ metadata: {},
97
+ });
98
+ return artifacts;
99
+ }
100
+ }
@@ -0,0 +1,12 @@
1
+ import type { IntegrationConnector, ConnectorConfig, EvidenceArtifact, IntegrationCapability, ComplianceFramework } from "../types.js";
2
+ export declare class XeroConnector implements IntegrationConnector {
3
+ readonly id = "xero";
4
+ readonly name = "Xero";
5
+ readonly category: "finance";
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
+ }
@@ -0,0 +1,96 @@
1
+ import { hashEvidence, generateEvidenceId } from "../types.js";
2
+ const capabilities = [
3
+ {
4
+ id: "xero-users",
5
+ name: "User Access",
6
+ description: "Fetch Xero user roles and organisation permissions",
7
+ evidenceCategories: ["access_control", "configuration"],
8
+ },
9
+ {
10
+ id: "xero-contacts",
11
+ name: "Contact Management",
12
+ description: "Fetch contact access controls and sharing settings",
13
+ evidenceCategories: ["access_control", "data_protection"],
14
+ },
15
+ {
16
+ id: "xero-approvals",
17
+ name: "Approval Workflows",
18
+ description: "Fetch purchase order and invoice approval rules",
19
+ evidenceCategories: ["change_management", "compliance"],
20
+ },
21
+ {
22
+ id: "xero-audit",
23
+ name: "Audit Trail",
24
+ description: "Fetch change history and user activity logs",
25
+ evidenceCategories: ["monitoring", "access_control"],
26
+ },
27
+ ];
28
+ export class XeroConnector {
29
+ id = "xero";
30
+ name = "Xero";
31
+ category = "finance";
32
+ authType = "oauth2";
33
+ capabilities = capabilities;
34
+ frameworks = [
35
+ "SOC2",
36
+ "ISO27001",
37
+ "NIST_CSF",
38
+ "GDPR",
39
+ ];
40
+ async fetchApi(config, endpoint) {
41
+ const base = config.baseUrl || "https://api.xero.com";
42
+ const resp = await fetch(`${base}${endpoint}`, {
43
+ headers: {
44
+ Authorization: `Bearer ${config.apiToken}`,
45
+ "Content-Type": "application/json",
46
+ Accept: "application/json",
47
+ },
48
+ });
49
+ if (!resp.ok)
50
+ throw new Error(`Xero API ${resp.status}: ${resp.statusText}`);
51
+ return (await resp.json());
52
+ }
53
+ async testConnection(config) {
54
+ try {
55
+ await this.fetchApi(config, "/connections");
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 tenantId = config.extra?.tenantId || "";
66
+ const users = await this.fetchApi(config, `/api.xro/2.0/users`).catch(() => ({ Users: [] }));
67
+ artifacts.push({
68
+ id: generateEvidenceId(),
69
+ connectorId: this.id,
70
+ capabilityId: "xero-users",
71
+ timestamp: now,
72
+ hash: hashEvidence(users),
73
+ framework: "SOC2",
74
+ controlId: "CC6.1",
75
+ source: `xero/${tenantId}/users`,
76
+ status: users.Users?.length > 0 ? "compliant" : "unknown",
77
+ data: { userCount: users.Users?.length || 0 },
78
+ metadata: { tenantId },
79
+ });
80
+ const org = await this.fetchApi(config, `/api.xro/2.0/organisation`).catch(() => ({ Organisations: [] }));
81
+ artifacts.push({
82
+ id: generateEvidenceId(),
83
+ connectorId: this.id,
84
+ capabilityId: "xero-approvals",
85
+ timestamp: now,
86
+ hash: hashEvidence(org),
87
+ framework: "ISO27001",
88
+ controlId: "A.6.2.1",
89
+ source: `xero/${tenantId}/organisation`,
90
+ status: "partial",
91
+ data: org,
92
+ metadata: { tenantId },
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 ZapierConnector implements IntegrationConnector {
3
+ readonly id = "zapier";
4
+ readonly name = "Zapier";
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,70 @@
1
+ import { hashEvidence, generateEvidenceId } from "../types.js";
2
+ const capabilities = [
3
+ {
4
+ id: "zapier-zaps",
5
+ name: "Zap Workflows",
6
+ description: "Fetch Zapier zap configurations, task history, and error rates",
7
+ evidenceCategories: ["automation", "configuration"],
8
+ },
9
+ {
10
+ id: "zapier-connections",
11
+ name: "App Connections",
12
+ description: "Fetch connected app credentials and OAuth token status",
13
+ evidenceCategories: ["access_control", "secret_management"],
14
+ },
15
+ {
16
+ id: "zapier-audit",
17
+ name: "Task Audit Log",
18
+ description: "Fetch Zapier task execution history and failure audit events",
19
+ evidenceCategories: ["monitoring", "audit"],
20
+ },
21
+ ];
22
+ export class ZapierConnector {
23
+ id = "zapier";
24
+ name = "Zapier";
25
+ category = "ci_cd";
26
+ authType = "api_key";
27
+ capabilities = capabilities;
28
+ frameworks = ["SOC2", "ISO27001"];
29
+ async fetchApi(config, endpoint) {
30
+ const base = config.baseUrl || "https://api.zapier.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(`Zapier API ${resp.status}: ${resp.statusText}`);
39
+ return (await resp.json());
40
+ }
41
+ async testConnection(config) {
42
+ try {
43
+ await this.fetchApi(config, "/zaps?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 zaps = await this.fetchApi(config, "/zaps?limit=100").catch(() => ({ items: [] }));
54
+ const zapList = (zaps.items || []);
55
+ artifacts.push({
56
+ id: generateEvidenceId(),
57
+ connectorId: this.id,
58
+ capabilityId: "zapier-zaps",
59
+ timestamp: now,
60
+ hash: hashEvidence({ zapCount: zapList.length }),
61
+ framework: "SOC2",
62
+ controlId: "CC8.1",
63
+ source: "zapier/zaps",
64
+ status: "unknown",
65
+ data: { zapCount: zapList.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 ZendeskConnector implements IntegrationConnector {
3
+ readonly id = "zendesk";
4
+ readonly name = "Zendesk";
5
+ readonly category: "incident_management";
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: "zendesk-tickets",
5
+ name: "Support Tickets",
6
+ description: "Fetch Zendesk ticket queue, SLA compliance, and resolution metrics",
7
+ evidenceCategories: ["incident_management", "monitoring"],
8
+ },
9
+ {
10
+ id: "zendesk-security",
11
+ name: "Security Settings",
12
+ description: "Fetch Zendesk SSO, 2FA enforcement, and API access controls",
13
+ evidenceCategories: ["access_control", "configuration"],
14
+ },
15
+ {
16
+ id: "zendesk-audit",
17
+ name: "Audit Logs",
18
+ description: "Fetch Zendesk audit log events for ticket and user changes",
19
+ evidenceCategories: ["audit", "change_management"],
20
+ },
21
+ ];
22
+ export class ZendeskConnector {
23
+ id = "zendesk";
24
+ name = "Zendesk";
25
+ category = "incident_management";
26
+ authType = "bearer_token";
27
+ capabilities = capabilities;
28
+ frameworks = ["SOC2", "ISO27001"];
29
+ async fetchApi(config, endpoint) {
30
+ const subdomain = config.extra?.subdomain || "default";
31
+ const base = config.baseUrl || `https://${subdomain}.zendesk.com/api/v2`;
32
+ const resp = await fetch(`${base}${endpoint}`, {
33
+ headers: {
34
+ Authorization: `Bearer ${config.apiToken}`,
35
+ "Content-Type": "application/json",
36
+ },
37
+ });
38
+ if (!resp.ok)
39
+ throw new Error(`Zendesk API ${resp.status}: ${resp.statusText}`);
40
+ return (await resp.json());
41
+ }
42
+ async testConnection(config) {
43
+ try {
44
+ await this.fetchApi(config, "/users/me.json");
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 tickets = await this.fetchApi(config, "/tickets.json?per_page=100&sort_by=created_at&sort_order=desc").catch(() => ({ tickets: [] }));
55
+ const ticketList = (tickets.tickets || []);
56
+ artifacts.push({
57
+ id: generateEvidenceId(),
58
+ connectorId: this.id,
59
+ capabilityId: "zendesk-tickets",
60
+ timestamp: now,
61
+ hash: hashEvidence({ ticketCount: ticketList.length }),
62
+ framework: "SOC2",
63
+ controlId: "CC7.3",
64
+ source: "zendesk/tickets",
65
+ status: "unknown",
66
+ data: { recentTickets: ticketList.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 ZenefitsConnector implements IntegrationConnector {
3
+ readonly id = "zenefits";
4
+ readonly name = "Zenefits";
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,93 @@
1
+ import { hashEvidence, generateEvidenceId } from "../types.js";
2
+ const capabilities = [
3
+ {
4
+ id: "zenefits-employees",
5
+ name: "Employee Directory",
6
+ description: "Fetch employee profiles and organizational hierarchy",
7
+ evidenceCategories: ["access_control", "data_protection"],
8
+ },
9
+ {
10
+ id: "zenefits-policies",
11
+ name: "Benefits Policies",
12
+ description: "Fetch benefits enrollment and policy compliance",
13
+ evidenceCategories: ["compliance", "configuration"],
14
+ },
15
+ {
16
+ id: "zenefits-onboarding",
17
+ name: "Onboarding Compliance",
18
+ description: "Fetch new hire onboarding task completion status",
19
+ evidenceCategories: ["compliance", "change_management"],
20
+ },
21
+ {
22
+ id: "zenefits-timeoff",
23
+ name: "Time Off Policies",
24
+ description: "Fetch PTO policies and accrual compliance",
25
+ evidenceCategories: ["compliance", "monitoring"],
26
+ },
27
+ ];
28
+ export class ZenefitsConnector {
29
+ id = "zenefits";
30
+ name = "Zenefits";
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://rest.zenefits.com";
41
+ const resp = await fetch(`${base}${endpoint}`, {
42
+ headers: {
43
+ Authorization: `Bearer ${config.apiToken}`,
44
+ "Content-Type": "application/json",
45
+ },
46
+ });
47
+ if (!resp.ok)
48
+ throw new Error(`Zenefits API ${resp.status}: ${resp.statusText}`);
49
+ return (await resp.json());
50
+ }
51
+ async testConnection(config) {
52
+ try {
53
+ await this.fetchApi(config, "/core/people");
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 people = await this.fetchApi(config, "/core/people").catch(() => ({ data: [] }));
64
+ artifacts.push({
65
+ id: generateEvidenceId(),
66
+ connectorId: this.id,
67
+ capabilityId: "zenefits-employees",
68
+ timestamp: now,
69
+ hash: hashEvidence(people),
70
+ framework: "SOC2",
71
+ controlId: "CC6.1",
72
+ source: "zenefits/people",
73
+ status: people.data?.length > 0 ? "compliant" : "unknown",
74
+ data: { employeeCount: people.data?.length || 0 },
75
+ metadata: {},
76
+ });
77
+ const benefits = await this.fetchApi(config, "/benefits/plans").catch(() => ({ data: [] }));
78
+ artifacts.push({
79
+ id: generateEvidenceId(),
80
+ connectorId: this.id,
81
+ capabilityId: "zenefits-policies",
82
+ timestamp: now,
83
+ hash: hashEvidence(benefits),
84
+ framework: "ISO27001",
85
+ controlId: "A.6.2.1",
86
+ source: "zenefits/benefits",
87
+ status: benefits.data?.length > 0 ? "compliant" : "non_compliant",
88
+ data: { benefitPlans: benefits.data?.length || 0 },
89
+ metadata: {},
90
+ });
91
+ return artifacts;
92
+ }
93
+ }