@rad-security/mcp-server 0.0.23 → 0.0.25
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 +9 -0
- package/dist/client.js +29 -10
- package/dist/client.js.map +1 -1
- package/dist/index.js +775 -397
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +2 -0
- package/dist/logger.js +72 -0
- package/dist/logger.js.map +1 -0
- package/dist/operations/dashboards.d.ts +86 -0
- package/dist/operations/dashboards.js +80 -0
- package/dist/operations/dashboards.js.map +1 -0
- package/dist/operations/findings.d.ts +2 -2
- package/dist/operations/radql.d.ts +203 -0
- package/dist/operations/radql.js +609 -0
- package/dist/operations/radql.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -1
|
@@ -0,0 +1,609 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Schema Definitions
|
|
4
|
+
// ============================================================================
|
|
5
|
+
/**
|
|
6
|
+
* Schema for listing available data types (discovery)
|
|
7
|
+
*/
|
|
8
|
+
export const RadQLListDataTypesSchema = z.object({}).describe("List all available RadQL data types. Returns data types with descriptions. ALWAYS call this FIRST to discover what data is available.");
|
|
9
|
+
/**
|
|
10
|
+
* Schema for getting metadata about a specific data type (schema discovery)
|
|
11
|
+
*/
|
|
12
|
+
export const RadQLGetTypeMetadataSchema = z.object({
|
|
13
|
+
data_type: z.string()
|
|
14
|
+
.describe("The data type to get metadata for (e.g., 'containers', 'kubernetes_resources', 'inbox_items'). Call radql_list_data_types first to see available types.")
|
|
15
|
+
}).describe("Get schema/metadata for a specific RadQL data type. Returns available fields, types, and query examples. Call this AFTER radql_list_data_types to understand how to query a data type.");
|
|
16
|
+
/**
|
|
17
|
+
* Schema for listing filter values for a field (enum discovery)
|
|
18
|
+
*/
|
|
19
|
+
export const RadQLListFilterValuesSchema = z.object({
|
|
20
|
+
data_type: z.string()
|
|
21
|
+
.describe("The data type (e.g., 'containers', 'kubernetes_resources')"),
|
|
22
|
+
filter_name: z.string()
|
|
23
|
+
.describe("The filter field name to get possible values for (e.g., 'namespace', 'cluster_id', 'severity')")
|
|
24
|
+
}).describe("List possible values for a filter field. Useful for discovering available namespaces, clusters, severities, etc. Call this when building dynamic filters.");
|
|
25
|
+
/**
|
|
26
|
+
* Main RadQL query schema for executing queries against the Data API
|
|
27
|
+
*/
|
|
28
|
+
export const RadQLQuerySchema = z.object({
|
|
29
|
+
data_type: z.string()
|
|
30
|
+
.describe("The data type to query (e.g., 'containers', 'kubernetes_resources', 'inbox_items'). Use radql_list_data_types to discover available types."),
|
|
31
|
+
operation: z.enum([
|
|
32
|
+
"list",
|
|
33
|
+
"get_by_id",
|
|
34
|
+
"stats"
|
|
35
|
+
]).describe("The operation to perform: 'list' for filtering/searching, 'get_by_id' for single item, 'stats' for aggregations"),
|
|
36
|
+
filters_query: z.string().optional()
|
|
37
|
+
.describe("RadQL filter query (e.g., 'severity:High AND type:misconfiguration'). Used for filtering results."),
|
|
38
|
+
stats_query: z.string().optional()
|
|
39
|
+
.describe("RadQL analytics query (e.g., 'count() by severity'). Used for aggregations and grouping."),
|
|
40
|
+
id: z.string().optional()
|
|
41
|
+
.describe("The ID of a specific item to retrieve (for get_by_id operation)"),
|
|
42
|
+
limit: z.number().optional().default(20)
|
|
43
|
+
.describe("Maximum number of results to return"),
|
|
44
|
+
offset: z.number().optional().default(0)
|
|
45
|
+
.describe("Pagination offset"),
|
|
46
|
+
include_relations: z.array(z.string()).optional()
|
|
47
|
+
.describe("Relations to include (e.g., ['owner'] for containers to include Kubernetes owner resource)")
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* Helper schema for building RadQL queries programmatically
|
|
51
|
+
*/
|
|
52
|
+
export const RadQLQueryBuilderSchema = z.object({
|
|
53
|
+
data_type: z.string()
|
|
54
|
+
.describe("The data type to build a query for"),
|
|
55
|
+
conditions: z.array(z.object({
|
|
56
|
+
field: z.string(),
|
|
57
|
+
operator: z.enum([":", "=", "!=", "!:", "<>", ">", ">=", "<", "<=", "contains", "starts_with", "ends_with"]),
|
|
58
|
+
value: z.union([z.string(), z.number(), z.boolean()]),
|
|
59
|
+
negate: z.boolean().optional()
|
|
60
|
+
})).optional()
|
|
61
|
+
.describe("Filter conditions to combine into a RadQL query"),
|
|
62
|
+
logic: z.enum(["AND", "OR"]).optional().default("AND")
|
|
63
|
+
.describe("Logical operator to combine conditions"),
|
|
64
|
+
aggregation: z.enum(["count", "sum", "avg", "min", "max", "median"]).optional()
|
|
65
|
+
.describe("Aggregation function to apply"),
|
|
66
|
+
aggregate_field: z.string().optional()
|
|
67
|
+
.describe("Field to aggregate (omit for count(*))"),
|
|
68
|
+
group_by: z.array(z.string()).optional()
|
|
69
|
+
.describe("Fields to group by"),
|
|
70
|
+
time_group: z.enum(["second", "minute", "hour", "day", "month", "year"]).optional()
|
|
71
|
+
.describe("Time-based grouping interval for datetime fields")
|
|
72
|
+
});
|
|
73
|
+
/**
|
|
74
|
+
* Batch query schema for executing multiple queries in parallel
|
|
75
|
+
*/
|
|
76
|
+
export const RadQLBatchQuerySchema = z.object({
|
|
77
|
+
queries: z.array(RadQLQuerySchema).max(10)
|
|
78
|
+
.describe("Array of queries to execute in parallel (max 10)")
|
|
79
|
+
});
|
|
80
|
+
// ============================================================================
|
|
81
|
+
// Core Functions
|
|
82
|
+
// ============================================================================
|
|
83
|
+
/**
|
|
84
|
+
* List all available data types that can be queried
|
|
85
|
+
*/
|
|
86
|
+
export async function listDataTypes(client) {
|
|
87
|
+
const response = await client.makeRequest(`/accounts/${client.getAccountId()}/data/types`);
|
|
88
|
+
return {
|
|
89
|
+
available_types: Array.isArray(response) ? response : response.available_types || [],
|
|
90
|
+
hint: "Use radql_get_type_metadata with a specific data_type to see available fields and filtering options"
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get metadata for a specific data type including available fields
|
|
95
|
+
*/
|
|
96
|
+
export async function getDataTypeMetadata(client, dataType) {
|
|
97
|
+
const response = await client.makeRequest(`/accounts/${client.getAccountId()}/data/${dataType}/meta`);
|
|
98
|
+
return {
|
|
99
|
+
...response,
|
|
100
|
+
radql_examples: generateRadQLExamples(dataType, response.fields || [])
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* List data items with optional filtering
|
|
105
|
+
*/
|
|
106
|
+
async function listDataItems(client, dataType, params) {
|
|
107
|
+
const queryParams = {
|
|
108
|
+
limit: params.limit,
|
|
109
|
+
offset: params.offset
|
|
110
|
+
};
|
|
111
|
+
if (params.filters_query)
|
|
112
|
+
queryParams.filters_query = params.filters_query;
|
|
113
|
+
if (params.include_relations && params.include_relations.length > 0) {
|
|
114
|
+
queryParams.include_relations = params.include_relations.join(",");
|
|
115
|
+
}
|
|
116
|
+
const response = await client.makeRequest(`/accounts/${client.getAccountId()}/data/${dataType}`, queryParams);
|
|
117
|
+
return {
|
|
118
|
+
query_explanation: explainRadQLQuery(params.filters_query),
|
|
119
|
+
total_count: response.total_count || 0,
|
|
120
|
+
returned_count: response.items?.length || 0,
|
|
121
|
+
data: response.items || [],
|
|
122
|
+
fields: response.fields || [],
|
|
123
|
+
applied_filters: params.filters_query || "none",
|
|
124
|
+
pagination: {
|
|
125
|
+
limit: params.limit,
|
|
126
|
+
offset: params.offset,
|
|
127
|
+
has_more: response.has_more || false
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get a single data item by ID
|
|
133
|
+
*/
|
|
134
|
+
async function getDataItemById(client, dataType, id) {
|
|
135
|
+
const response = await client.makeRequest(`/accounts/${client.getAccountId()}/data/${dataType}/${id}`);
|
|
136
|
+
return {
|
|
137
|
+
data: response.data,
|
|
138
|
+
fields: response.fields || [],
|
|
139
|
+
data_type: dataType,
|
|
140
|
+
id: id
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get aggregated statistics for a data type
|
|
145
|
+
*/
|
|
146
|
+
async function getDataStats(client, dataType, params) {
|
|
147
|
+
const queryParams = {
|
|
148
|
+
stats_query: params.stats_query
|
|
149
|
+
};
|
|
150
|
+
if (params.filters_query)
|
|
151
|
+
queryParams.filters_query = params.filters_query;
|
|
152
|
+
if (params.limit)
|
|
153
|
+
queryParams.limit = params.limit;
|
|
154
|
+
if (params.offset)
|
|
155
|
+
queryParams.offset = params.offset;
|
|
156
|
+
const response = await client.makeRequest(`/accounts/${client.getAccountId()}/data/stats/${dataType}`, queryParams);
|
|
157
|
+
return {
|
|
158
|
+
query_explanation: explainStatsQuery(params.stats_query),
|
|
159
|
+
stats_query: params.stats_query,
|
|
160
|
+
applied_filters: params.filters_query || "none",
|
|
161
|
+
results: response.items || [],
|
|
162
|
+
fields: response.fields || [],
|
|
163
|
+
total_count: response.total_count || 0,
|
|
164
|
+
returned_count: response.items?.length || 0,
|
|
165
|
+
has_more: response.has_more || false
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* List available values for a specific filter field
|
|
170
|
+
*/
|
|
171
|
+
async function listFilterValues(client, dataType, filterName) {
|
|
172
|
+
const response = await client.makeRequest(`/accounts/${client.getAccountId()}/data/${dataType}/filters/${filterName}/values`);
|
|
173
|
+
// Extract values from nested API response structure
|
|
174
|
+
// API returns: { values: { items: [{data: {value, count}}] } }
|
|
175
|
+
const items = response.values?.items || [];
|
|
176
|
+
const values = items.map((item) => ({
|
|
177
|
+
value: item.data?.value,
|
|
178
|
+
count: item.data?.count
|
|
179
|
+
}));
|
|
180
|
+
return {
|
|
181
|
+
data_type: dataType,
|
|
182
|
+
filter_name: filterName,
|
|
183
|
+
values: values,
|
|
184
|
+
total_count: response.values?.total_count || 0,
|
|
185
|
+
has_more: response.values?.has_more || false,
|
|
186
|
+
hint: `Use these values in your filters_query like: ${filterName}:value`
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Main function to execute RadQL queries (list, get_by_id, stats)
|
|
191
|
+
*/
|
|
192
|
+
export async function executeRadQLQuery(client, args) {
|
|
193
|
+
const { operation, data_type, ...params } = args;
|
|
194
|
+
try {
|
|
195
|
+
switch (operation) {
|
|
196
|
+
case "list":
|
|
197
|
+
return await listDataItems(client, data_type, params);
|
|
198
|
+
case "get_by_id":
|
|
199
|
+
if (!params.id) {
|
|
200
|
+
throw new Error("id is required for get_by_id operation");
|
|
201
|
+
}
|
|
202
|
+
return await getDataItemById(client, data_type, params.id);
|
|
203
|
+
case "stats":
|
|
204
|
+
if (!params.stats_query) {
|
|
205
|
+
throw new Error("stats_query is required for stats operation");
|
|
206
|
+
}
|
|
207
|
+
return await getDataStats(client, data_type, params);
|
|
208
|
+
default:
|
|
209
|
+
throw new Error(`Unknown operation: ${operation}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
throw handleRadQLError(error, data_type);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Wrapper for listing data types (discovery tool)
|
|
218
|
+
*/
|
|
219
|
+
export async function executeListDataTypes(client) {
|
|
220
|
+
return await listDataTypes(client);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Wrapper for getting type metadata (schema discovery tool)
|
|
224
|
+
*/
|
|
225
|
+
export async function executeGetTypeMetadata(client, args) {
|
|
226
|
+
return await getDataTypeMetadata(client, args.data_type);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Wrapper for listing filter values (enum discovery tool)
|
|
230
|
+
*/
|
|
231
|
+
export async function executeListFilterValues(client, args) {
|
|
232
|
+
return await listFilterValues(client, args.data_type, args.filter_name);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Build RadQL queries programmatically from structured conditions
|
|
236
|
+
*/
|
|
237
|
+
export function buildRadQLQuery(args) {
|
|
238
|
+
const result = {};
|
|
239
|
+
if (args.conditions && args.conditions.length > 0) {
|
|
240
|
+
const conditions = args.conditions.map(cond => {
|
|
241
|
+
let query = "";
|
|
242
|
+
if (cond.negate) {
|
|
243
|
+
query += "NOT ";
|
|
244
|
+
}
|
|
245
|
+
query += cond.field;
|
|
246
|
+
// Map operator to RadQL syntax
|
|
247
|
+
if (cond.operator === "contains") {
|
|
248
|
+
// Quote wildcard values if they contain special characters
|
|
249
|
+
const needsQuoting = typeof cond.value === "string" && (cond.value.includes("-") || cond.value.includes(" ") || cond.value.includes(":"));
|
|
250
|
+
const valueStr = needsQuoting ? `"*${cond.value}*"` : `*${cond.value}*`;
|
|
251
|
+
query += `:${valueStr}`;
|
|
252
|
+
}
|
|
253
|
+
else if (cond.operator === "starts_with") {
|
|
254
|
+
const needsQuoting = typeof cond.value === "string" && (cond.value.includes("-") || cond.value.includes(" ") || cond.value.includes(":"));
|
|
255
|
+
const valueStr = needsQuoting ? `"${cond.value}*"` : `${cond.value}*`;
|
|
256
|
+
query += `:${valueStr}`;
|
|
257
|
+
}
|
|
258
|
+
else if (cond.operator === "ends_with") {
|
|
259
|
+
const needsQuoting = typeof cond.value === "string" && (cond.value.includes("-") || cond.value.includes(" ") || cond.value.includes(":"));
|
|
260
|
+
const valueStr = needsQuoting ? `"*${cond.value}"` : `*${cond.value}`;
|
|
261
|
+
query += `:${valueStr}`;
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
// Quote string values to handle dates, hyphens, and special characters
|
|
265
|
+
// The RadQL parser requires quoting for:
|
|
266
|
+
// - Dates/timestamps (contain hyphens): "2024-01-01"
|
|
267
|
+
// - UUIDs (contain hyphens): "550e8400-e29b-41d4-a716-446655440000"
|
|
268
|
+
// - Strings with special characters: colons, spaces, etc.
|
|
269
|
+
// - Any value that's not a simple alphanumeric string
|
|
270
|
+
const value = cond.value;
|
|
271
|
+
let valueStr;
|
|
272
|
+
if (typeof value === "string") {
|
|
273
|
+
// Check if the string needs quoting
|
|
274
|
+
// Quote if it contains: spaces, hyphens, colons, or other special chars
|
|
275
|
+
// Or if it looks like a date/timestamp
|
|
276
|
+
const needsQuoting = value.includes(" ") ||
|
|
277
|
+
value.includes("-") ||
|
|
278
|
+
value.includes(":") ||
|
|
279
|
+
value.includes("(") ||
|
|
280
|
+
value.includes(")") ||
|
|
281
|
+
/^\d{4}-\d{2}-\d{2}/.test(value) ||
|
|
282
|
+
/[<>=!]/.test(value);
|
|
283
|
+
valueStr = needsQuoting ? `"${value}"` : value;
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
valueStr = String(value);
|
|
287
|
+
}
|
|
288
|
+
query += `${cond.operator}${valueStr}`;
|
|
289
|
+
}
|
|
290
|
+
return query;
|
|
291
|
+
});
|
|
292
|
+
result.filters_query = conditions.join(` ${args.logic} `);
|
|
293
|
+
}
|
|
294
|
+
if (args.aggregation) {
|
|
295
|
+
let statsQuery = "";
|
|
296
|
+
if (args.aggregation === "count") {
|
|
297
|
+
statsQuery = args.aggregate_field ? `count(${args.aggregate_field})` : "count()";
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
if (!args.aggregate_field) {
|
|
301
|
+
throw new Error(`${args.aggregation} requires an aggregate_field`);
|
|
302
|
+
}
|
|
303
|
+
statsQuery = `${args.aggregation}(${args.aggregate_field})`;
|
|
304
|
+
}
|
|
305
|
+
if (args.group_by && args.group_by.length > 0) {
|
|
306
|
+
const groupByFields = args.group_by.map(field => {
|
|
307
|
+
if (args.time_group && (field.includes("_at") || field.includes("timestamp") || field.includes("time"))) {
|
|
308
|
+
return `${args.time_group}(${field})`;
|
|
309
|
+
}
|
|
310
|
+
return field;
|
|
311
|
+
});
|
|
312
|
+
statsQuery += ` by ${groupByFields.join(", ")}`;
|
|
313
|
+
}
|
|
314
|
+
result.stats_query = statsQuery;
|
|
315
|
+
}
|
|
316
|
+
return result;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Execute multiple RadQL queries in parallel
|
|
320
|
+
*/
|
|
321
|
+
export async function executeBatchQueries(client, args) {
|
|
322
|
+
const promises = args.queries.map(query => executeRadQLQuery(client, query).catch(err => ({
|
|
323
|
+
error: err.message,
|
|
324
|
+
query: query
|
|
325
|
+
})));
|
|
326
|
+
return await Promise.all(promises);
|
|
327
|
+
}
|
|
328
|
+
// ============================================================================
|
|
329
|
+
// Helper Functions
|
|
330
|
+
// ============================================================================
|
|
331
|
+
/**
|
|
332
|
+
* Generate example RadQL queries for a data type
|
|
333
|
+
*/
|
|
334
|
+
function generateRadQLExamples(dataType, fields) {
|
|
335
|
+
const examples = {
|
|
336
|
+
filter_examples: [],
|
|
337
|
+
stats_examples: []
|
|
338
|
+
};
|
|
339
|
+
// Find fields by type
|
|
340
|
+
const stringFields = fields.filter((f) => f.type === "string" && f.is_filter);
|
|
341
|
+
const numberFields = fields.filter((f) => f.type === "number" && f.is_filter);
|
|
342
|
+
const booleanFields = fields.filter((f) => f.type === "boolean" && f.is_filter);
|
|
343
|
+
const dateFields = fields.filter((f) => f.type === "datetime" && f.is_filter);
|
|
344
|
+
if (stringFields.length > 0) {
|
|
345
|
+
examples.filter_examples.push({
|
|
346
|
+
description: "Find items with specific text value",
|
|
347
|
+
query: `${stringFields[0].name}:example_value`
|
|
348
|
+
});
|
|
349
|
+
examples.filter_examples.push({
|
|
350
|
+
description: "Find items containing text (wildcard search)",
|
|
351
|
+
query: `${stringFields[0].name}:*partial*`
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
if (numberFields.length > 0) {
|
|
355
|
+
examples.filter_examples.push({
|
|
356
|
+
description: "Find items with number comparison",
|
|
357
|
+
query: `${numberFields[0].name}>100`
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
if (booleanFields.length > 0) {
|
|
361
|
+
examples.filter_examples.push({
|
|
362
|
+
description: "Find items by boolean value",
|
|
363
|
+
query: `${booleanFields[0].name}:true`
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
if (dateFields.length > 0) {
|
|
367
|
+
examples.filter_examples.push({
|
|
368
|
+
description: "Find items after a specific date",
|
|
369
|
+
query: `${dateFields[0].name}>"2024-01-01"`
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
if (stringFields.length >= 2) {
|
|
373
|
+
examples.filter_examples.push({
|
|
374
|
+
description: "Combine multiple conditions",
|
|
375
|
+
query: `${stringFields[0].name}:value1 AND ${stringFields[1].name}:value2`
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
examples.stats_examples.push({
|
|
379
|
+
description: "Count all items",
|
|
380
|
+
query: "count()"
|
|
381
|
+
});
|
|
382
|
+
if (stringFields.length > 0) {
|
|
383
|
+
examples.stats_examples.push({
|
|
384
|
+
description: `Count items grouped by ${stringFields[0].name}`,
|
|
385
|
+
query: `count() by ${stringFields[0].name}`
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
if (numberFields.length > 0) {
|
|
389
|
+
examples.stats_examples.push({
|
|
390
|
+
description: `Average ${numberFields[0].name}`,
|
|
391
|
+
query: `avg(${numberFields[0].name})`
|
|
392
|
+
});
|
|
393
|
+
if (stringFields.length > 0) {
|
|
394
|
+
examples.stats_examples.push({
|
|
395
|
+
description: `Sum ${numberFields[0].name} grouped by ${stringFields[0].name}`,
|
|
396
|
+
query: `sum(${numberFields[0].name}) by ${stringFields[0].name}`
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
if (dateFields.length > 0) {
|
|
401
|
+
examples.stats_examples.push({
|
|
402
|
+
description: "Count items by day",
|
|
403
|
+
query: `count() by day(${dateFields[0].name})`
|
|
404
|
+
});
|
|
405
|
+
examples.stats_examples.push({
|
|
406
|
+
description: "Count items by month",
|
|
407
|
+
query: `count() by month(${dateFields[0].name})`
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
// Data type specific examples
|
|
411
|
+
if (dataType === "containers") {
|
|
412
|
+
examples.filter_examples.push({
|
|
413
|
+
description: "Find nginx containers in production",
|
|
414
|
+
query: 'image_name:*nginx* AND cluster_id:prod*'
|
|
415
|
+
});
|
|
416
|
+
examples.stats_examples.push({
|
|
417
|
+
description: "Count containers by image",
|
|
418
|
+
query: "count() by image_name"
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
if (dataType === "inbox_items") {
|
|
422
|
+
examples.filter_examples.push({
|
|
423
|
+
description: "Find high-severity unresolved items",
|
|
424
|
+
query: 'severity:High AND NOT archived:true'
|
|
425
|
+
});
|
|
426
|
+
examples.stats_examples.push({
|
|
427
|
+
description: "Count items by severity and type",
|
|
428
|
+
query: "count() by severity, type"
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
if (dataType === "kubernetes_resources") {
|
|
432
|
+
examples.filter_examples.push({
|
|
433
|
+
description: "Find Pods or Services",
|
|
434
|
+
query: 'kind:Pod OR kind:Service'
|
|
435
|
+
});
|
|
436
|
+
examples.stats_examples.push({
|
|
437
|
+
description: "Count resources by kind",
|
|
438
|
+
query: "count() by kind"
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
return examples;
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Explain a RadQL filter query in natural language
|
|
445
|
+
*/
|
|
446
|
+
function explainRadQLQuery(query) {
|
|
447
|
+
if (!query)
|
|
448
|
+
return "No filters applied - returning all items";
|
|
449
|
+
const explanations = [];
|
|
450
|
+
// Parse common patterns
|
|
451
|
+
if (query.includes(" AND ")) {
|
|
452
|
+
explanations.push("All conditions must be true");
|
|
453
|
+
}
|
|
454
|
+
if (query.includes(" OR ")) {
|
|
455
|
+
explanations.push("Any condition can be true");
|
|
456
|
+
}
|
|
457
|
+
if (query.includes("NOT ")) {
|
|
458
|
+
explanations.push("Excluding items matching certain conditions");
|
|
459
|
+
}
|
|
460
|
+
if (query.includes(":")) {
|
|
461
|
+
explanations.push("Filtering by exact field values");
|
|
462
|
+
}
|
|
463
|
+
if (query.includes("*")) {
|
|
464
|
+
explanations.push("Using wildcard pattern matching");
|
|
465
|
+
}
|
|
466
|
+
if (query.includes(">") || query.includes("<")) {
|
|
467
|
+
explanations.push("Comparing numeric or date values");
|
|
468
|
+
}
|
|
469
|
+
if (query.includes("(") && query.includes(")")) {
|
|
470
|
+
explanations.push("Using grouped conditions");
|
|
471
|
+
}
|
|
472
|
+
return explanations.length > 0
|
|
473
|
+
? explanations.join("; ")
|
|
474
|
+
: "Applying custom filter conditions";
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Explain a RadQL stats query in natural language
|
|
478
|
+
*/
|
|
479
|
+
function explainStatsQuery(query) {
|
|
480
|
+
if (!query)
|
|
481
|
+
return "No aggregation specified";
|
|
482
|
+
const explanations = [];
|
|
483
|
+
// Parse aggregation functions
|
|
484
|
+
if (query.includes("count(")) {
|
|
485
|
+
explanations.push("Counting items");
|
|
486
|
+
}
|
|
487
|
+
if (query.includes("sum(")) {
|
|
488
|
+
explanations.push("Summing numeric values");
|
|
489
|
+
}
|
|
490
|
+
if (query.includes("avg(")) {
|
|
491
|
+
explanations.push("Calculating average values");
|
|
492
|
+
}
|
|
493
|
+
if (query.includes("min(")) {
|
|
494
|
+
explanations.push("Finding minimum values");
|
|
495
|
+
}
|
|
496
|
+
if (query.includes("max(")) {
|
|
497
|
+
explanations.push("Finding maximum values");
|
|
498
|
+
}
|
|
499
|
+
if (query.includes("median(")) {
|
|
500
|
+
explanations.push("Calculating median values");
|
|
501
|
+
}
|
|
502
|
+
// Parse grouping
|
|
503
|
+
if (query.includes(" by ")) {
|
|
504
|
+
explanations.push("Grouping results by specified fields");
|
|
505
|
+
}
|
|
506
|
+
// Parse time grouping
|
|
507
|
+
const timeGroups = ["second(", "minute(", "hour(", "day(", "month(", "year("];
|
|
508
|
+
for (const timeGroup of timeGroups) {
|
|
509
|
+
if (query.includes(timeGroup)) {
|
|
510
|
+
explanations.push(`Grouping by ${timeGroup.replace("(", "")} intervals`);
|
|
511
|
+
break;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
return explanations.length > 0
|
|
515
|
+
? explanations.join("; ")
|
|
516
|
+
: "Applying aggregation functions";
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* Enhanced error handling for RadQL queries
|
|
520
|
+
*/
|
|
521
|
+
function handleRadQLError(error, dataType) {
|
|
522
|
+
const originalMsg = error.message || error.response?.data?.message || String(error);
|
|
523
|
+
// Parse API error responses
|
|
524
|
+
if (error.response?.status === 400) {
|
|
525
|
+
// Detect parser errors (e.g., "unexpected token")
|
|
526
|
+
if (originalMsg.includes("unexpected token") || originalMsg.includes("invalid query")) {
|
|
527
|
+
let helpfulMsg = "RadQL Parser Error\n\n";
|
|
528
|
+
// Specific error patterns with solutions
|
|
529
|
+
if (originalMsg.match(/unexpected token.*"-\d+"/)) {
|
|
530
|
+
helpfulMsg += "ISSUE: Unquoted date or hyphenated value detected\n";
|
|
531
|
+
helpfulMsg += "SOLUTION: Dates and values with hyphens MUST be quoted\n\n";
|
|
532
|
+
helpfulMsg += "Examples:\n";
|
|
533
|
+
helpfulMsg += ' INCORRECT: created_at>2024-01-01\n';
|
|
534
|
+
helpfulMsg += ' CORRECT: created_at>"2024-01-01"\n\n';
|
|
535
|
+
helpfulMsg += ' INCORRECT: id:abc-123-def\n';
|
|
536
|
+
helpfulMsg += ' CORRECT: id:"abc-123-def"\n\n';
|
|
537
|
+
}
|
|
538
|
+
else if (originalMsg.includes("unknown field") || originalMsg.includes("not found")) {
|
|
539
|
+
helpfulMsg += "ISSUE: Unknown or misspelled field name\n";
|
|
540
|
+
helpfulMsg += `SOLUTION: Call radql_get_type_metadata with data_type="${dataType || "your_type"}" to see all available fields\n\n`;
|
|
541
|
+
// Add common fields based on data type
|
|
542
|
+
if (dataType === "containers") {
|
|
543
|
+
helpfulMsg += "Common container fields:\n";
|
|
544
|
+
helpfulMsg += " Filterable: name, image_name, image_repo, owner_kind\n";
|
|
545
|
+
helpfulMsg += " All: id, cluster_id, image_tag, created_at\n\n";
|
|
546
|
+
}
|
|
547
|
+
else if (dataType === "finding_groups") {
|
|
548
|
+
helpfulMsg += "Common finding_groups fields:\n";
|
|
549
|
+
helpfulMsg += " Filterable: type, severity, source_kind, source_name, rule_title\n";
|
|
550
|
+
helpfulMsg += " All: group_id, severity, rule_id, event_timestamp\n\n";
|
|
551
|
+
}
|
|
552
|
+
else if (dataType === "inbox_items") {
|
|
553
|
+
helpfulMsg += "Common inbox_items fields:\n";
|
|
554
|
+
helpfulMsg += " severity (High|Medium|Low), type, title, archived, false_positive, created_at\n\n";
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
else {
|
|
558
|
+
helpfulMsg += "ISSUE: Invalid query syntax\n";
|
|
559
|
+
helpfulMsg += "COMMON SOLUTIONS:\n";
|
|
560
|
+
helpfulMsg += ' 1. Quote dates: created_at>"2024-01-01"\n';
|
|
561
|
+
helpfulMsg += ' 2. Quote UUIDs: id:"abc-123-def"\n';
|
|
562
|
+
helpfulMsg += ' 3. Quote special chars: title:"my value"\n';
|
|
563
|
+
helpfulMsg += ` 4. Verify fields: radql_get_type_metadata (data_type="${dataType}")\n\n`;
|
|
564
|
+
}
|
|
565
|
+
helpfulMsg += `Original error: ${originalMsg}`;
|
|
566
|
+
return new Error(helpfulMsg);
|
|
567
|
+
}
|
|
568
|
+
// Unknown field error
|
|
569
|
+
if (originalMsg.includes("unknown field") || originalMsg.includes("field") && originalMsg.includes("not found")) {
|
|
570
|
+
let helpfulMsg = "Unknown Field Error\n\n";
|
|
571
|
+
helpfulMsg += `NEXT STEP: Call radql_get_type_metadata with data_type="${dataType}" for complete field list\n\n`;
|
|
572
|
+
// Add field suggestions based on data type
|
|
573
|
+
if (dataType === "containers") {
|
|
574
|
+
helpfulMsg += "Common container fields (quick reference):\n";
|
|
575
|
+
helpfulMsg += " Filterable: name, image_name, image_repo, owner_kind\n";
|
|
576
|
+
helpfulMsg += " All: id, cluster_id, image_tag, created_at\n\n";
|
|
577
|
+
}
|
|
578
|
+
else if (dataType === "finding_groups") {
|
|
579
|
+
helpfulMsg += "Common finding_groups fields (quick reference):\n";
|
|
580
|
+
helpfulMsg += " Filterable: type, source_kind, source_name, source_namespace, rule_title\n";
|
|
581
|
+
helpfulMsg += " All: group_id, severity, rule_id, event_timestamp\n\n";
|
|
582
|
+
}
|
|
583
|
+
else if (dataType === "inbox_items") {
|
|
584
|
+
helpfulMsg += "Common inbox_items fields (quick reference):\n";
|
|
585
|
+
helpfulMsg += " severity (High|Medium|Low), type, title, archived, false_positive, created_at\n\n";
|
|
586
|
+
}
|
|
587
|
+
helpfulMsg += `Original error: ${originalMsg}`;
|
|
588
|
+
return new Error(helpfulMsg);
|
|
589
|
+
}
|
|
590
|
+
const message = "Invalid RadQL query syntax";
|
|
591
|
+
const details = {
|
|
592
|
+
original_error: originalMsg,
|
|
593
|
+
next_step: `Call radql_get_type_metadata with data_type="${dataType}" for field list and examples`,
|
|
594
|
+
data_type: dataType
|
|
595
|
+
};
|
|
596
|
+
return new Error(`${message}\n\n${JSON.stringify(details, null, 2)}`);
|
|
597
|
+
}
|
|
598
|
+
if (error.response?.status === 404) {
|
|
599
|
+
return new Error(`Data type '${dataType}' not found\n\nNEXT STEP: Call radql_list_data_types to see all available types\n\nCommon types: containers, finding_groups, inbox_items, kubernetes_resources`);
|
|
600
|
+
}
|
|
601
|
+
if (error.response?.status === 401) {
|
|
602
|
+
return new Error("Authentication failed\n\nVERIFY: RAD Security API credentials are set (BASE_URL and BEARER_TOKEN)");
|
|
603
|
+
}
|
|
604
|
+
if (error.response?.status === 403) {
|
|
605
|
+
return new Error(`Access denied to data type '${dataType}'\n\nVERIFY: Account permissions or call radql_list_data_types to confirm type exists`);
|
|
606
|
+
}
|
|
607
|
+
return error;
|
|
608
|
+
}
|
|
609
|
+
//# sourceMappingURL=radql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radql.js","sourceRoot":"","sources":["../../src/operations/radql.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "0.0.
|
|
1
|
+
export declare const VERSION = "0.0.25";
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = "0.0.
|
|
1
|
+
export const VERSION = "0.0.25";
|
|
2
2
|
//# sourceMappingURL=version.js.map
|