firebase-tools
Version:
Command-Line Interface for Firebase
41 lines (40 loc) • 2.35 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.command = void 0;
const command_1 = require("../command");
const projectUtils_1 = require("../projectUtils");
const fileUtils_1 = require("../dataconnect/fileUtils");
const error_1 = require("../error");
const requireAuth_1 = require("../requireAuth");
const requirePermissions_1 = require("../requirePermissions");
const ensureApis_1 = require("../dataconnect/ensureApis");
const permissionsSetup_1 = require("../gcp/cloudsql/permissionsSetup");
const permissions_1 = require("../gcp/cloudsql/permissions");
const schemaMigration_1 = require("../dataconnect/schemaMigration");
const connect_1 = require("../gcp/cloudsql/connect");
const cloudSqlAdminClient = require("../gcp/cloudsql/cloudsqladmin");
exports.command = new command_1.Command("dataconnect:sql:setup [serviceId]")
.description("set up your CloudSQL database")
.before(requirePermissions_1.requirePermissions, [
"firebasedataconnect.services.list",
"firebasedataconnect.schemas.list",
"firebasedataconnect.schemas.update",
"cloudsql.instances.connect",
])
.before(requireAuth_1.requireAuth)
.action(async (serviceId, options) => {
var _a;
const projectId = (0, projectUtils_1.needProjectId)(options);
await (0, ensureApis_1.ensureApis)(projectId);
const serviceInfo = await (0, fileUtils_1.pickService)(projectId, options.config, serviceId);
const instanceId = (_a = serviceInfo.dataConnectYaml.schema.datasource.postgresql) === null || _a === void 0 ? void 0 : _a.cloudSql.instanceId;
if (!instanceId) {
throw new error_1.FirebaseError("dataconnect.yaml is missing field schema.datasource.postgresql.cloudsql.instanceId");
}
const { serviceName, instanceName, databaseId } = (0, schemaMigration_1.getIdentifiers)(serviceInfo.schema);
await (0, schemaMigration_1.ensureServiceIsConnectedToCloudSql)(serviceName, instanceName, databaseId, true);
const { user, mode } = await (0, connect_1.getIAMUser)(options);
await cloudSqlAdminClient.createUser(projectId, instanceId, mode, user);
const schemaInfo = await (0, permissionsSetup_1.getSchemaMetadata)(instanceId, databaseId, permissions_1.DEFAULT_SCHEMA, options);
await (0, permissionsSetup_1.setupSQLPermissions)(instanceId, databaseId, schemaInfo, options);
});
;