firebase-tools
Version:
Command-Line Interface for Firebase
111 lines (110 loc) • 4.43 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.askQuestions = askQuestions;
exports.actuate = actuate;
const clc = require("colorette");
const prompt_1 = require("../../prompt");
const logger_1 = require("../../logger");
const getDefaultHostingSite_1 = require("../../getDefaultHostingSite");
const interactive_1 = require("../../hosting/interactive");
const api_1 = require("../../hosting/api");
const utils_1 = require("../../utils");
async function askQuestions(setup, config, options) {
const authConfig = setup.config.auth;
const choices = [
{
name: "Google Sign-In",
value: "google",
checked: !!authConfig?.providers?.googleSignIn,
},
{
name: "Email/Password",
value: "email",
checked: !!authConfig?.providers?.emailPassword,
},
{
name: "Anonymous",
value: "anonymous",
checked: !!authConfig?.providers?.anonymous,
},
];
const providers = await (0, prompt_1.checkbox)({
message: "Which providers would you like to enable? If you don't see a provider here, go to the Firebase Console to set it up.",
choices: choices,
});
const providersConfig = {};
if (providers.includes("anonymous")) {
providersConfig.anonymous = true;
}
if (providers.includes("email")) {
providersConfig.emailPassword = true;
}
if (providers.includes("google")) {
logger_1.logger.info("");
logger_1.logger.info("Configuring Google Sign-In...");
const projectId = setup.projectId;
const defaultDisplayName = authConfig?.providers?.googleSignIn?.oAuthBrandDisplayName || projectId || "My App";
const oAuthBrandDisplayName = await (0, prompt_1.input)({
message: "What display name would you like to use for your OAuth brand?",
default: defaultDisplayName,
});
const defaultEmail = authConfig?.providers?.googleSignIn?.supportEmail ||
(projectId ? `support@${projectId}.firebaseapp.com` : undefined);
const supportEmail = await (0, prompt_1.input)({
message: "What support email would you like to register for your OAuth brand?",
default: defaultEmail,
});
providersConfig.googleSignIn = {
oAuthBrandDisplayName,
supportEmail,
};
}
let newSiteId;
if (setup.projectId) {
let existingSite = setup.featureInfo?.hosting?.newSiteId;
if (!existingSite) {
try {
existingSite = await (0, getDefaultHostingSite_1.getDefaultHostingSite)({ projectId: setup.projectId });
}
catch (err) {
if (err !== getDefaultHostingSite_1.errNoDefaultSite) {
throw err;
}
}
}
if (existingSite) {
logger_1.logger.info(`Firebase Hosting site is present: ${clc.bold(existingSite)}.`);
}
else if (await (0, prompt_1.confirm)({
message: "A Firebase Hosting site is required for Firebase Authentication. Would you like to create a default site now?",
default: true,
nonInteractive: options?.nonInteractive,
})) {
newSiteId = await (0, interactive_1.pickHostingSiteName)("", {
projectId: setup.projectId,
nonInteractive: options?.nonInteractive,
});
}
}
if (!setup.featureInfo) {
setup.featureInfo = {};
}
setup.featureInfo.auth = { providers: providersConfig, newSiteId };
}
async function actuate(setup, config) {
const authConfig = setup.featureInfo?.auth;
if (!authConfig) {
return;
}
if (authConfig.newSiteId && setup.projectId) {
await (0, api_1.createSite)(setup.projectId, authConfig.newSiteId);
logger_1.logger.info("");
(0, utils_1.logSuccess)(`Firebase Hosting site ${authConfig.newSiteId} created!`);
logger_1.logger.info("");
}
config.set("auth", { providers: authConfig.providers });
config.writeProjectFile("firebase.json", config.src);
logger_1.logger.info("");
logger_1.logger.info("Generated firebase.json with auth configuration.");
logger_1.logger.info("Run " + clc.bold("firebase deploy") + " to enable these providers.");
}