UNPKG

firebase-tools

Version:
111 lines (110 loc) • 4.43 kB
"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."); }