import { init } from "@instantdb/admin";
import { queryStore, Query } from "../utils/queries.js";
// Extract app ID and admin token from environment variables
const INSTANT_APP_ID = process.env.INSTANT_APP_ID;
const INSTANT_APP_ADMIN_TOKEN = process.env.INSTANT_APP_ADMIN_TOKEN;
if (!INSTANT_APP_ID || !INSTANT_APP_ADMIN_TOKEN) {
throw new Error('Environment variables INSTANT_APP_ID and INSTANT_APP_ADMIN_TOKEN are required');
}
// Initialize InstantDB Admin SDK
const db = init({
appId: INSTANT_APP_ID,
adminToken: INSTANT_APP_ADMIN_TOKEN,
});
// Define interface for the return value
interface QueryResult {
content: Query;
}
export function queryDB(request: { query: string; name: string }): Promise<QueryResult> {
const { query, name } = request;
console.error("[Tool] queryDB called with name:", name, "and query:", query);
if (!query || !name) {
throw new Error('Both "query" and "name" parameters are required');
}
return new Promise(async (resolve, reject) => {
try {
console.error("[Tool] Executing InstantDB query:", query);
let parsedQuery;
try {
parsedQuery = JSON.parse(query);
} catch (parseError) {
console.error('[Tool] Error parsing query JSON:', parseError);
const errorMessage = parseError instanceof Error
? parseError.message
: 'Unknown error during JSON parsing';
const errorResult = queryStore.addQuery(name, query, null, false, `Invalid query format: ${errorMessage}`);
resolve({ content: errorResult });
return;
}
// Execute the query using InstantDB Admin SDK
const result = await db.query(parsedQuery);
// Store the successful query result
const newQuery = queryStore.addQuery(name, query, result, true);
console.error(
"[Tool] Query executed successfully, result:",
JSON.stringify(result, null, 2)
);
resolve({ content: newQuery });
} catch (error) {
console.error("[Tool] Error executing query:", error);
// Store the failed query attempt with error information
const errorMessage = error instanceof Error
? error.message
: 'Unknown error during query execution';
const errorQuery = queryStore.addQuery(
name,
query,
null,
false,
errorMessage
);
resolve({ content: errorQuery });
}
});
}