@jupiterone/jupiterone-mcp
Version:
Model Context Protocol server for JupiterOne account rules and rule details
64 lines • 2.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.J1qlService = void 0;
const mutations_js_1 = require("../graphql/mutations.js");
const queries_js_1 = require("../graphql/queries.js");
class J1qlService {
client;
constructor(client) {
this.client = client;
}
/**
* Convert natural language to J1QL query
*/
async createJ1qlFromNaturalLanguage(naturalLanguage) {
const response = await this.client.request(mutations_js_1.CREATE_J1QL_FROM_NATURAL_LANGUAGE, { naturalLanguage });
return response.createJ1qlFromNaturalLanguage;
}
/**
* Execute a J1QL query
*/
async executeJ1qlQuery({ query, variables, cursor, scopeFilters, flags, }) {
// Use queryV2 for better error messages
const response = await this.client.request(queries_js_1.QUERY_V2, {
query,
variables,
cursor,
scopeFilters,
includeDeleted: flags?.includeDeleted,
returnRowMetadata: flags?.returnRowMeta,
returnComputedProperties: flags?.computedProperties,
});
// Handle deferred response
if (response.queryV2.type === 'deferred' && response.queryV2.url) {
// Poll the URL until results are ready
const maxAttempts = 60; // 60 attempts = 1 minute max wait
const pollInterval = 1000; // 1 second between polls
for (let attempt = 0; attempt < maxAttempts; attempt++) {
const fetchResponse = await fetch(response.queryV2.url);
if (!fetchResponse.ok) {
throw new Error(`Failed to fetch query results: ${fetchResponse.statusText}`);
}
const result = await fetchResponse.json();
// Check if the query is complete
if (result.status === 'COMPLETE' || result.status === 'FAILED') {
if (result.status === 'FAILED') {
throw new Error(result.error || 'Query execution failed');
}
return result;
}
// If still in progress, wait before next poll
if (result.status === 'IN_PROGRESS') {
await new Promise(resolve => setTimeout(resolve, pollInterval));
continue;
}
// If we get an unexpected status, return the result as-is
return result;
}
throw new Error('Query timed out after 60 seconds');
}
return response.queryV2;
}
}
exports.J1qlService = J1qlService;
//# sourceMappingURL=j1ql-service.js.map