diff --git a/src/init/features/dataconnect/index.ts b/src/init/features/dataconnect/index.ts index c39d277237d..734bf270bca 100644 --- a/src/init/features/dataconnect/index.ts +++ b/src/init/features/dataconnect/index.ts @@ -40,6 +40,9 @@ import { import { configstore } from "../../../configstore"; import { trackGA4 } from "../../../track"; +// Default GCP region for Data Connect +export const FDC_DEFAULT_REGION = "us-east4"; + const DATACONNECT_YAML_TEMPLATE = readTemplateSync("init/dataconnect/dataconnect.yaml"); const CONNECTOR_YAML_TEMPLATE = readTemplateSync("init/dataconnect/connector.yaml"); const SCHEMA_TEMPLATE = readTemplateSync("init/dataconnect/schema.gql"); @@ -125,6 +128,8 @@ export async function askQuestions(setup: Setup): Promise { } if (hasBilling) { await promptForCloudSQL(setup, info); + } else if (info.appDescription) { + await promptForLocation(setup, info); } } setup.featureInfo = setup.featureInfo || {}; @@ -148,7 +153,7 @@ export async function actuate(setup: Setup, config: Config, options: any): Promi // Populate the default values of required fields. info.serviceId = info.serviceId || defaultServiceId(); info.cloudSqlInstanceId = info.cloudSqlInstanceId || `${info.serviceId.toLowerCase()}-fdc`; - info.locationId = info.locationId || `us-central1`; + info.locationId = info.locationId || FDC_DEFAULT_REGION; info.cloudSqlDatabase = info.cloudSqlDatabase || `fdcdb`; try { @@ -435,10 +440,10 @@ function subDataconnectYamlValues(replacementValues: { }): string { const replacements: Record = { serviceId: "__serviceId__", + locationId: "__location__", cloudSqlDatabase: "__cloudSqlDatabase__", cloudSqlInstanceId: "__cloudSqlInstanceId__", connectorDirs: "__connectorDirs__", - locationId: "__location__", }; let replaced = DATACONNECT_YAML_TEMPLATE; for (const [k, v] of Object.entries(replacementValues)) { @@ -614,12 +619,7 @@ async function promptForCloudSQL(setup: Setup, info: RequiredInfo): Promise({ - message: "What location would like to use?", - choices, - default: "us-east4", - }); + await promptForLocation(setup, info); info.shouldProvisionCSQL = await confirm({ message: `Would you like to provision your Cloud SQL instance and database now?`, default: true, @@ -642,6 +642,17 @@ async function promptForCloudSQL(setup: Setup, info: RequiredInfo): Promise { + if (info.locationId === "") { + const choices = await locationChoices(setup); + info.locationId = await select({ + message: "What location would you like to use?", + choices, + default: FDC_DEFAULT_REGION, + }); + } +} + async function locationChoices(setup: Setup) { if (setup.projectId) { const locations = await listLocations(setup.projectId); diff --git a/src/mcp/tools/core/init.ts b/src/mcp/tools/core/init.ts index 32e23817e82..46075a01df7 100644 --- a/src/mcp/tools/core/init.ts +++ b/src/mcp/tools/core/init.ts @@ -12,6 +12,7 @@ import { validateAppExists, } from "../../../init/features/ailogic/utils"; import { getFirebaseProject } from "../../../management/projects"; +import { FDC_DEFAULT_REGION } from "../../../init/features/dataconnect"; export const init = tool( { @@ -82,7 +83,7 @@ export const init = tool( location_id: z .string() .optional() - .default("us-central1") + .default(FDC_DEFAULT_REGION) .describe("The GCP region ID to set up the Firebase Data Connect service."), cloudsql_instance_id: z .string()