firebase-tools
Version:
Command-Line Interface for Firebase
42 lines (41 loc) • 1.72 kB
JavaScript
;
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!");
});