firebase-tools
Version:
Command-Line Interface for Firebase
49 lines (48 loc) • 2.17 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.execute_graphql = void 0;
const zod_1 = require("zod");
const tool_js_1 = require("../../tool.js");
const dataplane = require("../../../dataconnect/dataplaneClient.js");
const fileUtils_js_1 = require("../../../dataconnect/fileUtils.js");
const converter_js_1 = require("./converter.js");
const emulator_js_1 = require("./emulator.js");
exports.execute_graphql = (0, tool_js_1.tool)({
name: "execute_graphql",
description: "Executes an arbitrary GraphQL against a Data Connect service or its emulator.",
inputSchema: zod_1.z.object({
query: zod_1.z.string().describe("A GraphQL query or mutation to execute against the service"),
service_id: zod_1.z
.string()
.nullable()
.describe("The Firebase Data Connect service ID to look for. If there is only one service defined in firebase.json, this can be omitted and that will be used."),
variables: zod_1.z
.string()
.optional()
.describe("A stringified JSON object containing variables for the operation. MUST be valid JSON."),
use_emulator: zod_1.z.boolean().default(false).describe("Target the DataConnect emulator if true."),
}),
annotations: {
title: "Execute GraphQL Operation",
readOnlyHint: false,
},
_meta: {
requiresProject: true,
requiresAuth: true,
},
}, async ({ query, service_id, variables: unparsedVariables, use_emulator }, { projectId, config, host }) => {
const serviceInfo = await (0, fileUtils_js_1.pickService)(projectId, config, service_id || undefined);
let apiClient;
if (use_emulator) {
apiClient = await (0, emulator_js_1.getDataConnectEmulatorClient)(host);
}
else {
apiClient = dataplane.dataconnectDataplaneClient();
}
const response = await dataplane.executeGraphQL(apiClient, serviceInfo.serviceName, {
name: "",
query,
variables: (0, converter_js_1.parseVariables)(unparsedVariables),
});
return (0, converter_js_1.graphqlResponseToToolResponse)(response.body);
});
;