vaspera 2.11.0 → 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 (149) 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 +1 -0
  7. package/dist/action/pr-comment.test.js.map +1 -1
  8. package/dist/action/sarif-upload.test.js +1 -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 +1 -0
  108. package/dist/scanners/cache.js.map +1 -1
  109. package/dist/scanners/deploy/types.d.ts +13 -13
  110. package/dist/scanners/detection/__tests__/detection.test.d.ts +5 -0
  111. package/dist/scanners/detection/__tests__/detection.test.d.ts.map +1 -0
  112. package/dist/scanners/detection/__tests__/detection.test.js +265 -0
  113. package/dist/scanners/detection/__tests__/detection.test.js.map +1 -0
  114. package/dist/scanners/detection/engines/ast-query.d.ts +23 -0
  115. package/dist/scanners/detection/engines/ast-query.d.ts.map +1 -0
  116. package/dist/scanners/detection/engines/ast-query.js +232 -0
  117. package/dist/scanners/detection/engines/ast-query.js.map +1 -0
  118. package/dist/scanners/detection/engines/data-flow.d.ts +12 -0
  119. package/dist/scanners/detection/engines/data-flow.d.ts.map +1 -0
  120. package/dist/scanners/detection/engines/data-flow.js +269 -0
  121. package/dist/scanners/detection/engines/data-flow.js.map +1 -0
  122. package/dist/scanners/detection/index.d.ts +29 -0
  123. package/dist/scanners/detection/index.d.ts.map +1 -0
  124. package/dist/scanners/detection/index.js +140 -0
  125. package/dist/scanners/detection/index.js.map +1 -0
  126. package/dist/scanners/detection/rules/builtin.d.ts +14 -0
  127. package/dist/scanners/detection/rules/builtin.d.ts.map +1 -0
  128. package/dist/scanners/detection/rules/builtin.js +307 -0
  129. package/dist/scanners/detection/rules/builtin.js.map +1 -0
  130. package/dist/scanners/detection/rules/loader.d.ts +19 -0
  131. package/dist/scanners/detection/rules/loader.d.ts.map +1 -0
  132. package/dist/scanners/detection/rules/loader.js +111 -0
  133. package/dist/scanners/detection/rules/loader.js.map +1 -0
  134. package/dist/scanners/detection/types.d.ts +171 -0
  135. package/dist/scanners/detection/types.d.ts.map +1 -0
  136. package/dist/scanners/detection/types.js +36 -0
  137. package/dist/scanners/detection/types.js.map +1 -0
  138. package/dist/scanners/index.d.ts +9 -1
  139. package/dist/scanners/index.d.ts.map +1 -1
  140. package/dist/scanners/index.js +64 -0
  141. package/dist/scanners/index.js.map +1 -1
  142. package/dist/scanners/index.test.js +6 -6
  143. package/dist/scanners/index.test.js.map +1 -1
  144. package/dist/scanners/scale/types.d.ts +3 -3
  145. package/dist/scanners/types.d.ts +1 -1
  146. package/dist/scanners/types.d.ts.map +1 -1
  147. package/dist/scanners/types.js +1 -0
  148. package/dist/scanners/types.js.map +1 -1
  149. package/package.json +5 -1
@@ -0,0 +1,210 @@
1
+ /**
2
+ * TypeScript AST Transform Tests
3
+ */
4
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
5
+ import { mkdtemp, rm, writeFile } from "fs/promises";
6
+ import { join } from "path";
7
+ import { tmpdir } from "os";
8
+ import { transformXSS, transformHardcodedSecrets, transformIDOR, hasASTTransform, listASTTransforms, applyASTTransform, } from "../typescript.js";
9
+ describe("AST Transforms", () => {
10
+ let tempDir;
11
+ beforeEach(async () => {
12
+ tempDir = await mkdtemp(join(tmpdir(), `ast-test-${Math.random().toString(36).slice(2, 8)}-`));
13
+ });
14
+ afterEach(async () => {
15
+ await rm(tempDir, { recursive: true, force: true });
16
+ });
17
+ describe("hasASTTransform", () => {
18
+ it("returns true for supported categories", () => {
19
+ expect(hasASTTransform("sql-injection")).toBe(true);
20
+ expect(hasASTTransform("xss")).toBe(true);
21
+ expect(hasASTTransform("secrets")).toBe(true);
22
+ expect(hasASTTransform("idor")).toBe(true);
23
+ });
24
+ it("returns false for unsupported categories", () => {
25
+ expect(hasASTTransform("unknown")).toBe(false);
26
+ expect(hasASTTransform("random")).toBe(false);
27
+ });
28
+ it("is case-insensitive", () => {
29
+ expect(hasASTTransform("SQL-INJECTION")).toBe(true);
30
+ expect(hasASTTransform("XSS")).toBe(true);
31
+ });
32
+ });
33
+ describe("listASTTransforms", () => {
34
+ it("returns all available transforms", () => {
35
+ const transforms = listASTTransforms();
36
+ expect(transforms).toContain("sql-injection");
37
+ expect(transforms).toContain("xss");
38
+ expect(transforms).toContain("hardcoded-secrets");
39
+ expect(transforms).toContain("secrets");
40
+ expect(transforms).toContain("idor");
41
+ expect(transforms).toContain("authorization");
42
+ });
43
+ });
44
+ describe("transformXSS", () => {
45
+ it("transforms innerHTML to textContent", async () => {
46
+ const filePath = join(tempDir, "xss.ts");
47
+ const code = `
48
+ function render(userInput: string) {
49
+ document.getElementById("target").innerHTML = userInput;
50
+ }
51
+ `;
52
+ await writeFile(filePath, code, "utf-8");
53
+ const context = {
54
+ filePath,
55
+ projectPath: tempDir,
56
+ finding: {
57
+ id: "test-1",
58
+ file: "xss.ts",
59
+ line: 3,
60
+ category: "xss",
61
+ description: "innerHTML assignment",
62
+ },
63
+ };
64
+ const result = await transformXSS(context);
65
+ expect(result.success).toBe(true);
66
+ expect(result.changesApplied.length).toBeGreaterThan(0);
67
+ expect(result.transformedCode).toContain("textContent");
68
+ expect(result.transformedCode).not.toContain("innerHTML");
69
+ });
70
+ it("handles insertAdjacentHTML", async () => {
71
+ const filePath = join(tempDir, "xss2.ts");
72
+ const code = `
73
+ function insertContent(el: HTMLElement, content: string) {
74
+ el.insertAdjacentHTML("beforeend", content);
75
+ }
76
+ `;
77
+ await writeFile(filePath, code, "utf-8");
78
+ const context = {
79
+ filePath,
80
+ projectPath: tempDir,
81
+ finding: {
82
+ id: "test-2",
83
+ file: "xss2.ts",
84
+ line: 3,
85
+ category: "xss",
86
+ description: "insertAdjacentHTML usage",
87
+ },
88
+ };
89
+ const result = await transformXSS(context);
90
+ expect(result.success).toBe(true);
91
+ expect(result.changesApplied.length).toBeGreaterThan(0);
92
+ });
93
+ });
94
+ describe("transformHardcodedSecrets", () => {
95
+ it("replaces hardcoded API key with env var", async () => {
96
+ const filePath = join(tempDir, "secrets.ts");
97
+ const code = `
98
+ const apiKey = "sk_live_1234567890abcdef";
99
+ const config = { apiKey };
100
+ `;
101
+ await writeFile(filePath, code, "utf-8");
102
+ const context = {
103
+ filePath,
104
+ projectPath: tempDir,
105
+ finding: {
106
+ id: "test-3",
107
+ file: "secrets.ts",
108
+ line: 2,
109
+ category: "secrets",
110
+ description: "Hardcoded API key",
111
+ },
112
+ };
113
+ const result = await transformHardcodedSecrets(context);
114
+ expect(result.success).toBe(true);
115
+ expect(result.changesApplied.length).toBeGreaterThan(0);
116
+ expect(result.transformedCode).toContain("process.env");
117
+ expect(result.transformedCode).not.toContain("sk_live_");
118
+ });
119
+ it("converts camelCase to SCREAMING_SNAKE_CASE for env vars", async () => {
120
+ const filePath = join(tempDir, "secrets2.ts");
121
+ const code = `
122
+ const secretKey = "super_secret_value_123456";
123
+ `;
124
+ await writeFile(filePath, code, "utf-8");
125
+ const context = {
126
+ filePath,
127
+ projectPath: tempDir,
128
+ finding: {
129
+ id: "test-4",
130
+ file: "secrets2.ts",
131
+ line: 2,
132
+ category: "secrets",
133
+ description: "Hardcoded secret",
134
+ },
135
+ };
136
+ const result = await transformHardcodedSecrets(context);
137
+ expect(result.success).toBe(true);
138
+ expect(result.transformedCode).toContain("SECRET_KEY");
139
+ });
140
+ });
141
+ describe("transformIDOR", () => {
142
+ it("adds ownership check to database access", async () => {
143
+ const filePath = join(tempDir, "idor.ts");
144
+ const code = `
145
+ async function getUser(req: Request) {
146
+ const user = await db.users.findById(req.params.id);
147
+ return user;
148
+ }
149
+ `;
150
+ await writeFile(filePath, code, "utf-8");
151
+ const context = {
152
+ filePath,
153
+ projectPath: tempDir,
154
+ finding: {
155
+ id: "test-5",
156
+ file: "idor.ts",
157
+ line: 3,
158
+ category: "idor",
159
+ description: "IDOR vulnerability",
160
+ },
161
+ };
162
+ const result = await transformIDOR(context);
163
+ expect(result.success).toBe(true);
164
+ expect(result.changesApplied.length).toBeGreaterThan(0);
165
+ expect(result.transformedCode).toContain("userId");
166
+ expect(result.transformedCode).toContain("Access denied");
167
+ });
168
+ });
169
+ describe("applyASTTransform", () => {
170
+ it("applies correct transform based on category", async () => {
171
+ const filePath = join(tempDir, "generic.ts");
172
+ const code = `
173
+ document.body.innerHTML = userInput;
174
+ `;
175
+ await writeFile(filePath, code, "utf-8");
176
+ const context = {
177
+ filePath,
178
+ projectPath: tempDir,
179
+ finding: {
180
+ id: "test-6",
181
+ file: "generic.ts",
182
+ line: 2,
183
+ category: "xss",
184
+ description: "XSS vulnerability",
185
+ },
186
+ };
187
+ const result = await applyASTTransform("xss", context);
188
+ expect(result.success).toBe(true);
189
+ });
190
+ it("returns error for unknown category", async () => {
191
+ const filePath = join(tempDir, "unknown.ts");
192
+ await writeFile(filePath, "const x = 1;", "utf-8");
193
+ const context = {
194
+ filePath,
195
+ projectPath: tempDir,
196
+ finding: {
197
+ id: "test-7",
198
+ file: "unknown.ts",
199
+ line: 1,
200
+ category: "unknown",
201
+ description: "Unknown",
202
+ },
203
+ };
204
+ const result = await applyASTTransform("unknown", context);
205
+ expect(result.success).toBe(false);
206
+ expect(result.error).toContain("No AST transform available");
207
+ });
208
+ });
209
+ });
210
+ //# sourceMappingURL=typescript.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.test.js","sourceRoot":"","sources":["../../../../src/autofix/ast/__tests__/typescript.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * AST Transform Module
3
+ *
4
+ * Provides AST-based code transformations for security fixes.
5
+ * Uses ts-morph for TypeScript/JavaScript manipulation.
6
+ *
7
+ * @module autofix/ast
8
+ */
9
+ export * from "./types.js";
10
+ export { transformSQLInjection, transformXSS, transformHardcodedSecrets, transformIDOR, applyASTTransform, hasASTTransform, listASTTransforms, AST_TRANSFORMS, } from "./typescript.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/autofix/ast/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,yBAAyB,EACzB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,cAAc,GACf,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * AST Transform Module
3
+ *
4
+ * Provides AST-based code transformations for security fixes.
5
+ * Uses ts-morph for TypeScript/JavaScript manipulation.
6
+ *
7
+ * @module autofix/ast
8
+ */
9
+ export * from "./types.js";
10
+ export { transformSQLInjection, transformXSS, transformHardcodedSecrets, transformIDOR, applyASTTransform, hasASTTransform, listASTTransforms, AST_TRANSFORMS, } from "./typescript.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/autofix/ast/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,yBAAyB,EACzB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,cAAc,GACf,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * AST Transform Types
3
+ *
4
+ * Types for AST-based code transformations.
5
+ *
6
+ * @module autofix/ast/types
7
+ */
8
+ import type { Severity } from "../../certification/types.js";
9
+ export type SupportedLanguage = "typescript" | "javascript";
10
+ export interface ASTTransformPattern {
11
+ id: string;
12
+ name: string;
13
+ description: string;
14
+ language: SupportedLanguage | SupportedLanguage[];
15
+ category: string;
16
+ severity: Severity;
17
+ risk: "low" | "medium" | "high";
18
+ safeToAutoApply: boolean;
19
+ }
20
+ export interface ASTTransformContext {
21
+ filePath: string;
22
+ projectPath: string;
23
+ finding: {
24
+ id: string;
25
+ file: string;
26
+ line: number;
27
+ category: string;
28
+ description: string;
29
+ };
30
+ }
31
+ export interface ASTTransformResult {
32
+ success: boolean;
33
+ filePath: string;
34
+ originalCode: string;
35
+ transformedCode: string;
36
+ changesApplied: ASTChange[];
37
+ error?: string;
38
+ }
39
+ export interface ASTChange {
40
+ type: "insert" | "replace" | "delete";
41
+ startLine: number;
42
+ endLine: number;
43
+ startColumn?: number;
44
+ endColumn?: number;
45
+ originalText: string;
46
+ newText: string;
47
+ description: string;
48
+ }
49
+ export interface SQLInjectionFix {
50
+ type: "parameterized-query" | "prepared-statement" | "orm-method";
51
+ originalQuery: string;
52
+ safeQuery: string;
53
+ parameters: string[];
54
+ }
55
+ export interface XSSFix {
56
+ type: "sanitize" | "escape" | "safe-method";
57
+ originalCode: string;
58
+ safeCode: string;
59
+ sanitizer?: string;
60
+ }
61
+ export interface SecretsFix {
62
+ type: "env-variable" | "config-file" | "secret-manager";
63
+ secretName: string;
64
+ envVarName: string;
65
+ originalValue: string;
66
+ }
67
+ export interface IDORFix {
68
+ type: "ownership-check" | "access-control";
69
+ resourceType: string;
70
+ checkCode: string;
71
+ }
72
+ export interface AuthBypassFix {
73
+ type: "middleware" | "decorator" | "guard";
74
+ authCode: string;
75
+ placement: "before" | "wrap";
76
+ }
77
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/autofix/ast/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAE7D,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,YAAY,CAAC;AAE5D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,SAAS,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,qBAAqB,GAAG,oBAAoB,GAAG,YAAY,CAAC;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,aAAa,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,GAAG,aAAa,GAAG,gBAAgB,CAAC;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,iBAAiB,GAAG,gBAAgB,CAAC;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC9B"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * AST Transform Types
3
+ *
4
+ * Types for AST-based code transformations.
5
+ *
6
+ * @module autofix/ast/types
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/autofix/ast/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * TypeScript/JavaScript AST Transforms
3
+ *
4
+ * Uses ts-morph for AST manipulation to fix security vulnerabilities.
5
+ *
6
+ * @module autofix/ast/typescript
7
+ */
8
+ import type { ASTTransformResult, ASTTransformContext } from "./types.js";
9
+ export declare function transformSQLInjection(context: ASTTransformContext): Promise<ASTTransformResult>;
10
+ export declare function transformXSS(context: ASTTransformContext): Promise<ASTTransformResult>;
11
+ export declare function transformHardcodedSecrets(context: ASTTransformContext): Promise<ASTTransformResult>;
12
+ export declare function transformIDOR(context: ASTTransformContext): Promise<ASTTransformResult>;
13
+ export declare const AST_TRANSFORMS: Record<string, (context: ASTTransformContext) => Promise<ASTTransformResult>>;
14
+ export declare function applyASTTransform(category: string, context: ASTTransformContext): Promise<ASTTransformResult>;
15
+ export declare function hasASTTransform(category: string): boolean;
16
+ export declare function listASTTransforms(): string[];
17
+ //# sourceMappingURL=typescript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/autofix/ast/typescript.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAa,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAOrF,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAyF7B;AAwDD,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAmH7B;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CA8G7B;AASD,wBAAsB,aAAa,CACjC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAwF7B;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CACjC,MAAM,EACN,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAQ9D,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAe7B;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C"}