@bouncesecurity/aghast 0.1.0 → 0.3.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.
- package/README.md +14 -19
- package/config/prompts/false-positive-validation.md +58 -0
- package/config/prompts/general-vuln-discovery.md +94 -0
- package/config/prompts/generic-instructions.md +2 -0
- package/dist/check-library.d.ts.map +1 -1
- package/dist/check-library.js +57 -7
- package/dist/check-library.js.map +1 -1
- package/dist/check-types.d.ts +35 -0
- package/dist/check-types.d.ts.map +1 -0
- package/dist/check-types.js +66 -0
- package/dist/check-types.js.map +1 -0
- package/dist/claude-code-provider.d.ts +4 -1
- package/dist/claude-code-provider.d.ts.map +1 -1
- package/dist/claude-code-provider.js +18 -8
- package/dist/claude-code-provider.js.map +1 -1
- package/dist/discoveries/openant-discovery.d.ts +10 -0
- package/dist/discoveries/openant-discovery.d.ts.map +1 -0
- package/dist/discoveries/openant-discovery.js +44 -0
- package/dist/discoveries/openant-discovery.js.map +1 -0
- package/dist/discoveries/sarif-discovery.d.ts +9 -0
- package/dist/discoveries/sarif-discovery.d.ts.map +1 -0
- package/dist/discoveries/sarif-discovery.js +54 -0
- package/dist/discoveries/sarif-discovery.js.map +1 -0
- package/dist/discoveries/semgrep-discovery.d.ts +9 -0
- package/dist/discoveries/semgrep-discovery.d.ts.map +1 -0
- package/dist/discoveries/semgrep-discovery.js +51 -0
- package/dist/discoveries/semgrep-discovery.js.map +1 -0
- package/dist/discovery.d.ts +74 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +41 -0
- package/dist/discovery.js.map +1 -0
- package/dist/error-codes.d.ts +3 -1
- package/dist/error-codes.d.ts.map +1 -1
- package/dist/error-codes.js +4 -1
- package/dist/error-codes.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +124 -30
- package/dist/index.js.map +1 -1
- package/dist/logging.d.ts +108 -8
- package/dist/logging.d.ts.map +1 -1
- package/dist/logging.js +269 -43
- package/dist/logging.js.map +1 -1
- package/dist/mock-ai-provider.d.ts +4 -1
- package/dist/mock-ai-provider.d.ts.map +1 -1
- package/dist/mock-ai-provider.js +4 -1
- package/dist/mock-ai-provider.js.map +1 -1
- package/dist/new-check.d.ts +3 -3
- package/dist/new-check.d.ts.map +1 -1
- package/dist/new-check.js +161 -52
- package/dist/new-check.js.map +1 -1
- package/dist/openant-loader.d.ts +105 -0
- package/dist/openant-loader.d.ts.map +1 -0
- package/dist/openant-loader.js +135 -0
- package/dist/openant-loader.js.map +1 -0
- package/dist/openant-runner.d.ts +22 -0
- package/dist/openant-runner.d.ts.map +1 -0
- package/dist/openant-runner.js +102 -0
- package/dist/openant-runner.js.map +1 -0
- package/dist/runtime-config.d.ts.map +1 -1
- package/dist/runtime-config.js +15 -0
- package/dist/runtime-config.js.map +1 -1
- package/dist/scan-runner.d.ts.map +1 -1
- package/dist/scan-runner.js +181 -142
- package/dist/scan-runner.js.map +1 -1
- package/dist/types.d.ts +26 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAnt data loading, discovery, filtering, and prompt formatting.
|
|
3
|
+
*
|
|
4
|
+
* Reads OpenAnt dataset files (dataset.json) containing code units with
|
|
5
|
+
* call graph context, and prepares them for security analysis. Enhanced
|
|
6
|
+
* datasets (dataset_enhanced.json) are supported but not preferred — the
|
|
7
|
+
* AI performs its own analysis and OpenAnt's classifications can introduce bias.
|
|
8
|
+
*/
|
|
9
|
+
import { readFile } from 'node:fs/promises';
|
|
10
|
+
// --- Loading ---
|
|
11
|
+
/**
|
|
12
|
+
* Load and parse an OpenAnt dataset JSON file.
|
|
13
|
+
*/
|
|
14
|
+
export async function loadDatasetFromFile(filePath) {
|
|
15
|
+
let content;
|
|
16
|
+
try {
|
|
17
|
+
content = await readFile(filePath, 'utf-8');
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
throw new Error(`OpenAnt dataset file not found: ${filePath}`);
|
|
21
|
+
}
|
|
22
|
+
let parsed;
|
|
23
|
+
try {
|
|
24
|
+
parsed = JSON.parse(content);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
throw new Error(`OpenAnt dataset is not valid JSON: ${filePath}`);
|
|
28
|
+
}
|
|
29
|
+
const dataset = parsed;
|
|
30
|
+
if (!dataset || !Array.isArray(dataset.units)) {
|
|
31
|
+
throw new Error(`OpenAnt dataset missing "units" array: ${filePath}`);
|
|
32
|
+
}
|
|
33
|
+
return dataset;
|
|
34
|
+
}
|
|
35
|
+
// --- Filtering ---
|
|
36
|
+
/**
|
|
37
|
+
* Apply configured filters to OpenAnt units.
|
|
38
|
+
* Gracefully handles missing agent_context (unenhanced datasets).
|
|
39
|
+
*/
|
|
40
|
+
export function filterUnits(units, filters) {
|
|
41
|
+
if (!filters)
|
|
42
|
+
return units;
|
|
43
|
+
let result = units;
|
|
44
|
+
if (filters.unitTypes && filters.unitTypes.length > 0) {
|
|
45
|
+
const allowed = new Set(filters.unitTypes);
|
|
46
|
+
result = result.filter((u) => allowed.has(u.unit_type));
|
|
47
|
+
}
|
|
48
|
+
if (filters.excludeUnitTypes && filters.excludeUnitTypes.length > 0) {
|
|
49
|
+
const excluded = new Set(filters.excludeUnitTypes);
|
|
50
|
+
result = result.filter((u) => !excluded.has(u.unit_type));
|
|
51
|
+
}
|
|
52
|
+
if (filters.securityClassifications && filters.securityClassifications.length > 0) {
|
|
53
|
+
const allowed = new Set(filters.securityClassifications);
|
|
54
|
+
result = result.filter((u) => u.agent_context && allowed.has(u.agent_context.security_classification));
|
|
55
|
+
}
|
|
56
|
+
if (filters.reachableOnly) {
|
|
57
|
+
result = result.filter((u) => u.reachable);
|
|
58
|
+
}
|
|
59
|
+
if (filters.entryPointsOnly) {
|
|
60
|
+
result = result.filter((u) => u.is_entry_point);
|
|
61
|
+
}
|
|
62
|
+
if (filters.minConfidence !== undefined) {
|
|
63
|
+
const threshold = filters.minConfidence;
|
|
64
|
+
result = result.filter((u) => u.agent_context && u.agent_context.confidence >= threshold);
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
// --- Prompt Formatting ---
|
|
69
|
+
/**
|
|
70
|
+
* Normalize file path to forward slashes (cross-platform).
|
|
71
|
+
*/
|
|
72
|
+
function normalizePath(filePath) {
|
|
73
|
+
return filePath.replace(/\\/g, '/');
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Build the per-unit prompt section appended to the base prompt.
|
|
77
|
+
*
|
|
78
|
+
* Designed for the agentic API: gives the agent a target location to navigate to,
|
|
79
|
+
* investigation leads to follow (callers, callees), and a security hypothesis to
|
|
80
|
+
* verify — rather than dumping all code into the prompt.
|
|
81
|
+
*/
|
|
82
|
+
export function formatUnitPromptSection(unit) {
|
|
83
|
+
const origin = unit.code.primary_origin;
|
|
84
|
+
const meta = unit.metadata;
|
|
85
|
+
const lines = [
|
|
86
|
+
'',
|
|
87
|
+
'UNIT DETAILS:',
|
|
88
|
+
'',
|
|
89
|
+
'TARGET LOCATION (start your analysis by reading this file):',
|
|
90
|
+
`- File: ${normalizePath(origin.file_path)}`,
|
|
91
|
+
`- Lines: ${origin.start_line}-${origin.end_line}`,
|
|
92
|
+
`- Function: ${origin.function_name}`,
|
|
93
|
+
`- Class: ${origin.class_name ?? '(module level)'}`,
|
|
94
|
+
`- Unit type: ${unit.unit_type}`,
|
|
95
|
+
];
|
|
96
|
+
// Entry point / reachability context
|
|
97
|
+
if (unit.is_entry_point) {
|
|
98
|
+
lines.push(`- This is an ENTRY POINT receiving external input${unit.entry_point_reason ? ` (${unit.entry_point_reason})` : ''}`);
|
|
99
|
+
}
|
|
100
|
+
else if (unit.reachable) {
|
|
101
|
+
lines.push('- This code is reachable from an entry point that receives external input');
|
|
102
|
+
}
|
|
103
|
+
// Investigation leads from call graph
|
|
104
|
+
lines.push('', 'INVESTIGATION LEADS:');
|
|
105
|
+
if (meta.direct_callers?.length > 0) {
|
|
106
|
+
lines.push(`- Called by: ${meta.direct_callers.join(', ')}`, ' Investigate these callers to understand what input reaches this function and whether it is sanitized upstream.');
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
lines.push('- No known callers in the call graph');
|
|
110
|
+
}
|
|
111
|
+
if (meta.direct_calls?.length > 0) {
|
|
112
|
+
lines.push(`- Calls: ${meta.direct_calls.join(', ')}`, ' Investigate these callees to understand what happens with this function\'s output and whether dangerous operations are performed.');
|
|
113
|
+
}
|
|
114
|
+
if (meta.parameters?.length > 0) {
|
|
115
|
+
lines.push(`- Parameters: ${meta.parameters.join(', ')}`);
|
|
116
|
+
}
|
|
117
|
+
if (meta.decorators?.length > 0) {
|
|
118
|
+
lines.push(`- Decorators: ${meta.decorators.join(', ')} — check whether these provide security controls (e.g. auth, input validation)`);
|
|
119
|
+
}
|
|
120
|
+
if (meta.is_async) {
|
|
121
|
+
lines.push('- This is an async function');
|
|
122
|
+
}
|
|
123
|
+
// Security hypothesis from OpenAnt (if enhanced)
|
|
124
|
+
// Note: OpenAnt's agent_context (security classifications, reasoning) is deliberately
|
|
125
|
+
// excluded from the prompt. The AI performs its own independent analysis — including
|
|
126
|
+
// OpenAnt's opinions was found to cause false positives by biasing the AI toward
|
|
127
|
+
// confirming the hypothesis rather than evaluating the code objectively.
|
|
128
|
+
// Include enhanced code context if OpenAnt inlined additional functions
|
|
129
|
+
if (origin.enhanced && origin.files_included.length > 1) {
|
|
130
|
+
lines.push('', 'ADDITIONAL CONTEXT (related functions from other files, for reference):', '```', unit.code.primary_code, '```', 'Note: This is a snapshot from the time of analysis. Read the actual files to verify current state.');
|
|
131
|
+
}
|
|
132
|
+
lines.push('', 'INSTRUCTIONS:', '- All file paths above are relative to your working directory. Use them directly with the Read tool (e.g., Read "routes/orders.js"), do NOT prepend "/" or use absolute paths.', '- Read the target file and analyze the function at the specified location', '- Read at most 1-2 additional files (direct callers/callees) if needed — then stop and report', '- Report issues ONLY for this specific code unit', '- If this code is not vulnerable, return {"issues": []} immediately');
|
|
133
|
+
return lines.join('\n');
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=openant-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openant-loader.js","sourceRoot":"","sources":["../src/openant-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAnt runner.
|
|
3
|
+
* Executes `openant parse` against a repository and returns the path to the generated dataset.json.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Verify that OpenAnt is installed and available on PATH.
|
|
7
|
+
* Resolves if found, rejects with a user-friendly error if not.
|
|
8
|
+
* Skips the check when AGHAST_MOCK_OPENANT is set.
|
|
9
|
+
*/
|
|
10
|
+
export declare function verifyOpenAntInstalled(): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Execute `openant parse` and return the path to the generated dataset.json.
|
|
13
|
+
* If AGHAST_MOCK_OPENANT env var is set, copies that file to a temp location instead.
|
|
14
|
+
*
|
|
15
|
+
* The caller is responsible for cleaning up the returned temp directory via
|
|
16
|
+
* the cleanup function returned alongside the dataset path.
|
|
17
|
+
*/
|
|
18
|
+
export declare function runOpenAnt(repositoryPath: string): Promise<{
|
|
19
|
+
datasetPath: string;
|
|
20
|
+
cleanup: () => Promise<void>;
|
|
21
|
+
}>;
|
|
22
|
+
//# sourceMappingURL=openant-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openant-runner.d.ts","sourceRoot":"","sources":["../src/openant-runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH;;;;GAIG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAc5D;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAuEhE"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAnt runner.
|
|
3
|
+
* Executes `openant parse` against a repository and returns the path to the generated dataset.json.
|
|
4
|
+
*/
|
|
5
|
+
import { execFile } from 'node:child_process';
|
|
6
|
+
import { mkdtemp, rm, access, copyFile } from 'node:fs/promises';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { tmpdir } from 'node:os';
|
|
9
|
+
import { logProgress, logDebug } from './logging.js';
|
|
10
|
+
import { ERROR_CODES, formatError } from './error-codes.js';
|
|
11
|
+
const TAG = 'openant';
|
|
12
|
+
/**
|
|
13
|
+
* Get the openant binary name for the current platform.
|
|
14
|
+
*/
|
|
15
|
+
function getOpenAntBinary() {
|
|
16
|
+
return process.platform === 'win32' ? 'openant.exe' : 'openant';
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Verify that OpenAnt is installed and available on PATH.
|
|
20
|
+
* Resolves if found, rejects with a user-friendly error if not.
|
|
21
|
+
* Skips the check when AGHAST_MOCK_OPENANT is set.
|
|
22
|
+
*/
|
|
23
|
+
export async function verifyOpenAntInstalled() {
|
|
24
|
+
if (process.env.AGHAST_MOCK_OPENANT)
|
|
25
|
+
return;
|
|
26
|
+
const binary = getOpenAntBinary();
|
|
27
|
+
return new Promise((resolve, reject) => {
|
|
28
|
+
execFile(binary, ['--help'], (error) => {
|
|
29
|
+
if (error && error.code === 'ENOENT') {
|
|
30
|
+
reject(new Error(formatError(ERROR_CODES.E6001, 'OpenAnt is required for the configured checks but was not found. Install it from https://github.com/knostic/OpenAnt/')));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
resolve();
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Execute `openant parse` and return the path to the generated dataset.json.
|
|
39
|
+
* If AGHAST_MOCK_OPENANT env var is set, copies that file to a temp location instead.
|
|
40
|
+
*
|
|
41
|
+
* The caller is responsible for cleaning up the returned temp directory via
|
|
42
|
+
* the cleanup function returned alongside the dataset path.
|
|
43
|
+
*/
|
|
44
|
+
export async function runOpenAnt(repositoryPath) {
|
|
45
|
+
const mockFile = process.env.AGHAST_MOCK_OPENANT;
|
|
46
|
+
if (mockFile) {
|
|
47
|
+
logDebug(TAG, `Mock mode: using dataset from ${mockFile}`);
|
|
48
|
+
// Copy to temp dir so cleanup logic is consistent
|
|
49
|
+
const tmpDir = await mkdtemp(join(tmpdir(), 'aghast-openant-mock-'));
|
|
50
|
+
const datasetPath = join(tmpDir, 'dataset.json');
|
|
51
|
+
await copyFile(mockFile, datasetPath);
|
|
52
|
+
return {
|
|
53
|
+
datasetPath,
|
|
54
|
+
cleanup: async () => {
|
|
55
|
+
await rm(tmpDir, { recursive: true, force: true }).catch((err) => {
|
|
56
|
+
logDebug(TAG, `Failed to clean up mock temp directory ${tmpDir}: ${err}`);
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
logProgress(TAG, 'Running OpenAnt parse...');
|
|
62
|
+
const tmpDir = await mkdtemp(join(tmpdir(), 'aghast-openant-'));
|
|
63
|
+
const binary = getOpenAntBinary();
|
|
64
|
+
const args = ['parse', repositoryPath, '--output', tmpDir, '--language', 'auto', '--fresh', '--quiet'];
|
|
65
|
+
logDebug(TAG, `Command: ${binary} ${args.join(' ')}`);
|
|
66
|
+
try {
|
|
67
|
+
await new Promise((resolve, reject) => {
|
|
68
|
+
execFile(binary, args, { timeout: 600_000 }, // 10 minute timeout
|
|
69
|
+
(error, _stdout, stderr) => {
|
|
70
|
+
if (error) {
|
|
71
|
+
if (error.code === 'ENOENT') {
|
|
72
|
+
reject(new Error(formatError(ERROR_CODES.E6001, 'OpenAnt not found. Install it from https://github.com/knostic/OpenAnt/')));
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
reject(new Error(formatError(ERROR_CODES.E6002, `OpenAnt execution failed${stderr?.trim() ? `: ${stderr.trim()}` : ''}`)));
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
resolve();
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
const datasetPath = join(tmpDir, 'dataset.json');
|
|
82
|
+
const exists = await access(datasetPath).then(() => true, () => false);
|
|
83
|
+
if (!exists) {
|
|
84
|
+
throw new Error(formatError(ERROR_CODES.E6002, `OpenAnt did not produce dataset.json in ${tmpDir}`));
|
|
85
|
+
}
|
|
86
|
+
logDebug(TAG, `Dataset generated: ${datasetPath}`);
|
|
87
|
+
return {
|
|
88
|
+
datasetPath,
|
|
89
|
+
cleanup: async () => {
|
|
90
|
+
await rm(tmpDir, { recursive: true, force: true }).catch((err) => {
|
|
91
|
+
logDebug(TAG, `Failed to clean up temp directory ${tmpDir}: ${err}`);
|
|
92
|
+
});
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
// Clean up on error
|
|
98
|
+
await rm(tmpDir, { recursive: true, force: true }).catch(() => { });
|
|
99
|
+
throw err;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=openant-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openant-runner.js","sourceRoot":"","sources":["../src/openant-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-config.d.ts","sourceRoot":"","sources":["../src/runtime-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"runtime-config.d.ts","sourceRoot":"","sources":["../src/runtime-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA0ExG"}
|
package/dist/runtime-config.js
CHANGED
|
@@ -68,6 +68,21 @@ export async function loadRuntimeConfig(configDir, explicitPath) {
|
|
|
68
68
|
if (obj.failOnCheckFailure !== undefined && typeof obj.failOnCheckFailure !== 'boolean') {
|
|
69
69
|
throw new Error(`Runtime config "${pathToLoad}": "failOnCheckFailure" must be a boolean`);
|
|
70
70
|
}
|
|
71
|
+
if (obj.logging !== undefined) {
|
|
72
|
+
if (typeof obj.logging !== 'object' || obj.logging === null || Array.isArray(obj.logging)) {
|
|
73
|
+
throw new Error(`Runtime config "${pathToLoad}": "logging" must be an object`);
|
|
74
|
+
}
|
|
75
|
+
const log = obj.logging;
|
|
76
|
+
if (log.logFile !== undefined && typeof log.logFile !== 'string') {
|
|
77
|
+
throw new Error(`Runtime config "${pathToLoad}": "logging.logFile" must be a string`);
|
|
78
|
+
}
|
|
79
|
+
if (log.logType !== undefined && typeof log.logType !== 'string') {
|
|
80
|
+
throw new Error(`Runtime config "${pathToLoad}": "logging.logType" must be a string`);
|
|
81
|
+
}
|
|
82
|
+
if (log.level !== undefined && typeof log.level !== 'string') {
|
|
83
|
+
throw new Error(`Runtime config "${pathToLoad}": "logging.level" must be a string`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
71
86
|
return parsed;
|
|
72
87
|
}
|
|
73
88
|
//# sourceMappingURL=runtime-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-config.js","sourceRoot":"","sources":["../src/runtime-config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime-config.js","sourceRoot":"","sources":["../src/runtime-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan-runner.d.ts","sourceRoot":"","sources":["../src/scan-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"scan-runner.d.ts","sourceRoot":"","sources":["../src/scan-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,cAAc,EAInB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAGjB,MAAM,YAAY,CAAC;AAwFpB,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,aAAa,CAAC;QAAC,OAAO,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAwgBD;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CA6HlF"}
|