@shipsafe/cli 0.1.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/README.md +167 -0
  2. package/dist/bin/shipsafe.d.ts +3 -0
  3. package/dist/bin/shipsafe.d.ts.map +1 -0
  4. package/dist/bin/shipsafe.js +33 -0
  5. package/dist/bin/shipsafe.js.map +1 -0
  6. package/dist/src/autofix/pr-generator.d.ts +48 -0
  7. package/dist/src/autofix/pr-generator.d.ts.map +1 -0
  8. package/dist/src/autofix/pr-generator.js +359 -0
  9. package/dist/src/autofix/pr-generator.js.map +1 -0
  10. package/dist/src/autofix/scaffolding.d.ts +26 -0
  11. package/dist/src/autofix/scaffolding.d.ts.map +1 -0
  12. package/dist/src/autofix/scaffolding.js +249 -0
  13. package/dist/src/autofix/scaffolding.js.map +1 -0
  14. package/dist/src/autofix/secret-fixer.d.ts +27 -0
  15. package/dist/src/autofix/secret-fixer.d.ts.map +1 -0
  16. package/dist/src/autofix/secret-fixer.js +138 -0
  17. package/dist/src/autofix/secret-fixer.js.map +1 -0
  18. package/dist/src/claude-md/manager.d.ts +17 -0
  19. package/dist/src/claude-md/manager.d.ts.map +1 -0
  20. package/dist/src/claude-md/manager.js +143 -0
  21. package/dist/src/claude-md/manager.js.map +1 -0
  22. package/dist/src/cli/activate.d.ts +4 -0
  23. package/dist/src/cli/activate.d.ts.map +1 -0
  24. package/dist/src/cli/activate.js +53 -0
  25. package/dist/src/cli/activate.js.map +1 -0
  26. package/dist/src/cli/config.d.ts +21 -0
  27. package/dist/src/cli/config.d.ts.map +1 -0
  28. package/dist/src/cli/config.js +128 -0
  29. package/dist/src/cli/config.js.map +1 -0
  30. package/dist/src/cli/connect.d.ts +36 -0
  31. package/dist/src/cli/connect.d.ts.map +1 -0
  32. package/dist/src/cli/connect.js +107 -0
  33. package/dist/src/cli/connect.js.map +1 -0
  34. package/dist/src/cli/init.d.ts +12 -0
  35. package/dist/src/cli/init.d.ts.map +1 -0
  36. package/dist/src/cli/init.js +45 -0
  37. package/dist/src/cli/init.js.map +1 -0
  38. package/dist/src/cli/license-check.d.ts +7 -0
  39. package/dist/src/cli/license-check.d.ts.map +1 -0
  40. package/dist/src/cli/license-check.js +69 -0
  41. package/dist/src/cli/license-check.js.map +1 -0
  42. package/dist/src/cli/license-gate.d.ts +9 -0
  43. package/dist/src/cli/license-gate.d.ts.map +1 -0
  44. package/dist/src/cli/license-gate.js +25 -0
  45. package/dist/src/cli/license-gate.js.map +1 -0
  46. package/dist/src/cli/scan.d.ts +9 -0
  47. package/dist/src/cli/scan.d.ts.map +1 -0
  48. package/dist/src/cli/scan.js +75 -0
  49. package/dist/src/cli/scan.js.map +1 -0
  50. package/dist/src/cli/setup.d.ts +27 -0
  51. package/dist/src/cli/setup.d.ts.map +1 -0
  52. package/dist/src/cli/setup.js +134 -0
  53. package/dist/src/cli/setup.js.map +1 -0
  54. package/dist/src/cli/status.d.ts +4 -0
  55. package/dist/src/cli/status.d.ts.map +1 -0
  56. package/dist/src/cli/status.js +52 -0
  57. package/dist/src/cli/status.js.map +1 -0
  58. package/dist/src/cli/upload-sourcemaps.d.ts +13 -0
  59. package/dist/src/cli/upload-sourcemaps.d.ts.map +1 -0
  60. package/dist/src/cli/upload-sourcemaps.js +157 -0
  61. package/dist/src/cli/upload-sourcemaps.js.map +1 -0
  62. package/dist/src/config/manager.d.ts +37 -0
  63. package/dist/src/config/manager.d.ts.map +1 -0
  64. package/dist/src/config/manager.js +131 -0
  65. package/dist/src/config/manager.js.map +1 -0
  66. package/dist/src/constants.d.ts +28 -0
  67. package/dist/src/constants.d.ts.map +1 -0
  68. package/dist/src/constants.js +34 -0
  69. package/dist/src/constants.js.map +1 -0
  70. package/dist/src/engines/graph/data-flow.d.ts +36 -0
  71. package/dist/src/engines/graph/data-flow.d.ts.map +1 -0
  72. package/dist/src/engines/graph/data-flow.js +189 -0
  73. package/dist/src/engines/graph/data-flow.js.map +1 -0
  74. package/dist/src/engines/graph/index.d.ts +20 -0
  75. package/dist/src/engines/graph/index.d.ts.map +1 -0
  76. package/dist/src/engines/graph/index.js +100 -0
  77. package/dist/src/engines/graph/index.js.map +1 -0
  78. package/dist/src/engines/graph/parser.d.ts +13 -0
  79. package/dist/src/engines/graph/parser.d.ts.map +1 -0
  80. package/dist/src/engines/graph/parser.js +620 -0
  81. package/dist/src/engines/graph/parser.js.map +1 -0
  82. package/dist/src/engines/graph/queries.d.ts +11 -0
  83. package/dist/src/engines/graph/queries.d.ts.map +1 -0
  84. package/dist/src/engines/graph/queries.js +196 -0
  85. package/dist/src/engines/graph/queries.js.map +1 -0
  86. package/dist/src/engines/graph/store.d.ts +35 -0
  87. package/dist/src/engines/graph/store.d.ts.map +1 -0
  88. package/dist/src/engines/graph/store.js +284 -0
  89. package/dist/src/engines/graph/store.js.map +1 -0
  90. package/dist/src/engines/pattern/gitleaks.d.ts +4 -0
  91. package/dist/src/engines/pattern/gitleaks.d.ts.map +1 -0
  92. package/dist/src/engines/pattern/gitleaks.js +78 -0
  93. package/dist/src/engines/pattern/gitleaks.js.map +1 -0
  94. package/dist/src/engines/pattern/index.d.ts +11 -0
  95. package/dist/src/engines/pattern/index.d.ts.map +1 -0
  96. package/dist/src/engines/pattern/index.js +111 -0
  97. package/dist/src/engines/pattern/index.js.map +1 -0
  98. package/dist/src/engines/pattern/semgrep.d.ts +4 -0
  99. package/dist/src/engines/pattern/semgrep.d.ts.map +1 -0
  100. package/dist/src/engines/pattern/semgrep.js +83 -0
  101. package/dist/src/engines/pattern/semgrep.js.map +1 -0
  102. package/dist/src/engines/pattern/trivy.d.ts +4 -0
  103. package/dist/src/engines/pattern/trivy.d.ts.map +1 -0
  104. package/dist/src/engines/pattern/trivy.js +90 -0
  105. package/dist/src/engines/pattern/trivy.js.map +1 -0
  106. package/dist/src/github/api.d.ts +19 -0
  107. package/dist/src/github/api.d.ts.map +1 -0
  108. package/dist/src/github/api.js +75 -0
  109. package/dist/src/github/api.js.map +1 -0
  110. package/dist/src/github/app-manifest.d.ts +28 -0
  111. package/dist/src/github/app-manifest.d.ts.map +1 -0
  112. package/dist/src/github/app-manifest.js +27 -0
  113. package/dist/src/github/app-manifest.js.map +1 -0
  114. package/dist/src/github/checks.d.ts +36 -0
  115. package/dist/src/github/checks.d.ts.map +1 -0
  116. package/dist/src/github/checks.js +90 -0
  117. package/dist/src/github/checks.js.map +1 -0
  118. package/dist/src/github/scanner.d.ts +20 -0
  119. package/dist/src/github/scanner.d.ts.map +1 -0
  120. package/dist/src/github/scanner.js +78 -0
  121. package/dist/src/github/scanner.js.map +1 -0
  122. package/dist/src/github/webhook.d.ts +39 -0
  123. package/dist/src/github/webhook.d.ts.map +1 -0
  124. package/dist/src/github/webhook.js +80 -0
  125. package/dist/src/github/webhook.js.map +1 -0
  126. package/dist/src/hooks/installer.d.ts +4 -0
  127. package/dist/src/hooks/installer.d.ts.map +1 -0
  128. package/dist/src/hooks/installer.js +146 -0
  129. package/dist/src/hooks/installer.js.map +1 -0
  130. package/dist/src/mcp/server.d.ts +2 -0
  131. package/dist/src/mcp/server.d.ts.map +1 -0
  132. package/dist/src/mcp/server.js +96 -0
  133. package/dist/src/mcp/server.js.map +1 -0
  134. package/dist/src/mcp/tools/check-package.d.ts +30 -0
  135. package/dist/src/mcp/tools/check-package.d.ts.map +1 -0
  136. package/dist/src/mcp/tools/check-package.js +196 -0
  137. package/dist/src/mcp/tools/check-package.js.map +1 -0
  138. package/dist/src/mcp/tools/fix.d.ts +41 -0
  139. package/dist/src/mcp/tools/fix.d.ts.map +1 -0
  140. package/dist/src/mcp/tools/fix.js +98 -0
  141. package/dist/src/mcp/tools/fix.js.map +1 -0
  142. package/dist/src/mcp/tools/graph-query.d.ts +7 -0
  143. package/dist/src/mcp/tools/graph-query.d.ts.map +1 -0
  144. package/dist/src/mcp/tools/graph-query.js +139 -0
  145. package/dist/src/mcp/tools/graph-query.js.map +1 -0
  146. package/dist/src/mcp/tools/production-errors.d.ts +23 -0
  147. package/dist/src/mcp/tools/production-errors.d.ts.map +1 -0
  148. package/dist/src/mcp/tools/production-errors.js +46 -0
  149. package/dist/src/mcp/tools/production-errors.js.map +1 -0
  150. package/dist/src/mcp/tools/scan.d.ts +7 -0
  151. package/dist/src/mcp/tools/scan.d.ts.map +1 -0
  152. package/dist/src/mcp/tools/scan.js +9 -0
  153. package/dist/src/mcp/tools/scan.js.map +1 -0
  154. package/dist/src/mcp/tools/status.d.ts +9 -0
  155. package/dist/src/mcp/tools/status.d.ts.map +1 -0
  156. package/dist/src/mcp/tools/status.js +18 -0
  157. package/dist/src/mcp/tools/status.js.map +1 -0
  158. package/dist/src/mcp/tools/verify-resolution.d.ts +12 -0
  159. package/dist/src/mcp/tools/verify-resolution.d.ts.map +1 -0
  160. package/dist/src/mcp/tools/verify-resolution.js +45 -0
  161. package/dist/src/mcp/tools/verify-resolution.js.map +1 -0
  162. package/dist/src/types.d.ts +136 -0
  163. package/dist/src/types.d.ts.map +1 -0
  164. package/dist/src/types.js +2 -0
  165. package/dist/src/types.js.map +1 -0
  166. package/package.json +53 -0
@@ -0,0 +1,620 @@
1
+ import Parser from 'web-tree-sitter';
2
+ import { createRequire } from 'node:module';
3
+ import { readFile, readdir, stat } from 'node:fs/promises';
4
+ import path from 'node:path';
5
+ const require = createRequire(import.meta.url);
6
+ // ── Module state ──
7
+ let parserInstance = null;
8
+ const languageCache = new Map();
9
+ // ── Public API ──
10
+ /** Initialize tree-sitter. Must be called once before parsing. */
11
+ export async function initParser() {
12
+ await Parser.init();
13
+ parserInstance = new Parser();
14
+ }
15
+ /** Detect language from file extension. Returns null for unsupported files. */
16
+ export function detectLanguage(filePath) {
17
+ const ext = path.extname(filePath).toLowerCase();
18
+ switch (ext) {
19
+ case '.ts':
20
+ case '.tsx':
21
+ return 'typescript';
22
+ case '.js':
23
+ case '.jsx':
24
+ case '.mjs':
25
+ case '.cjs':
26
+ return 'javascript';
27
+ case '.py':
28
+ return 'python';
29
+ default:
30
+ return null;
31
+ }
32
+ }
33
+ /** Parse a single file and extract structural nodes. */
34
+ export async function parseFile(filePath, content) {
35
+ if (!parserInstance) {
36
+ throw new Error('Parser not initialized. Call initParser() first.');
37
+ }
38
+ const language = detectLanguage(filePath);
39
+ if (!language) {
40
+ throw new Error(`Unsupported file type: ${filePath}`);
41
+ }
42
+ const lang = await loadLanguage(language);
43
+ parserInstance.setLanguage(lang);
44
+ const tree = parserInstance.parse(content);
45
+ const root = tree.rootNode;
46
+ const result = {
47
+ filePath,
48
+ language,
49
+ functions: [],
50
+ classes: [],
51
+ imports: [],
52
+ exports: [],
53
+ callSites: [],
54
+ };
55
+ if (language === 'python') {
56
+ extractPython(root, filePath, result);
57
+ }
58
+ else {
59
+ extractTypeScriptOrJavaScript(root, filePath, result);
60
+ }
61
+ return result;
62
+ }
63
+ /** Parse all supported files in a directory. */
64
+ export async function parseProject(projectDir, options) {
65
+ if (!parserInstance) {
66
+ throw new Error('Parser not initialized. Call initParser() first.');
67
+ }
68
+ const defaultExclude = ['node_modules', 'dist', '.git', 'coverage'];
69
+ const excludePatterns = options?.exclude ?? [];
70
+ const includePatterns = options?.include ?? [];
71
+ const files = await collectFiles(projectDir, defaultExclude, excludePatterns, includePatterns);
72
+ const results = [];
73
+ for (const file of files) {
74
+ const lang = detectLanguage(file);
75
+ if (!lang)
76
+ continue;
77
+ try {
78
+ const content = await readFile(file, 'utf-8');
79
+ const parsed = await parseFile(file, content);
80
+ results.push(parsed);
81
+ }
82
+ catch {
83
+ // Skip files that fail to parse (e.g. binary files with wrong extensions)
84
+ }
85
+ }
86
+ return results;
87
+ }
88
+ // ── Language loading ──
89
+ async function loadLanguage(language) {
90
+ // Map language to WASM filename
91
+ const wasmName = getWasmName(language);
92
+ const cached = languageCache.get(wasmName);
93
+ if (cached)
94
+ return cached;
95
+ const wasmPath = require.resolve(`tree-sitter-wasms/out/${wasmName}`);
96
+ const lang = await Parser.Language.load(wasmPath);
97
+ languageCache.set(wasmName, lang);
98
+ return lang;
99
+ }
100
+ function getWasmName(language) {
101
+ switch (language) {
102
+ case 'typescript':
103
+ return 'tree-sitter-typescript.wasm';
104
+ case 'javascript':
105
+ return 'tree-sitter-javascript.wasm';
106
+ case 'python':
107
+ return 'tree-sitter-python.wasm';
108
+ }
109
+ }
110
+ // ── File collection ──
111
+ async function collectFiles(dir, defaultExclude, excludePatterns, includePatterns) {
112
+ const results = [];
113
+ await walkDir(dir, results, defaultExclude, excludePatterns, includePatterns, dir);
114
+ return results;
115
+ }
116
+ async function walkDir(dir, results, defaultExclude, excludePatterns, includePatterns, rootDir) {
117
+ let entries;
118
+ try {
119
+ entries = await readdir(dir);
120
+ }
121
+ catch {
122
+ return;
123
+ }
124
+ for (const entry of entries) {
125
+ const fullPath = path.join(dir, entry);
126
+ // Check default exclusions by directory name
127
+ if (defaultExclude.includes(entry))
128
+ continue;
129
+ let stats;
130
+ try {
131
+ stats = await stat(fullPath);
132
+ }
133
+ catch {
134
+ continue;
135
+ }
136
+ if (stats.isDirectory()) {
137
+ await walkDir(fullPath, results, defaultExclude, excludePatterns, includePatterns, rootDir);
138
+ }
139
+ else if (stats.isFile()) {
140
+ const lang = detectLanguage(fullPath);
141
+ if (!lang)
142
+ continue;
143
+ const relativePath = path.relative(rootDir, fullPath);
144
+ // Check exclude patterns (glob-like)
145
+ if (excludePatterns.some((pat) => matchGlob(relativePath, pat)))
146
+ continue;
147
+ // Check include patterns (if specified, file must match at least one)
148
+ if (includePatterns.length > 0) {
149
+ if (!includePatterns.some((pat) => matchGlob(relativePath, pat)))
150
+ continue;
151
+ }
152
+ results.push(fullPath);
153
+ }
154
+ }
155
+ }
156
+ /** Simple glob matcher supporting ** and * patterns. */
157
+ function matchGlob(filePath, pattern) {
158
+ // Convert glob pattern to regex
159
+ // Handle **/ which should match zero or more path segments
160
+ const regexStr = pattern
161
+ .replace(/\./g, '\\.')
162
+ .replace(/\*\*\//g, '(?:.*/)?')
163
+ .replace(/\*\*/g, '.*')
164
+ .replace(/\*/g, '[^/]*');
165
+ const regex = new RegExp(`^${regexStr}$`);
166
+ return regex.test(filePath);
167
+ }
168
+ // ── TypeScript / JavaScript extraction ──
169
+ function extractTypeScriptOrJavaScript(root, filePath, result) {
170
+ extractTSImports(root, filePath, result);
171
+ extractTSClassesAndMethods(root, filePath, result);
172
+ extractTSFunctions(root, filePath, result);
173
+ extractTSArrowFunctions(root, filePath, result);
174
+ extractTSExports(root, filePath, result);
175
+ extractTSCallSites(root, filePath, result);
176
+ }
177
+ function extractTSImports(root, filePath, result) {
178
+ const importNodes = root.descendantsOfType('import_statement');
179
+ for (const imp of importNodes) {
180
+ const sourceNode = imp.childForFieldName('source');
181
+ if (!sourceNode)
182
+ continue;
183
+ // Extract the string content (strip quotes)
184
+ const source = extractStringContent(sourceNode);
185
+ if (!source)
186
+ continue;
187
+ const specifiers = [];
188
+ const importClause = imp.children.find((c) => c.type === 'import_clause');
189
+ if (importClause) {
190
+ const namedImports = importClause.descendantsOfType('import_specifier');
191
+ for (const spec of namedImports) {
192
+ const nameNode = spec.childForFieldName('name');
193
+ if (nameNode)
194
+ specifiers.push(nameNode.text);
195
+ }
196
+ // Handle default import
197
+ const defaultIdent = importClause.children.find((c) => c.type === 'identifier');
198
+ if (defaultIdent)
199
+ specifiers.push(defaultIdent.text);
200
+ // Handle namespace import: import * as foo from 'bar'
201
+ const nsImport = importClause.descendantsOfType('namespace_import');
202
+ if (nsImport.length > 0) {
203
+ const alias = nsImport[0].children.find((c) => c.type === 'identifier');
204
+ if (alias)
205
+ specifiers.push(alias.text);
206
+ }
207
+ }
208
+ result.imports.push({
209
+ source,
210
+ specifiers,
211
+ filePath,
212
+ line: imp.startPosition.row + 1,
213
+ });
214
+ }
215
+ }
216
+ function extractTSClassesAndMethods(root, filePath, result) {
217
+ const classDeclNodes = root.descendantsOfType('class_declaration');
218
+ for (const cls of classDeclNodes) {
219
+ const nameNode = cls.childForFieldName('name');
220
+ if (!nameNode)
221
+ continue;
222
+ const className = nameNode.text;
223
+ const isExported = cls.parent?.type === 'export_statement';
224
+ const bodyNode = cls.childForFieldName('body');
225
+ const methodNames = [];
226
+ if (bodyNode) {
227
+ const methods = bodyNode.descendantsOfType('method_definition');
228
+ for (const method of methods) {
229
+ const methodNameNode = method.childForFieldName('name');
230
+ if (!methodNameNode)
231
+ continue;
232
+ const methodName = methodNameNode.text;
233
+ methodNames.push(methodName);
234
+ // Check if method is async
235
+ const isAsync = method.children.some((c) => c.type === 'async');
236
+ // Extract parameters
237
+ const params = extractTSParams(method);
238
+ result.functions.push({
239
+ name: methodName,
240
+ filePath,
241
+ startLine: method.startPosition.row + 1,
242
+ endLine: method.endPosition.row + 1,
243
+ params,
244
+ isAsync,
245
+ isExported,
246
+ className,
247
+ });
248
+ }
249
+ }
250
+ result.classes.push({
251
+ name: className,
252
+ filePath,
253
+ startLine: cls.startPosition.row + 1,
254
+ endLine: cls.endPosition.row + 1,
255
+ methods: methodNames,
256
+ isExported,
257
+ });
258
+ }
259
+ }
260
+ function extractTSFunctions(root, filePath, result) {
261
+ const funcNodes = root.descendantsOfType('function_declaration');
262
+ for (const func of funcNodes) {
263
+ const nameNode = func.childForFieldName('name');
264
+ if (!nameNode)
265
+ continue;
266
+ const isExported = func.parent?.type === 'export_statement';
267
+ const isAsync = func.children.some((c) => c.type === 'async');
268
+ const params = extractTSParams(func);
269
+ result.functions.push({
270
+ name: nameNode.text,
271
+ filePath,
272
+ startLine: func.startPosition.row + 1,
273
+ endLine: func.endPosition.row + 1,
274
+ params,
275
+ isAsync,
276
+ isExported,
277
+ });
278
+ }
279
+ }
280
+ function extractTSArrowFunctions(root, filePath, result) {
281
+ const arrowFns = root.descendantsOfType('arrow_function');
282
+ for (const arrow of arrowFns) {
283
+ // Only capture arrow functions assigned to named variables
284
+ // The parent should be a variable_declarator
285
+ const parent = arrow.parent;
286
+ if (!parent || parent.type !== 'variable_declarator')
287
+ continue;
288
+ const nameNode = parent.childForFieldName('name');
289
+ if (!nameNode || nameNode.type !== 'identifier')
290
+ continue;
291
+ // Check if exported: variable_declarator -> lexical_declaration -> export_statement
292
+ const lexDecl = parent.parent;
293
+ const isExported = lexDecl?.parent?.type === 'export_statement';
294
+ const isAsync = arrow.children.some((c) => c.type === 'async');
295
+ const params = extractTSParams(arrow);
296
+ result.functions.push({
297
+ name: nameNode.text,
298
+ filePath,
299
+ startLine: arrow.startPosition.row + 1,
300
+ endLine: arrow.endPosition.row + 1,
301
+ params,
302
+ isAsync,
303
+ isExported,
304
+ });
305
+ }
306
+ }
307
+ function extractTSExports(root, filePath, result) {
308
+ const exportStatements = root.descendantsOfType('export_statement');
309
+ for (const exp of exportStatements) {
310
+ const declaration = exp.childForFieldName('declaration');
311
+ if (!declaration)
312
+ continue;
313
+ let name = null;
314
+ let exportType = 'variable';
315
+ switch (declaration.type) {
316
+ case 'function_declaration': {
317
+ name = declaration.childForFieldName('name')?.text ?? null;
318
+ exportType = 'function';
319
+ break;
320
+ }
321
+ case 'class_declaration': {
322
+ name = declaration.childForFieldName('name')?.text ?? null;
323
+ exportType = 'class';
324
+ break;
325
+ }
326
+ case 'lexical_declaration':
327
+ case 'variable_declaration': {
328
+ const declarator = declaration.descendantsOfType('variable_declarator')[0];
329
+ name = declarator?.childForFieldName('name')?.text ?? null;
330
+ exportType = 'variable';
331
+ break;
332
+ }
333
+ }
334
+ if (name) {
335
+ result.exports.push({
336
+ name,
337
+ filePath,
338
+ line: exp.startPosition.row + 1,
339
+ type: exportType,
340
+ });
341
+ }
342
+ }
343
+ }
344
+ function extractTSCallSites(root, filePath, result) {
345
+ const callExprs = root.descendantsOfType('call_expression');
346
+ for (const call of callExprs) {
347
+ const funcNode = call.childForFieldName('function');
348
+ if (!funcNode)
349
+ continue;
350
+ let calleeName;
351
+ let receiver;
352
+ if (funcNode.type === 'member_expression') {
353
+ const objectNode = funcNode.childForFieldName('object');
354
+ const propertyNode = funcNode.childForFieldName('property');
355
+ calleeName = propertyNode?.text ?? funcNode.text;
356
+ receiver = objectNode?.text;
357
+ }
358
+ else if (funcNode.type === 'identifier') {
359
+ calleeName = funcNode.text;
360
+ }
361
+ else {
362
+ // Skip complex expressions (e.g. IIFE, computed calls)
363
+ continue;
364
+ }
365
+ // Find the enclosing function
366
+ const callerName = findEnclosingFunctionName(call);
367
+ if (!callerName)
368
+ continue; // Skip top-level calls (no enclosing function)
369
+ result.callSites.push({
370
+ callerName,
371
+ calleeName,
372
+ filePath,
373
+ line: call.startPosition.row + 1,
374
+ receiver,
375
+ });
376
+ }
377
+ }
378
+ function extractTSParams(node) {
379
+ const paramsNode = node.childForFieldName('parameters');
380
+ if (!paramsNode)
381
+ return [];
382
+ const params = [];
383
+ for (let i = 0; i < paramsNode.namedChildCount; i++) {
384
+ const param = paramsNode.namedChild(i);
385
+ if (!param)
386
+ continue;
387
+ if (param.type === 'required_parameter' || param.type === 'optional_parameter') {
388
+ const pattern = param.childForFieldName('pattern');
389
+ if (pattern)
390
+ params.push(pattern.text);
391
+ }
392
+ else if (param.type === 'identifier') {
393
+ params.push(param.text);
394
+ }
395
+ }
396
+ return params;
397
+ }
398
+ // ── Python extraction ──
399
+ function extractPython(root, filePath, result) {
400
+ extractPythonImports(root, filePath, result);
401
+ extractPythonClassesAndMethods(root, filePath, result);
402
+ extractPythonStandaloneFunctions(root, filePath, result);
403
+ extractPythonCallSites(root, filePath, result);
404
+ }
405
+ function extractPythonImports(root, filePath, result) {
406
+ // from X import Y, Z
407
+ const importFromNodes = root.descendantsOfType('import_from_statement');
408
+ for (const imp of importFromNodes) {
409
+ const moduleNode = imp.childForFieldName('module_name');
410
+ if (!moduleNode)
411
+ continue;
412
+ const source = moduleNode.text;
413
+ const nameNodes = imp.childrenForFieldName('name');
414
+ const specifiers = nameNodes.map((n) => n.text);
415
+ result.imports.push({
416
+ source,
417
+ specifiers,
418
+ filePath,
419
+ line: imp.startPosition.row + 1,
420
+ });
421
+ }
422
+ // import X
423
+ const importNodes = root.descendantsOfType('import_statement');
424
+ for (const imp of importNodes) {
425
+ // In Python, 'import_statement' is for bare `import X`
426
+ // Skip import_from_statement which are already handled
427
+ if (imp.type !== 'import_statement')
428
+ continue;
429
+ const nameNodes = imp.childrenForFieldName('name');
430
+ for (const nameNode of nameNodes) {
431
+ result.imports.push({
432
+ source: nameNode.text,
433
+ specifiers: [nameNode.text],
434
+ filePath,
435
+ line: imp.startPosition.row + 1,
436
+ });
437
+ }
438
+ }
439
+ }
440
+ function extractPythonClassesAndMethods(root, filePath, result) {
441
+ const classNodes = root.descendantsOfType('class_definition');
442
+ for (const cls of classNodes) {
443
+ const nameNode = cls.childForFieldName('name');
444
+ if (!nameNode)
445
+ continue;
446
+ const className = nameNode.text;
447
+ const bodyNode = cls.childForFieldName('body');
448
+ const methodNames = [];
449
+ if (bodyNode) {
450
+ const funcDefs = bodyNode.descendantsOfType('function_definition');
451
+ for (const fn of funcDefs) {
452
+ const fnNameNode = fn.childForFieldName('name');
453
+ if (!fnNameNode)
454
+ continue;
455
+ const fnName = fnNameNode.text;
456
+ methodNames.push(fnName);
457
+ const isAsync = fn.children.some((c) => c.type === 'async');
458
+ const params = extractPythonParams(fn, true);
459
+ result.functions.push({
460
+ name: fnName,
461
+ filePath,
462
+ startLine: fn.startPosition.row + 1,
463
+ endLine: fn.endPosition.row + 1,
464
+ params,
465
+ isAsync,
466
+ isExported: false, // Python doesn't have explicit exports
467
+ className,
468
+ });
469
+ }
470
+ }
471
+ result.classes.push({
472
+ name: className,
473
+ filePath,
474
+ startLine: cls.startPosition.row + 1,
475
+ endLine: cls.endPosition.row + 1,
476
+ methods: methodNames,
477
+ isExported: false,
478
+ });
479
+ }
480
+ }
481
+ function extractPythonStandaloneFunctions(root, filePath, result) {
482
+ const funcNodes = root.descendantsOfType('function_definition');
483
+ for (const fn of funcNodes) {
484
+ // Skip methods (functions inside a class body)
485
+ if (isInsidePythonClass(fn))
486
+ continue;
487
+ const nameNode = fn.childForFieldName('name');
488
+ if (!nameNode)
489
+ continue;
490
+ const isAsync = fn.children.some((c) => c.type === 'async');
491
+ const params = extractPythonParams(fn, false);
492
+ // Check if decorated
493
+ const parentIsDecorated = fn.parent?.type === 'decorated_definition';
494
+ const actualNode = parentIsDecorated ? fn.parent : fn;
495
+ result.functions.push({
496
+ name: nameNode.text,
497
+ filePath,
498
+ startLine: actualNode.startPosition.row + 1,
499
+ endLine: actualNode.endPosition.row + 1,
500
+ params,
501
+ isAsync,
502
+ isExported: false,
503
+ });
504
+ }
505
+ }
506
+ function extractPythonCallSites(root, filePath, result) {
507
+ const callNodes = root.descendantsOfType('call');
508
+ for (const call of callNodes) {
509
+ const funcNode = call.childForFieldName('function');
510
+ if (!funcNode)
511
+ continue;
512
+ let calleeName;
513
+ let receiver;
514
+ if (funcNode.type === 'attribute') {
515
+ const objectNode = funcNode.childForFieldName('object');
516
+ const attrNode = funcNode.childForFieldName('attribute');
517
+ calleeName = attrNode?.text ?? funcNode.text;
518
+ receiver = objectNode?.text;
519
+ }
520
+ else if (funcNode.type === 'identifier') {
521
+ calleeName = funcNode.text;
522
+ }
523
+ else {
524
+ continue;
525
+ }
526
+ const callerName = findEnclosingPythonFunctionName(call);
527
+ if (!callerName)
528
+ continue;
529
+ result.callSites.push({
530
+ callerName,
531
+ calleeName,
532
+ filePath,
533
+ line: call.startPosition.row + 1,
534
+ receiver,
535
+ });
536
+ }
537
+ }
538
+ function extractPythonParams(node, isMethod) {
539
+ const paramsNode = node.childForFieldName('parameters');
540
+ if (!paramsNode)
541
+ return [];
542
+ const params = [];
543
+ for (let i = 0; i < paramsNode.namedChildCount; i++) {
544
+ const param = paramsNode.namedChild(i);
545
+ if (!param)
546
+ continue;
547
+ const name = param.type === 'identifier'
548
+ ? param.text
549
+ : param.type === 'typed_parameter'
550
+ ? param.childForFieldName('name')?.text ?? param.children[0]?.text ?? null
551
+ : param.type === 'default_parameter'
552
+ ? param.childForFieldName('name')?.text ?? param.children[0]?.text ?? null
553
+ : null;
554
+ if (!name)
555
+ continue;
556
+ // Skip 'self' and 'cls' for methods
557
+ if (isMethod && (name === 'self' || name === 'cls'))
558
+ continue;
559
+ params.push(name);
560
+ }
561
+ return params;
562
+ }
563
+ // ── Shared helpers ──
564
+ function isInsidePythonClass(node) {
565
+ let current = node.parent;
566
+ while (current) {
567
+ if (current.type === 'class_definition')
568
+ return true;
569
+ current = current.parent;
570
+ }
571
+ return false;
572
+ }
573
+ function findEnclosingFunctionName(node) {
574
+ let current = node.parent;
575
+ while (current) {
576
+ switch (current.type) {
577
+ case 'function_declaration': {
578
+ return current.childForFieldName('name')?.text ?? null;
579
+ }
580
+ case 'method_definition': {
581
+ return current.childForFieldName('name')?.text ?? null;
582
+ }
583
+ case 'arrow_function': {
584
+ // Check if assigned to a variable
585
+ const parent = current.parent;
586
+ if (parent?.type === 'variable_declarator') {
587
+ const nameNode = parent.childForFieldName('name');
588
+ if (nameNode?.type === 'identifier')
589
+ return nameNode.text;
590
+ }
591
+ break;
592
+ }
593
+ }
594
+ current = current.parent;
595
+ }
596
+ return null;
597
+ }
598
+ function findEnclosingPythonFunctionName(node) {
599
+ let current = node.parent;
600
+ while (current) {
601
+ if (current.type === 'function_definition') {
602
+ return current.childForFieldName('name')?.text ?? null;
603
+ }
604
+ current = current.parent;
605
+ }
606
+ return null;
607
+ }
608
+ function extractStringContent(node) {
609
+ // The string node contains: quote, string_fragment, quote
610
+ const fragment = node.descendantsOfType('string_fragment');
611
+ if (fragment.length > 0)
612
+ return fragment[0].text;
613
+ // Fallback: strip surrounding quotes
614
+ const text = node.text;
615
+ if ((text.startsWith("'") && text.endsWith("'")) || (text.startsWith('"') && text.endsWith('"'))) {
616
+ return text.slice(1, -1);
617
+ }
618
+ return null;
619
+ }
620
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../src/engines/graph/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { GraphStore } from './store.js';
2
+ import type { Finding, AttackPath, BlastRadiusResult, MissingAuthResult } from '../../types.js';
3
+ /**
4
+ * Find paths from entry point functions to dangerous sink functions.
5
+ * Uses BFS via getCallees to trace call chains without native path queries.
6
+ */
7
+ export declare function findAttackPaths(store: GraphStore): Promise<AttackPath[]>;
8
+ export declare function findBlastRadius(store: GraphStore, functionName: string): Promise<BlastRadiusResult>;
9
+ export declare function findMissingAuth(store: GraphStore): Promise<MissingAuthResult[]>;
10
+ export declare function queryResultsToFindings(attackPaths: AttackPath[], blastRadius: BlastRadiusResult[], missingAuth: MissingAuthResult[]): Finding[];
11
+ //# sourceMappingURL=queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../../src/engines/graph/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAqDhG;;;GAGG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAqE9E;AAID,wBAAsB,eAAe,CACnC,KAAK,EAAE,UAAU,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,iBAAiB,CAAC,CAyB5B;AAID,wBAAsB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAiCrF;AAID,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,UAAU,EAAE,EACzB,WAAW,EAAE,iBAAiB,EAAE,EAChC,WAAW,EAAE,iBAAiB,EAAE,GAC/B,OAAO,EAAE,CAuCX"}