vaspera 2.10.1 → 2.12.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 (166) hide show
  1. package/dist/__tests__/audit-trail.test.d.ts +7 -0
  2. package/dist/__tests__/audit-trail.test.d.ts.map +1 -0
  3. package/dist/__tests__/audit-trail.test.js +336 -0
  4. package/dist/__tests__/audit-trail.test.js.map +1 -0
  5. package/dist/__tests__/property-test-helpers.d.ts +1 -1
  6. package/dist/action/pr-comment.test.js +9 -0
  7. package/dist/action/pr-comment.test.js.map +1 -1
  8. package/dist/action/sarif-upload.test.js +9 -0
  9. package/dist/action/sarif-upload.test.js.map +1 -1
  10. package/dist/autofix/ast/__tests__/typescript.test.d.ts +5 -0
  11. package/dist/autofix/ast/__tests__/typescript.test.d.ts.map +1 -0
  12. package/dist/autofix/ast/__tests__/typescript.test.js +210 -0
  13. package/dist/autofix/ast/__tests__/typescript.test.js.map +1 -0
  14. package/dist/autofix/ast/index.d.ts +11 -0
  15. package/dist/autofix/ast/index.d.ts.map +1 -0
  16. package/dist/autofix/ast/index.js +11 -0
  17. package/dist/autofix/ast/index.js.map +1 -0
  18. package/dist/autofix/ast/types.d.ts +77 -0
  19. package/dist/autofix/ast/types.d.ts.map +1 -0
  20. package/dist/autofix/ast/types.js +9 -0
  21. package/dist/autofix/ast/types.js.map +1 -0
  22. package/dist/autofix/ast/typescript.d.ts +17 -0
  23. package/dist/autofix/ast/typescript.d.ts.map +1 -0
  24. package/dist/autofix/ast/typescript.js +427 -0
  25. package/dist/autofix/ast/typescript.js.map +1 -0
  26. package/dist/autofix/constitution.schema.d.ts +21 -21
  27. package/dist/autofix/index.d.ts +1 -0
  28. package/dist/autofix/index.d.ts.map +1 -1
  29. package/dist/autofix/index.js +2 -0
  30. package/dist/autofix/index.js.map +1 -1
  31. package/dist/config/flags.d.ts +6 -6
  32. package/dist/history/store.d.ts +55 -1
  33. package/dist/history/store.d.ts.map +1 -1
  34. package/dist/history/store.js +152 -4
  35. package/dist/history/store.js.map +1 -1
  36. package/dist/history/types.d.ts +9 -5
  37. package/dist/history/types.d.ts.map +1 -1
  38. package/dist/history/verify.d.ts.map +1 -1
  39. package/dist/history/verify.js +5 -3
  40. package/dist/history/verify.js.map +1 -1
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +627 -0
  43. package/dist/index.js.map +1 -1
  44. package/dist/integrations/siem/datadog.d.ts +44 -0
  45. package/dist/integrations/siem/datadog.d.ts.map +1 -0
  46. package/dist/integrations/siem/datadog.js +211 -0
  47. package/dist/integrations/siem/datadog.js.map +1 -0
  48. package/dist/integrations/siem/format.d.ts +59 -0
  49. package/dist/integrations/siem/format.d.ts.map +1 -0
  50. package/dist/integrations/siem/format.js +360 -0
  51. package/dist/integrations/siem/format.js.map +1 -0
  52. package/dist/integrations/siem/index.d.ts +56 -0
  53. package/dist/integrations/siem/index.d.ts.map +1 -0
  54. package/dist/integrations/siem/index.js +117 -0
  55. package/dist/integrations/siem/index.js.map +1 -0
  56. package/dist/integrations/siem/sentinel.d.ts +53 -0
  57. package/dist/integrations/siem/sentinel.d.ts.map +1 -0
  58. package/dist/integrations/siem/sentinel.js +231 -0
  59. package/dist/integrations/siem/sentinel.js.map +1 -0
  60. package/dist/integrations/siem/splunk.d.ts +46 -0
  61. package/dist/integrations/siem/splunk.d.ts.map +1 -0
  62. package/dist/integrations/siem/splunk.js +210 -0
  63. package/dist/integrations/siem/splunk.js.map +1 -0
  64. package/dist/integrations/siem/types.d.ts +210 -0
  65. package/dist/integrations/siem/types.d.ts.map +1 -0
  66. package/dist/integrations/siem/types.js +9 -0
  67. package/dist/integrations/siem/types.js.map +1 -0
  68. package/dist/persistence/__tests__/persistence.test.d.ts +5 -0
  69. package/dist/persistence/__tests__/persistence.test.d.ts.map +1 -0
  70. package/dist/persistence/__tests__/persistence.test.js +369 -0
  71. package/dist/persistence/__tests__/persistence.test.js.map +1 -0
  72. package/dist/persistence/db.d.ts +15 -0
  73. package/dist/persistence/db.d.ts.map +1 -0
  74. package/dist/persistence/db.js +79 -0
  75. package/dist/persistence/db.js.map +1 -0
  76. package/dist/persistence/index.d.ts +66 -0
  77. package/dist/persistence/index.d.ts.map +1 -0
  78. package/dist/persistence/index.js +143 -0
  79. package/dist/persistence/index.js.map +1 -0
  80. package/dist/persistence/migrations/index.d.ts +10 -0
  81. package/dist/persistence/migrations/index.d.ts.map +1 -0
  82. package/dist/persistence/migrations/index.js +125 -0
  83. package/dist/persistence/migrations/index.js.map +1 -0
  84. package/dist/persistence/repositories/findings.d.ts +41 -0
  85. package/dist/persistence/repositories/findings.d.ts.map +1 -0
  86. package/dist/persistence/repositories/findings.js +238 -0
  87. package/dist/persistence/repositories/findings.js.map +1 -0
  88. package/dist/persistence/repositories/projects.d.ts +22 -0
  89. package/dist/persistence/repositories/projects.d.ts.map +1 -0
  90. package/dist/persistence/repositories/projects.js +71 -0
  91. package/dist/persistence/repositories/projects.js.map +1 -0
  92. package/dist/persistence/repositories/scans.d.ts +30 -0
  93. package/dist/persistence/repositories/scans.d.ts.map +1 -0
  94. package/dist/persistence/repositories/scans.js +107 -0
  95. package/dist/persistence/repositories/scans.js.map +1 -0
  96. package/dist/persistence/repositories/trends.d.ts +42 -0
  97. package/dist/persistence/repositories/trends.d.ts.map +1 -0
  98. package/dist/persistence/repositories/trends.js +178 -0
  99. package/dist/persistence/repositories/trends.js.map +1 -0
  100. package/dist/persistence/types.d.ts +105 -0
  101. package/dist/persistence/types.d.ts.map +1 -0
  102. package/dist/persistence/types.js +13 -0
  103. package/dist/persistence/types.js.map +1 -0
  104. package/dist/plugins/types.d.ts +2 -2
  105. package/dist/scanners/ai-code/types.d.ts +12 -12
  106. package/dist/scanners/cache.d.ts.map +1 -1
  107. package/dist/scanners/cache.js +9 -0
  108. package/dist/scanners/cache.js.map +1 -1
  109. package/dist/scanners/dast.d.ts +40 -0
  110. package/dist/scanners/dast.d.ts.map +1 -0
  111. package/dist/scanners/dast.js +228 -0
  112. package/dist/scanners/dast.js.map +1 -0
  113. package/dist/scanners/deploy/types.d.ts +19 -19
  114. package/dist/scanners/detection/__tests__/detection.test.d.ts +5 -0
  115. package/dist/scanners/detection/__tests__/detection.test.d.ts.map +1 -0
  116. package/dist/scanners/detection/__tests__/detection.test.js +265 -0
  117. package/dist/scanners/detection/__tests__/detection.test.js.map +1 -0
  118. package/dist/scanners/detection/engines/ast-query.d.ts +23 -0
  119. package/dist/scanners/detection/engines/ast-query.d.ts.map +1 -0
  120. package/dist/scanners/detection/engines/ast-query.js +232 -0
  121. package/dist/scanners/detection/engines/ast-query.js.map +1 -0
  122. package/dist/scanners/detection/engines/data-flow.d.ts +12 -0
  123. package/dist/scanners/detection/engines/data-flow.d.ts.map +1 -0
  124. package/dist/scanners/detection/engines/data-flow.js +269 -0
  125. package/dist/scanners/detection/engines/data-flow.js.map +1 -0
  126. package/dist/scanners/detection/index.d.ts +29 -0
  127. package/dist/scanners/detection/index.d.ts.map +1 -0
  128. package/dist/scanners/detection/index.js +140 -0
  129. package/dist/scanners/detection/index.js.map +1 -0
  130. package/dist/scanners/detection/rules/builtin.d.ts +14 -0
  131. package/dist/scanners/detection/rules/builtin.d.ts.map +1 -0
  132. package/dist/scanners/detection/rules/builtin.js +307 -0
  133. package/dist/scanners/detection/rules/builtin.js.map +1 -0
  134. package/dist/scanners/detection/rules/loader.d.ts +19 -0
  135. package/dist/scanners/detection/rules/loader.d.ts.map +1 -0
  136. package/dist/scanners/detection/rules/loader.js +111 -0
  137. package/dist/scanners/detection/rules/loader.js.map +1 -0
  138. package/dist/scanners/detection/types.d.ts +171 -0
  139. package/dist/scanners/detection/types.d.ts.map +1 -0
  140. package/dist/scanners/detection/types.js +36 -0
  141. package/dist/scanners/detection/types.js.map +1 -0
  142. package/dist/scanners/index.d.ts +13 -5
  143. package/dist/scanners/index.d.ts.map +1 -1
  144. package/dist/scanners/index.js +197 -15
  145. package/dist/scanners/index.js.map +1 -1
  146. package/dist/scanners/index.test.js +6 -6
  147. package/dist/scanners/index.test.js.map +1 -1
  148. package/dist/scanners/openapi.d.ts +20 -0
  149. package/dist/scanners/openapi.d.ts.map +1 -0
  150. package/dist/scanners/openapi.js +226 -0
  151. package/dist/scanners/openapi.js.map +1 -0
  152. package/dist/scanners/runtime/types.d.ts +4 -4
  153. package/dist/scanners/rust.d.ts +22 -0
  154. package/dist/scanners/rust.d.ts.map +1 -0
  155. package/dist/scanners/rust.js +239 -0
  156. package/dist/scanners/rust.js.map +1 -0
  157. package/dist/scanners/scale/types.d.ts +19 -19
  158. package/dist/scanners/terraform.d.ts +23 -0
  159. package/dist/scanners/terraform.d.ts.map +1 -0
  160. package/dist/scanners/terraform.js +207 -0
  161. package/dist/scanners/terraform.js.map +1 -0
  162. package/dist/scanners/types.d.ts +1 -1
  163. package/dist/scanners/types.d.ts.map +1 -1
  164. package/dist/scanners/types.js +9 -0
  165. package/dist/scanners/types.js.map +1 -1
  166. package/package.json +5 -1
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Splunk HEC Client
3
+ *
4
+ * HTTP Event Collector client for Splunk integration.
5
+ *
6
+ * @module integrations/siem/splunk
7
+ */
8
+ import { logger } from "../../logger.js";
9
+ import { formatForSplunk } from "./format.js";
10
+ /**
11
+ * Splunk HTTP Event Collector client
12
+ */
13
+ export class SplunkClient {
14
+ provider = "splunk";
15
+ config;
16
+ abortController = null;
17
+ constructor(config) {
18
+ this.config = config;
19
+ }
20
+ /**
21
+ * Test connection to Splunk HEC
22
+ */
23
+ async testConnection() {
24
+ const startTime = Date.now();
25
+ try {
26
+ const response = await fetch(`${this.config.endpoint}/services/collector/health`, {
27
+ method: "GET",
28
+ headers: {
29
+ Authorization: `Splunk ${this.config.token}`,
30
+ },
31
+ signal: AbortSignal.timeout(10000),
32
+ });
33
+ const latencyMs = Date.now() - startTime;
34
+ if (response.ok) {
35
+ return {
36
+ success: true,
37
+ provider: "splunk",
38
+ endpoint: this.config.endpoint,
39
+ latencyMs,
40
+ details: { status: response.status },
41
+ };
42
+ }
43
+ const text = await response.text();
44
+ return {
45
+ success: false,
46
+ provider: "splunk",
47
+ endpoint: this.config.endpoint,
48
+ latencyMs,
49
+ error: `HTTP ${response.status}: ${text}`,
50
+ };
51
+ }
52
+ catch (error) {
53
+ return {
54
+ success: false,
55
+ provider: "splunk",
56
+ endpoint: this.config.endpoint,
57
+ latencyMs: Date.now() - startTime,
58
+ error: error instanceof Error ? error.message : String(error),
59
+ };
60
+ }
61
+ }
62
+ /**
63
+ * Send a single event to Splunk
64
+ */
65
+ async sendEvent(event) {
66
+ const timestamp = new Date().toISOString();
67
+ try {
68
+ const payload = formatForSplunk(event, {
69
+ index: this.config.options?.index,
70
+ source: this.config.options?.source,
71
+ sourceType: this.config.options?.sourceType,
72
+ host: this.config.options?.host,
73
+ });
74
+ const response = await fetch(`${this.config.endpoint}/services/collector/event`, {
75
+ method: "POST",
76
+ headers: {
77
+ Authorization: `Splunk ${this.config.token}`,
78
+ "Content-Type": "application/json",
79
+ },
80
+ body: JSON.stringify(payload),
81
+ signal: AbortSignal.timeout(30000),
82
+ });
83
+ if (response.ok) {
84
+ const result = await response.json();
85
+ logger.debug("siem.splunk.event_sent", {
86
+ eventType: event.eventType,
87
+ code: result.code,
88
+ });
89
+ return {
90
+ success: true,
91
+ timestamp,
92
+ };
93
+ }
94
+ const errorText = await response.text();
95
+ logger.warn("siem.splunk.send_failed", {
96
+ status: response.status,
97
+ error: errorText,
98
+ });
99
+ return {
100
+ success: false,
101
+ timestamp,
102
+ error: `HTTP ${response.status}: ${errorText}`,
103
+ };
104
+ }
105
+ catch (error) {
106
+ const errorMessage = error instanceof Error ? error.message : String(error);
107
+ logger.error("siem.splunk.send_error", { error: errorMessage });
108
+ return {
109
+ success: false,
110
+ timestamp,
111
+ error: errorMessage,
112
+ };
113
+ }
114
+ }
115
+ /**
116
+ * Send multiple events in batch
117
+ */
118
+ async sendEvents(events) {
119
+ if (events.length === 0) {
120
+ return {
121
+ success: true,
122
+ totalEvents: 0,
123
+ successCount: 0,
124
+ failureCount: 0,
125
+ };
126
+ }
127
+ try {
128
+ // Splunk HEC supports newline-delimited JSON for batch
129
+ const payloads = events.map((event) => formatForSplunk(event, {
130
+ index: this.config.options?.index,
131
+ source: this.config.options?.source,
132
+ sourceType: this.config.options?.sourceType,
133
+ host: this.config.options?.host,
134
+ }));
135
+ const body = payloads.map((p) => JSON.stringify(p)).join("\n");
136
+ const response = await fetch(`${this.config.endpoint}/services/collector/event`, {
137
+ method: "POST",
138
+ headers: {
139
+ Authorization: `Splunk ${this.config.token}`,
140
+ "Content-Type": "application/json",
141
+ },
142
+ body,
143
+ signal: AbortSignal.timeout(60000),
144
+ });
145
+ if (response.ok) {
146
+ logger.info("siem.splunk.batch_sent", {
147
+ eventCount: events.length,
148
+ });
149
+ return {
150
+ success: true,
151
+ totalEvents: events.length,
152
+ successCount: events.length,
153
+ failureCount: 0,
154
+ };
155
+ }
156
+ const errorText = await response.text();
157
+ logger.warn("siem.splunk.batch_failed", {
158
+ status: response.status,
159
+ error: errorText,
160
+ eventCount: events.length,
161
+ });
162
+ return {
163
+ success: false,
164
+ totalEvents: events.length,
165
+ successCount: 0,
166
+ failureCount: events.length,
167
+ errors: [{ index: 0, error: `HTTP ${response.status}: ${errorText}` }],
168
+ };
169
+ }
170
+ catch (error) {
171
+ const errorMessage = error instanceof Error ? error.message : String(error);
172
+ logger.error("siem.splunk.batch_error", { error: errorMessage });
173
+ return {
174
+ success: false,
175
+ totalEvents: events.length,
176
+ successCount: 0,
177
+ failureCount: events.length,
178
+ errors: [{ index: 0, error: errorMessage }],
179
+ };
180
+ }
181
+ }
182
+ /**
183
+ * Close connection
184
+ */
185
+ async close() {
186
+ if (this.abortController) {
187
+ this.abortController.abort();
188
+ this.abortController = null;
189
+ }
190
+ }
191
+ }
192
+ /**
193
+ * Create a Splunk client from configuration
194
+ */
195
+ export function createSplunkClient(config) {
196
+ return new SplunkClient({
197
+ provider: "splunk",
198
+ enabled: true,
199
+ endpoint: config.endpoint.replace(/\/$/, ""),
200
+ token: config.token,
201
+ options: {
202
+ index: config.index,
203
+ sourceType: config.sourceType || "_json",
204
+ source: config.source || "vaspera:hardening",
205
+ host: config.host,
206
+ verifySsl: config.verifySsl,
207
+ },
208
+ });
209
+ }
210
+ //# sourceMappingURL=splunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splunk.js","sourceRoot":"","sources":["../../../src/integrations/siem/splunk.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAU9C;;GAEG;AACH,MAAM,OAAO,YAAY;IACd,QAAQ,GAAG,QAAiB,CAAC;IAC9B,MAAM,CAAe;IACrB,eAAe,GAA2B,IAAI,CAAC;IAEvD,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,4BAA4B,EAAE;gBAChF,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;iBAC7C;gBACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;aACnC,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAEzC,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,QAAQ,EAAE,QAAQ;oBAClB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;oBAC9B,SAAS;oBACT,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;iBACrC,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,SAAS;gBACT,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE;aAC1C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBACjC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,KAAgB;QAC9B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE3C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE;gBACrC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK;gBACjC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM;gBACnC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU;gBAC3C,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI;aAChC,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,2BAA2B,EAAE;gBAC/E,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;oBAC5C,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;aACnC,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAoC,CAAC;gBACvE,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;oBACrC,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,IAAI,EAAE,MAAM,CAAC,IAAI;iBAClB,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,SAAS;iBACV,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBACrC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,SAAS;gBACT,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;aAC/C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;YAEhE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,SAAS;gBACT,KAAK,EAAE,YAAY;aACpB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,MAAmB;QAClC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;aAChB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,uDAAuD;YACvD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACpC,eAAe,CAAC,KAAK,EAAE;gBACrB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK;gBACjC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM;gBACnC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU;gBAC3C,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI;aAChC,CAAC,CACH,CAAC;YAEF,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE/D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,2BAA2B,EAAE;gBAC/E,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;oBAC5C,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI;gBACJ,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;aACnC,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBACpC,UAAU,EAAE,MAAM,CAAC,MAAM;iBAC1B,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,WAAW,EAAE,MAAM,CAAC,MAAM;oBAC1B,YAAY,EAAE,MAAM,CAAC,MAAM;oBAC3B,YAAY,EAAE,CAAC;iBAChB,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;gBACtC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,KAAK,EAAE,SAAS;gBAChB,UAAU,EAAE,MAAM,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,MAAM,CAAC,MAAM;gBAC1B,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,MAAM,CAAC,MAAM;gBAC3B,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,EAAE,CAAC;aACvE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;YAEjE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,MAAM,CAAC,MAAM;gBAC1B,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,MAAM,CAAC,MAAM;gBAC3B,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;aAC5C,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAQlC;IACC,OAAO,IAAI,YAAY,CAAC;QACtB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAC5C,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE;YACP,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,OAAO;YACxC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,mBAAmB;YAC5C,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * SIEM Integration Types
3
+ *
4
+ * Type definitions for SIEM clients and event formatting.
5
+ *
6
+ * @module integrations/siem/types
7
+ */
8
+ import type { Severity } from "../../certification/types.js";
9
+ /**
10
+ * Supported SIEM providers
11
+ */
12
+ export type SIEMProvider = "splunk" | "sentinel" | "datadog";
13
+ /**
14
+ * SIEM event severity mapping
15
+ */
16
+ export type SIEMSeverity = "critical" | "high" | "medium" | "low" | "informational";
17
+ /**
18
+ * SIEM event types
19
+ */
20
+ export type SIEMEventType = "finding.new" | "finding.fixed" | "finding.false_positive" | "scan.started" | "scan.completed" | "scan.failed" | "certification.started" | "certification.completed" | "compliance.report" | "autofix.applied" | "autofix.pr_created";
21
+ /**
22
+ * Base SIEM event structure
23
+ */
24
+ export interface SIEMEvent {
25
+ /** Event timestamp (ISO 8601) */
26
+ timestamp: string;
27
+ /** Event type */
28
+ eventType: SIEMEventType;
29
+ /** Event severity */
30
+ severity: SIEMSeverity;
31
+ /** Project path or identifier */
32
+ project: string;
33
+ /** Certification ID if applicable */
34
+ certificationId?: string;
35
+ /** Event message/description */
36
+ message: string;
37
+ /** Source of the event */
38
+ source: "vaspera";
39
+ /** Event-specific data */
40
+ data: Record<string, unknown>;
41
+ }
42
+ /**
43
+ * Finding event data
44
+ */
45
+ export interface FindingEventData {
46
+ findingId: string;
47
+ severity: Severity;
48
+ category: string;
49
+ file?: string;
50
+ line?: number;
51
+ scanner?: string;
52
+ ruleId?: string;
53
+ cweIds?: string[];
54
+ description?: string;
55
+ }
56
+ /**
57
+ * Scan event data
58
+ */
59
+ export interface ScanEventData {
60
+ scanId?: string;
61
+ scanners: string[];
62
+ findingsCount: number;
63
+ bySeverity: Record<Severity, number>;
64
+ durationMs: number;
65
+ error?: string;
66
+ }
67
+ /**
68
+ * Certification event data
69
+ */
70
+ export interface CertificationEventData {
71
+ certificationId: string;
72
+ level?: string;
73
+ score?: number;
74
+ findingsCount?: number;
75
+ bySeverity?: Record<Severity, number>;
76
+ durationMs?: number;
77
+ }
78
+ /**
79
+ * SIEM connection configuration
80
+ */
81
+ export interface SIEMConfig {
82
+ /** Provider type */
83
+ provider: SIEMProvider;
84
+ /** Whether the connection is enabled */
85
+ enabled: boolean;
86
+ /** Connection endpoint URL */
87
+ endpoint: string;
88
+ /** Authentication token or API key */
89
+ token: string;
90
+ /** Additional provider-specific options */
91
+ options?: Record<string, unknown>;
92
+ }
93
+ /**
94
+ * Splunk-specific configuration
95
+ */
96
+ export interface SplunkConfig extends SIEMConfig {
97
+ provider: "splunk";
98
+ options?: {
99
+ /** Splunk index */
100
+ index?: string;
101
+ /** Source type */
102
+ sourceType?: string;
103
+ /** Source identifier */
104
+ source?: string;
105
+ /** Host identifier */
106
+ host?: string;
107
+ /** Verify TLS certificates */
108
+ verifySsl?: boolean;
109
+ };
110
+ }
111
+ /**
112
+ * Microsoft Sentinel configuration
113
+ */
114
+ export interface SentinelConfig extends SIEMConfig {
115
+ provider: "sentinel";
116
+ options?: {
117
+ /** Log Analytics workspace ID */
118
+ workspaceId: string;
119
+ /** Custom log table name */
120
+ logType?: string;
121
+ /** Time generated field name */
122
+ timeGeneratedField?: string;
123
+ };
124
+ }
125
+ /**
126
+ * Datadog configuration
127
+ */
128
+ export interface DatadogConfig extends SIEMConfig {
129
+ provider: "datadog";
130
+ options?: {
131
+ /** Datadog site (e.g., datadoghq.com, datadoghq.eu) */
132
+ site?: string;
133
+ /** Service name */
134
+ service?: string;
135
+ /** Environment tag */
136
+ env?: string;
137
+ /** Additional tags */
138
+ tags?: string[];
139
+ };
140
+ }
141
+ /**
142
+ * SIEM client interface
143
+ */
144
+ export interface SIEMClient {
145
+ /** Provider name */
146
+ readonly provider: SIEMProvider;
147
+ /** Test connection to SIEM */
148
+ testConnection(): Promise<SIEMTestResult>;
149
+ /** Send a single event */
150
+ sendEvent(event: SIEMEvent): Promise<SIEMSendResult>;
151
+ /** Send multiple events in batch */
152
+ sendEvents(events: SIEMEvent[]): Promise<SIEMBatchResult>;
153
+ /** Close connection and cleanup */
154
+ close(): Promise<void>;
155
+ }
156
+ /**
157
+ * Connection test result
158
+ */
159
+ export interface SIEMTestResult {
160
+ success: boolean;
161
+ provider: SIEMProvider;
162
+ endpoint: string;
163
+ latencyMs?: number;
164
+ error?: string;
165
+ details?: Record<string, unknown>;
166
+ }
167
+ /**
168
+ * Single event send result
169
+ */
170
+ export interface SIEMSendResult {
171
+ success: boolean;
172
+ eventId?: string;
173
+ timestamp: string;
174
+ error?: string;
175
+ }
176
+ /**
177
+ * Batch send result
178
+ */
179
+ export interface SIEMBatchResult {
180
+ success: boolean;
181
+ totalEvents: number;
182
+ successCount: number;
183
+ failureCount: number;
184
+ errors?: Array<{
185
+ index: number;
186
+ error: string;
187
+ }>;
188
+ }
189
+ /**
190
+ * CEF (Common Event Format) field mapping
191
+ */
192
+ export interface CEFFields {
193
+ /** CEF version (always 0) */
194
+ version: 0;
195
+ /** Device vendor */
196
+ deviceVendor: string;
197
+ /** Device product */
198
+ deviceProduct: string;
199
+ /** Device version */
200
+ deviceVersion: string;
201
+ /** Signature ID (event type) */
202
+ signatureId: string;
203
+ /** Event name */
204
+ name: string;
205
+ /** Severity (0-10) */
206
+ severity: number;
207
+ /** Extension fields */
208
+ extension: Record<string, string | number>;
209
+ }
210
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/integrations/siem/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,eAAe,CAAC;AAEpF;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,eAAe,GACf,wBAAwB,GACxB,cAAc,GACd,gBAAgB,GAChB,aAAa,GACb,uBAAuB,GACvB,yBAAyB,GACzB,mBAAmB,GACnB,iBAAiB,GACjB,oBAAoB,CAAC;AAEzB;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB;IACjB,SAAS,EAAE,aAAa,CAAC;IACzB,qBAAqB;IACrB,QAAQ,EAAE,YAAY,CAAC;IACvB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE;QACR,mBAAmB;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,kBAAkB;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,wBAAwB;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,sBAAsB;QACtB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,8BAA8B;QAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,QAAQ,EAAE,UAAU,CAAC;IACrB,OAAO,CAAC,EAAE;QACR,iCAAiC;QACjC,WAAW,EAAE,MAAM,CAAC;QACpB,4BAA4B;QAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,gCAAgC;QAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE;QACR,uDAAuD;QACvD,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,mBAAmB;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,sBAAsB;QACtB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,sBAAsB;QACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAEhC,8BAA8B;IAC9B,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IAE1C,0BAA0B;IAC1B,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAErD,oCAAoC;IACpC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE1D,mCAAmC;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,6BAA6B;IAC7B,OAAO,EAAE,CAAC,CAAC;IACX,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC5C"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * SIEM Integration Types
3
+ *
4
+ * Type definitions for SIEM clients and event formatting.
5
+ *
6
+ * @module integrations/siem/types
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/integrations/siem/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Persistence Layer Tests
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=persistence.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.test.d.ts","sourceRoot":"","sources":["../../../src/persistence/__tests__/persistence.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}