UNPKG

firebase-tools

Version:
42 lines (41 loc) 1.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validate_rules = void 0; const zod_1 = require("zod"); const apiv2_1 = require("../../../apiv2"); const tool_1 = require("../../tool"); const util_1 = require("../../util"); const rtdb_1 = require("../../../rtdb"); const error_1 = require("../../../error"); exports.validate_rules = (0, tool_1.tool)({ name: "validate_rules", description: "Validates an RTDB database's rules", inputSchema: zod_1.z.object({ databaseUrl: zod_1.z .string() .optional() .describe("connect to the database at url. If omitted, use default database instance <project>-default-rtdb.firebaseio.com. Can point to emulator URL (e.g. localhost:6000/<instance>)"), rules: zod_1.z .string() .describe('The rules object, as a string (ex: {"rules": {".read": false, ".write": false}})'), }), annotations: { title: "Validate Realtime Database rules", idempotentHint: true, }, _meta: { requiresAuth: true, requiresProject: false, }, }, async ({ databaseUrl, rules }, { projectId, host }) => { const dbUrl = databaseUrl !== null && databaseUrl !== void 0 ? databaseUrl : `https://${projectId}-default-rtdb.us-central1.firebasedatabase.app`; const client = new apiv2_1.Client({ urlPrefix: dbUrl }); try { await (0, rtdb_1.updateRulesWithClient)(client, rules, { dryRun: true }); } catch (e) { host.logger.debug(`failed to validate rules at url ${dbUrl}`); return (0, util_1.mcpError)((0, error_1.getErrMsg)(e)); } return (0, util_1.toContent)("the inputted rules are valid!"); });