@nahisaho/musubix-security 1.8.0 → 1.8.1

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 (186) hide show
  1. package/README.md +27 -0
  2. package/dist/analyzers/ai/index.d.ts +6 -0
  3. package/dist/analyzers/ai/index.d.ts.map +1 -0
  4. package/dist/analyzers/ai/index.js +6 -0
  5. package/dist/analyzers/ai/index.js.map +1 -0
  6. package/dist/analyzers/ai/prompt-injection-detector.d.ts +152 -0
  7. package/dist/analyzers/ai/prompt-injection-detector.d.ts.map +1 -0
  8. package/dist/analyzers/ai/prompt-injection-detector.js +468 -0
  9. package/dist/analyzers/ai/prompt-injection-detector.js.map +1 -0
  10. package/dist/analyzers/api/api-security-analyzer.d.ts +263 -0
  11. package/dist/analyzers/api/api-security-analyzer.d.ts.map +1 -0
  12. package/dist/analyzers/api/api-security-analyzer.js +581 -0
  13. package/dist/analyzers/api/api-security-analyzer.js.map +1 -0
  14. package/dist/analyzers/compliance/compliance-checker.d.ts +201 -0
  15. package/dist/analyzers/compliance/compliance-checker.d.ts.map +1 -0
  16. package/dist/analyzers/compliance/compliance-checker.js +772 -0
  17. package/dist/analyzers/compliance/compliance-checker.js.map +1 -0
  18. package/dist/analyzers/container/image-scanner.d.ts +163 -0
  19. package/dist/analyzers/container/image-scanner.d.ts.map +1 -0
  20. package/dist/analyzers/container/image-scanner.js +459 -0
  21. package/dist/analyzers/container/image-scanner.js.map +1 -0
  22. package/dist/analyzers/container/index.d.ts +6 -0
  23. package/dist/analyzers/container/index.d.ts.map +1 -0
  24. package/dist/analyzers/container/index.js +6 -0
  25. package/dist/analyzers/container/index.js.map +1 -0
  26. package/dist/analyzers/dashboard/security-dashboard.d.ts +286 -0
  27. package/dist/analyzers/dashboard/security-dashboard.d.ts.map +1 -0
  28. package/dist/analyzers/dashboard/security-dashboard.js +796 -0
  29. package/dist/analyzers/dashboard/security-dashboard.js.map +1 -0
  30. package/dist/analyzers/iac/iac-checker.d.ts +124 -0
  31. package/dist/analyzers/iac/iac-checker.d.ts.map +1 -0
  32. package/dist/analyzers/iac/iac-checker.js +755 -0
  33. package/dist/analyzers/iac/iac-checker.js.map +1 -0
  34. package/dist/analyzers/iac/index.d.ts +6 -0
  35. package/dist/analyzers/iac/index.d.ts.map +1 -0
  36. package/dist/analyzers/iac/index.js +6 -0
  37. package/dist/analyzers/iac/index.js.map +1 -0
  38. package/dist/analyzers/index.d.ts +9 -0
  39. package/dist/analyzers/index.d.ts.map +1 -0
  40. package/dist/analyzers/index.js +13 -0
  41. package/dist/analyzers/index.js.map +1 -0
  42. package/dist/analyzers/monitor/realtime-monitor.d.ts +216 -0
  43. package/dist/analyzers/monitor/realtime-monitor.d.ts.map +1 -0
  44. package/dist/analyzers/monitor/realtime-monitor.js +601 -0
  45. package/dist/analyzers/monitor/realtime-monitor.js.map +1 -0
  46. package/dist/analyzers/sast/index.d.ts +7 -0
  47. package/dist/analyzers/sast/index.d.ts.map +1 -0
  48. package/dist/analyzers/sast/index.js +7 -0
  49. package/dist/analyzers/sast/index.js.map +1 -0
  50. package/dist/analyzers/sast/interprocedural-analyzer.d.ts +276 -0
  51. package/dist/analyzers/sast/interprocedural-analyzer.d.ts.map +1 -0
  52. package/dist/analyzers/sast/interprocedural-analyzer.js +635 -0
  53. package/dist/analyzers/sast/interprocedural-analyzer.js.map +1 -0
  54. package/dist/analyzers/sast/zero-day-detector.d.ts +183 -0
  55. package/dist/analyzers/sast/zero-day-detector.d.ts.map +1 -0
  56. package/dist/analyzers/sast/zero-day-detector.js +593 -0
  57. package/dist/analyzers/sast/zero-day-detector.js.map +1 -0
  58. package/dist/analyzers/sca/dependency-scanner.d.ts +275 -0
  59. package/dist/analyzers/sca/dependency-scanner.d.ts.map +1 -0
  60. package/dist/analyzers/sca/dependency-scanner.js +642 -0
  61. package/dist/analyzers/sca/dependency-scanner.js.map +1 -0
  62. package/dist/core/index.d.ts +8 -0
  63. package/dist/core/index.d.ts.map +1 -0
  64. package/dist/core/index.js +10 -0
  65. package/dist/core/index.js.map +1 -0
  66. package/dist/core/pipeline-manager.d.ts +105 -0
  67. package/dist/core/pipeline-manager.d.ts.map +1 -0
  68. package/dist/core/pipeline-manager.js +449 -0
  69. package/dist/core/pipeline-manager.js.map +1 -0
  70. package/dist/core/result-aggregator.d.ts +96 -0
  71. package/dist/core/result-aggregator.d.ts.map +1 -0
  72. package/dist/core/result-aggregator.js +462 -0
  73. package/dist/core/result-aggregator.js.map +1 -0
  74. package/dist/index.d.ts +15 -0
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +68 -0
  77. package/dist/index.js.map +1 -1
  78. package/dist/integrations/ci-integration.d.ts +227 -0
  79. package/dist/integrations/ci-integration.d.ts.map +1 -0
  80. package/dist/integrations/ci-integration.js +472 -0
  81. package/dist/integrations/ci-integration.js.map +1 -0
  82. package/dist/integrations/git-hooks.d.ts +155 -0
  83. package/dist/integrations/git-hooks.d.ts.map +1 -0
  84. package/dist/integrations/git-hooks.js +425 -0
  85. package/dist/integrations/git-hooks.js.map +1 -0
  86. package/dist/integrations/index.d.ts +9 -0
  87. package/dist/integrations/index.d.ts.map +1 -0
  88. package/dist/integrations/index.js +9 -0
  89. package/dist/integrations/index.js.map +1 -0
  90. package/dist/integrations/report-aggregator.d.ts +250 -0
  91. package/dist/integrations/report-aggregator.d.ts.map +1 -0
  92. package/dist/integrations/report-aggregator.js +488 -0
  93. package/dist/integrations/report-aggregator.js.map +1 -0
  94. package/dist/integrations/vscode-integration.d.ts +245 -0
  95. package/dist/integrations/vscode-integration.d.ts.map +1 -0
  96. package/dist/integrations/vscode-integration.js +449 -0
  97. package/dist/integrations/vscode-integration.js.map +1 -0
  98. package/dist/intelligence/attack-pattern-matcher.d.ts +217 -0
  99. package/dist/intelligence/attack-pattern-matcher.d.ts.map +1 -0
  100. package/dist/intelligence/attack-pattern-matcher.js +887 -0
  101. package/dist/intelligence/attack-pattern-matcher.js.map +1 -0
  102. package/dist/intelligence/index.d.ts +12 -0
  103. package/dist/intelligence/index.d.ts.map +1 -0
  104. package/dist/intelligence/index.js +18 -0
  105. package/dist/intelligence/index.js.map +1 -0
  106. package/dist/intelligence/neuro-symbolic-core.d.ts +88 -0
  107. package/dist/intelligence/neuro-symbolic-core.d.ts.map +1 -0
  108. package/dist/intelligence/neuro-symbolic-core.js +403 -0
  109. package/dist/intelligence/neuro-symbolic-core.js.map +1 -0
  110. package/dist/intelligence/predictive-analyzer.d.ts +317 -0
  111. package/dist/intelligence/predictive-analyzer.d.ts.map +1 -0
  112. package/dist/intelligence/predictive-analyzer.js +714 -0
  113. package/dist/intelligence/predictive-analyzer.js.map +1 -0
  114. package/dist/intelligence/risk-scorer.d.ts +333 -0
  115. package/dist/intelligence/risk-scorer.d.ts.map +1 -0
  116. package/dist/intelligence/risk-scorer.js +824 -0
  117. package/dist/intelligence/risk-scorer.js.map +1 -0
  118. package/dist/intelligence/security-analytics.d.ts +349 -0
  119. package/dist/intelligence/security-analytics.d.ts.map +1 -0
  120. package/dist/intelligence/security-analytics.js +813 -0
  121. package/dist/intelligence/security-analytics.js.map +1 -0
  122. package/dist/intelligence/threat-intelligence.d.ts +288 -0
  123. package/dist/intelligence/threat-intelligence.d.ts.map +1 -0
  124. package/dist/intelligence/threat-intelligence.js +639 -0
  125. package/dist/intelligence/threat-intelligence.js.map +1 -0
  126. package/dist/policy/index.d.ts +6 -0
  127. package/dist/policy/index.d.ts.map +1 -0
  128. package/dist/policy/index.js +6 -0
  129. package/dist/policy/index.js.map +1 -0
  130. package/dist/policy/policy-engine.d.ts +254 -0
  131. package/dist/policy/policy-engine.d.ts.map +1 -0
  132. package/dist/policy/policy-engine.js +651 -0
  133. package/dist/policy/policy-engine.js.map +1 -0
  134. package/dist/remediation/auto-fixer.d.ts +179 -0
  135. package/dist/remediation/auto-fixer.d.ts.map +1 -0
  136. package/dist/remediation/auto-fixer.js +540 -0
  137. package/dist/remediation/auto-fixer.js.map +1 -0
  138. package/dist/remediation/fix-validator.d.ts +195 -0
  139. package/dist/remediation/fix-validator.d.ts.map +1 -0
  140. package/dist/remediation/fix-validator.js +462 -0
  141. package/dist/remediation/fix-validator.js.map +1 -0
  142. package/dist/remediation/index.d.ts +10 -0
  143. package/dist/remediation/index.d.ts.map +1 -0
  144. package/dist/remediation/index.js +15 -0
  145. package/dist/remediation/index.js.map +1 -0
  146. package/dist/remediation/patch-generator.d.ts +203 -0
  147. package/dist/remediation/patch-generator.d.ts.map +1 -0
  148. package/dist/remediation/patch-generator.js +533 -0
  149. package/dist/remediation/patch-generator.js.map +1 -0
  150. package/dist/remediation/remediation-planner.d.ts +262 -0
  151. package/dist/remediation/remediation-planner.d.ts.map +1 -0
  152. package/dist/remediation/remediation-planner.js +531 -0
  153. package/dist/remediation/remediation-planner.js.map +1 -0
  154. package/dist/remediation/secure-code-transformer.d.ts +222 -0
  155. package/dist/remediation/secure-code-transformer.d.ts.map +1 -0
  156. package/dist/remediation/secure-code-transformer.js +625 -0
  157. package/dist/remediation/secure-code-transformer.js.map +1 -0
  158. package/dist/types/fix.d.ts +3 -1
  159. package/dist/types/fix.d.ts.map +1 -1
  160. package/dist/types/index.d.ts +6 -0
  161. package/dist/types/index.d.ts.map +1 -1
  162. package/dist/types/index.js +1 -0
  163. package/dist/types/index.js.map +1 -1
  164. package/dist/types/interprocedural.d.ts +203 -0
  165. package/dist/types/interprocedural.d.ts.map +1 -0
  166. package/dist/types/interprocedural.js +7 -0
  167. package/dist/types/interprocedural.js.map +1 -0
  168. package/dist/types/neuro-symbolic.d.ts +179 -0
  169. package/dist/types/neuro-symbolic.d.ts.map +1 -0
  170. package/dist/types/neuro-symbolic.js +7 -0
  171. package/dist/types/neuro-symbolic.js.map +1 -0
  172. package/dist/types/pipeline.d.ts +173 -0
  173. package/dist/types/pipeline.d.ts.map +1 -0
  174. package/dist/types/pipeline.js +7 -0
  175. package/dist/types/pipeline.js.map +1 -0
  176. package/dist/types/result.d.ts +134 -0
  177. package/dist/types/result.d.ts.map +1 -0
  178. package/dist/types/result.js +25 -0
  179. package/dist/types/result.js.map +1 -0
  180. package/dist/types/vulnerability.d.ts +2 -2
  181. package/dist/types/vulnerability.d.ts.map +1 -1
  182. package/dist/types/zero-day.d.ts +146 -0
  183. package/dist/types/zero-day.d.ts.map +1 -0
  184. package/dist/types/zero-day.js +7 -0
  185. package/dist/types/zero-day.js.map +1 -0
  186. package/package.json +2 -2
@@ -0,0 +1,425 @@
1
+ /**
2
+ * @fileoverview Git Hooks Integration for Security Scanning
3
+ * @module @nahisaho/musubix-security/integrations/git-hooks
4
+ *
5
+ * Provides pre-commit and pre-push hooks for automated security checks.
6
+ */
7
+ import { execSync } from 'child_process';
8
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, chmodSync } from 'fs';
9
+ import { join, dirname } from 'path';
10
+ // ============================================================================
11
+ // Git Hooks Manager Class
12
+ // ============================================================================
13
+ /**
14
+ * Manages Git hooks for security scanning
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const hooks = createGitHooks({
19
+ * hooks: ['pre-commit', 'pre-push'],
20
+ * failOn: ['critical', 'high'],
21
+ * detectSecrets: true,
22
+ * });
23
+ *
24
+ * // Install hooks
25
+ * const result = await hooks.install();
26
+ *
27
+ * // Run pre-commit manually
28
+ * const hookResult = await hooks.runHook('pre-commit');
29
+ * ```
30
+ */
31
+ export class GitHooksManager {
32
+ config;
33
+ constructor(config) {
34
+ this.config = {
35
+ hooks: config.hooks,
36
+ failOn: config.failOn ?? ['critical', 'high'],
37
+ stagedOnly: config.stagedOnly ?? true,
38
+ includePatterns: config.includePatterns ?? ['**/*.ts', '**/*.js', '**/*.tsx', '**/*.jsx'],
39
+ excludePatterns: config.excludePatterns ?? ['**/node_modules/**', '**/dist/**', '**/*.test.ts'],
40
+ detectSecrets: config.detectSecrets ?? true,
41
+ detectVulnerabilities: config.detectVulnerabilities ?? true,
42
+ skipInCI: config.skipInCI ?? true,
43
+ timeout: config.timeout ?? 60,
44
+ customScripts: config.customScripts ?? {},
45
+ };
46
+ }
47
+ /**
48
+ * Install git hooks
49
+ */
50
+ async install(workDir = process.cwd()) {
51
+ const gitDir = this.findGitDir(workDir);
52
+ if (!gitDir) {
53
+ throw new Error('Not a git repository');
54
+ }
55
+ const hooksDir = join(gitDir, 'hooks');
56
+ // Create hooks directory if it doesn't exist
57
+ if (!existsSync(hooksDir)) {
58
+ mkdirSync(hooksDir, { recursive: true });
59
+ }
60
+ const installed = [];
61
+ const failed = [];
62
+ let backupCreated = false;
63
+ for (const hook of this.config.hooks) {
64
+ try {
65
+ const hookPath = join(hooksDir, hook);
66
+ // Backup existing hook
67
+ if (existsSync(hookPath)) {
68
+ const backupPath = `${hookPath}.musubix-backup`;
69
+ const existing = readFileSync(hookPath, 'utf-8');
70
+ if (!existing.includes('musubix-security')) {
71
+ writeFileSync(backupPath, existing);
72
+ backupCreated = true;
73
+ }
74
+ }
75
+ // Write hook script
76
+ const script = this.generateHookScript(hook);
77
+ writeFileSync(hookPath, script);
78
+ chmodSync(hookPath, '755');
79
+ installed.push(hook);
80
+ }
81
+ catch (error) {
82
+ failed.push({
83
+ hook,
84
+ error: error instanceof Error ? error.message : String(error),
85
+ });
86
+ }
87
+ }
88
+ return {
89
+ installed,
90
+ failed,
91
+ gitDir,
92
+ backupCreated,
93
+ };
94
+ }
95
+ /**
96
+ * Uninstall git hooks
97
+ */
98
+ async uninstall(workDir = process.cwd()) {
99
+ const gitDir = this.findGitDir(workDir);
100
+ if (!gitDir) {
101
+ throw new Error('Not a git repository');
102
+ }
103
+ const hooksDir = join(gitDir, 'hooks');
104
+ const removed = [];
105
+ const restored = [];
106
+ for (const hook of this.config.hooks) {
107
+ const hookPath = join(hooksDir, hook);
108
+ const backupPath = `${hookPath}.musubix-backup`;
109
+ if (existsSync(hookPath)) {
110
+ const content = readFileSync(hookPath, 'utf-8');
111
+ if (content.includes('musubix-security')) {
112
+ // Check for backup
113
+ if (existsSync(backupPath)) {
114
+ const backup = readFileSync(backupPath, 'utf-8');
115
+ writeFileSync(hookPath, backup);
116
+ restored.push(hook);
117
+ }
118
+ else {
119
+ // Remove hook
120
+ writeFileSync(hookPath, '#!/bin/sh\nexit 0\n');
121
+ removed.push(hook);
122
+ }
123
+ }
124
+ }
125
+ }
126
+ return { removed, restored };
127
+ }
128
+ /**
129
+ * Run a specific hook
130
+ */
131
+ async runHook(hook, workDir = process.cwd()) {
132
+ const startTime = Date.now();
133
+ // Check if should skip
134
+ if (this.shouldSkip()) {
135
+ return {
136
+ hook,
137
+ passed: true,
138
+ executionTime: Date.now() - startTime,
139
+ filesScanned: [],
140
+ skippedReason: 'Running in CI environment',
141
+ };
142
+ }
143
+ try {
144
+ // Get files to scan
145
+ const files = hook === 'pre-commit' && this.config.stagedOnly
146
+ ? await this.getStagedFiles(workDir)
147
+ : await this.getAllFiles(workDir);
148
+ const filePaths = files
149
+ .filter(f => this.shouldIncludeFile(f.path))
150
+ .map(f => f.path);
151
+ if (filePaths.length === 0) {
152
+ return {
153
+ hook,
154
+ passed: true,
155
+ executionTime: Date.now() - startTime,
156
+ filesScanned: [],
157
+ skippedReason: 'No files to scan',
158
+ };
159
+ }
160
+ // Run security scan
161
+ const scanResult = await this.runSecurityScan(filePaths, workDir);
162
+ const passed = this.checkResult(scanResult);
163
+ return {
164
+ hook,
165
+ passed,
166
+ executionTime: Date.now() - startTime,
167
+ filesScanned: filePaths,
168
+ scanResult,
169
+ error: passed ? undefined : this.formatError(scanResult),
170
+ };
171
+ }
172
+ catch (error) {
173
+ return {
174
+ hook,
175
+ passed: false,
176
+ executionTime: Date.now() - startTime,
177
+ filesScanned: [],
178
+ error: error instanceof Error ? error.message : String(error),
179
+ };
180
+ }
181
+ }
182
+ /**
183
+ * Get staged files
184
+ */
185
+ async getStagedFiles(workDir = process.cwd()) {
186
+ try {
187
+ const output = execSync('git diff --cached --name-status', {
188
+ cwd: workDir,
189
+ encoding: 'utf-8',
190
+ });
191
+ return output
192
+ .split('\n')
193
+ .filter(line => line.trim())
194
+ .map(line => {
195
+ const parts = line.split('\t');
196
+ const status = parts[0][0];
197
+ if (status === 'R' || status === 'C') {
198
+ return {
199
+ status,
200
+ oldPath: parts[1],
201
+ path: parts[2],
202
+ };
203
+ }
204
+ return {
205
+ status,
206
+ path: parts[1],
207
+ };
208
+ });
209
+ }
210
+ catch {
211
+ return [];
212
+ }
213
+ }
214
+ /**
215
+ * Generate hook script content
216
+ */
217
+ generateHookScript(hook) {
218
+ // Use custom script if provided
219
+ if (this.config.customScripts[hook]) {
220
+ return this.config.customScripts[hook];
221
+ }
222
+ const skipCI = this.config.skipInCI
223
+ ? `
224
+ # Skip in CI environment
225
+ if [ -n "$CI" ] || [ -n "$CONTINUOUS_INTEGRATION" ]; then
226
+ echo "Skipping ${hook} hook in CI environment"
227
+ exit 0
228
+ fi
229
+ `
230
+ : '';
231
+ const timeout = this.config.timeout;
232
+ const failOn = this.config.failOn.join(',');
233
+ return `#!/bin/sh
234
+ # Generated by @nahisaho/musubix-security
235
+ # Hook: ${hook}
236
+ # Generated: ${new Date().toISOString()}
237
+
238
+ ${skipCI}
239
+
240
+ echo "🔒 Running MUSUBIX Security Scan (${hook})..."
241
+
242
+ # Check if musubix-security is available
243
+ if ! command -v npx &> /dev/null; then
244
+ echo "Warning: npx not found, skipping security scan"
245
+ exit 0
246
+ fi
247
+
248
+ # Run security scan with timeout
249
+ timeout ${timeout}s npx @nahisaho/musubix-security scan --staged --fail-on ${failOn} --quiet
250
+ RESULT=$?
251
+
252
+ if [ $RESULT -eq 0 ]; then
253
+ echo "✅ Security scan passed"
254
+ exit 0
255
+ elif [ $RESULT -eq 124 ]; then
256
+ echo "⚠️ Security scan timed out, proceeding anyway"
257
+ exit 0
258
+ else
259
+ echo "❌ Security scan failed"
260
+ echo "Run 'npx @nahisaho/musubix-security scan' for details"
261
+ exit 1
262
+ fi
263
+ `;
264
+ }
265
+ /**
266
+ * Check if hooks should be skipped
267
+ */
268
+ shouldSkip() {
269
+ if (!this.config.skipInCI)
270
+ return false;
271
+ return !!(process.env.CI ||
272
+ process.env.CONTINUOUS_INTEGRATION ||
273
+ process.env.GITHUB_ACTIONS ||
274
+ process.env.GITLAB_CI ||
275
+ process.env.JENKINS_URL);
276
+ }
277
+ /**
278
+ * Get hook status
279
+ */
280
+ async getStatus(workDir = process.cwd()) {
281
+ const gitDir = this.findGitDir(workDir);
282
+ const status = {};
283
+ for (const hook of this.config.hooks) {
284
+ if (!gitDir) {
285
+ status[hook] = 'not-installed';
286
+ continue;
287
+ }
288
+ const hookPath = join(gitDir, 'hooks', hook);
289
+ if (!existsSync(hookPath)) {
290
+ status[hook] = 'not-installed';
291
+ }
292
+ else {
293
+ const content = readFileSync(hookPath, 'utf-8');
294
+ status[hook] = content.includes('musubix-security') ? 'installed' : 'other';
295
+ }
296
+ }
297
+ return status;
298
+ }
299
+ // ============================================================================
300
+ // Private Methods
301
+ // ============================================================================
302
+ findGitDir(startDir) {
303
+ let dir = startDir;
304
+ while (dir !== dirname(dir)) {
305
+ const gitDir = join(dir, '.git');
306
+ if (existsSync(gitDir)) {
307
+ return gitDir;
308
+ }
309
+ dir = dirname(dir);
310
+ }
311
+ return null;
312
+ }
313
+ async getAllFiles(workDir) {
314
+ try {
315
+ const output = execSync('git ls-files', {
316
+ cwd: workDir,
317
+ encoding: 'utf-8',
318
+ });
319
+ return output
320
+ .split('\n')
321
+ .filter(line => line.trim())
322
+ .map(path => ({ path, status: 'M' }));
323
+ }
324
+ catch {
325
+ return [];
326
+ }
327
+ }
328
+ shouldIncludeFile(filePath) {
329
+ // Check exclude patterns first
330
+ for (const pattern of this.config.excludePatterns) {
331
+ if (this.matchPattern(filePath, pattern)) {
332
+ return false;
333
+ }
334
+ }
335
+ // Check include patterns
336
+ for (const pattern of this.config.includePatterns) {
337
+ if (this.matchPattern(filePath, pattern)) {
338
+ return true;
339
+ }
340
+ }
341
+ return false;
342
+ }
343
+ matchPattern(filePath, pattern) {
344
+ // Simple glob matching
345
+ const regex = pattern
346
+ .replace(/\*\*/g, '.*')
347
+ .replace(/\*/g, '[^/]*')
348
+ .replace(/\?/g, '.');
349
+ return new RegExp(`^${regex}$`).test(filePath);
350
+ }
351
+ async runSecurityScan(files, _workDir) {
352
+ // Simplified scan result for hook context
353
+ // In real implementation, this would call the actual scanner
354
+ const vulnerabilities = [];
355
+ // Mock implementation - in production this would use actual scanners
356
+ return {
357
+ vulnerabilities,
358
+ scannedFiles: files.length,
359
+ skippedFiles: 0,
360
+ duration: 0,
361
+ timestamp: new Date(),
362
+ options: {},
363
+ summary: {
364
+ total: 0,
365
+ critical: 0,
366
+ high: 0,
367
+ medium: 0,
368
+ low: 0,
369
+ info: 0,
370
+ },
371
+ };
372
+ }
373
+ checkResult(result) {
374
+ for (const severity of this.config.failOn) {
375
+ if (result.summary[severity] > 0) {
376
+ return false;
377
+ }
378
+ }
379
+ return true;
380
+ }
381
+ formatError(result) {
382
+ const issues = [];
383
+ for (const severity of this.config.failOn) {
384
+ const count = result.summary[severity];
385
+ if (count > 0) {
386
+ issues.push(`${count} ${severity} issue(s)`);
387
+ }
388
+ }
389
+ return `Security check failed: ${issues.join(', ')}`;
390
+ }
391
+ }
392
+ // ============================================================================
393
+ // Factory Functions
394
+ // ============================================================================
395
+ /**
396
+ * Create a git hooks manager
397
+ */
398
+ export function createGitHooks(config) {
399
+ return new GitHooksManager(config);
400
+ }
401
+ /**
402
+ * Quick install pre-commit hook
403
+ */
404
+ export async function installPreCommitHook(workDir) {
405
+ const hooks = createGitHooks({
406
+ hooks: ['pre-commit'],
407
+ failOn: ['critical', 'high'],
408
+ stagedOnly: true,
409
+ });
410
+ return hooks.install(workDir);
411
+ }
412
+ /**
413
+ * Quick install all recommended hooks
414
+ */
415
+ export async function installRecommendedHooks(workDir) {
416
+ const hooks = createGitHooks({
417
+ hooks: ['pre-commit', 'pre-push'],
418
+ failOn: ['critical', 'high'],
419
+ stagedOnly: true,
420
+ detectSecrets: true,
421
+ detectVulnerabilities: true,
422
+ });
423
+ return hooks.install(workDir);
424
+ }
425
+ //# sourceMappingURL=git-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-hooks.js","sourceRoot":"","sources":["../../src/integrations/git-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Integrations module exports
3
+ * @module @nahisaho/musubix-security/integrations
4
+ */
5
+ export * from './ci-integration.js';
6
+ export * from './report-aggregator.js';
7
+ export * from './git-hooks.js';
8
+ export * from './vscode-integration.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Integrations module exports
3
+ * @module @nahisaho/musubix-security/integrations
4
+ */
5
+ export * from './ci-integration.js';
6
+ export * from './report-aggregator.js';
7
+ export * from './git-hooks.js';
8
+ export * from './vscode-integration.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC"}