firebase-tools 15.0.0 → 15.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/accountExporter.js +3 -5
- package/lib/accountImporter.js +4 -5
- package/lib/api.js +3 -3
- package/lib/apiv2.js +9 -13
- package/lib/appUtils.js +33 -36
- package/lib/appdistribution/client.js +4 -8
- package/lib/appdistribution/distribution.js +4 -4
- package/lib/appdistribution/options-parser-util.js +8 -9
- package/lib/appdistribution/types.js +2 -2
- package/lib/appdistribution/yaml_helper.js +33 -17
- package/lib/apphosting/app.js +8 -13
- package/lib/apphosting/backend.js +34 -24
- package/lib/apphosting/config.js +14 -14
- package/lib/apphosting/githubConnections.js +38 -35
- package/lib/apphosting/localbuilds.js +4 -6
- package/lib/apphosting/repo.js +24 -20
- package/lib/apphosting/rollout.js +12 -5
- package/lib/apphosting/secrets/dialogs.js +9 -9
- package/lib/apphosting/secrets/index.js +9 -11
- package/lib/apphosting/utils.js +2 -3
- package/lib/apphosting/yaml.js +12 -11
- package/lib/apptesting/ensureProjectConfigured.js +1 -2
- package/lib/apptesting/invokeTests.js +2 -3
- package/lib/apptesting/parseTestFiles.js +5 -6
- package/lib/apptesting/types.js +2 -2
- package/lib/archiveDirectory.js +1 -2
- package/lib/auth.js +36 -40
- package/lib/bin/cli.js +2 -3
- package/lib/bin/mcp.js +47 -10
- package/lib/checkMinRequiredVersion.js +1 -2
- package/lib/checkValidTargetFilters.js +1 -2
- package/lib/command.js +6 -9
- package/lib/commands/appdistribution-testers-list.js +2 -3
- package/lib/commands/apphosting-backends-list.js +4 -6
- package/lib/commands/apphosting-builds-create.js +2 -3
- package/lib/commands/apphosting-builds-get.js +1 -2
- package/lib/commands/apphosting-rollouts-list.js +1 -2
- package/lib/commands/apps-init.js +1 -1
- package/lib/commands/{apptesting-execute.js → apptesting-wata.js} +3 -4
- package/lib/commands/crashlytics-symbols-upload.js +2 -2
- package/lib/commands/dataconnect-execute.js +4 -4
- package/lib/commands/dataconnect-sdk-generate.js +5 -6
- package/lib/commands/dataconnect-services-list.js +7 -8
- package/lib/commands/dataconnect-sql-diff.js +1 -2
- package/lib/commands/dataconnect-sql-migrate.js +4 -3
- package/lib/commands/dataconnect-sql-setup.js +2 -2
- package/lib/commands/dataconnect-sql-shell.js +5 -1
- package/lib/commands/emulators-start.js +1 -2
- package/lib/commands/ext-configure.js +6 -4
- package/lib/commands/ext-dev-list.js +2 -3
- package/lib/commands/ext-dev-upload.js +2 -2
- package/lib/commands/ext-export.js +1 -1
- package/lib/commands/ext-info.js +2 -3
- package/lib/commands/ext-install.js +5 -7
- package/lib/commands/firestore-backups-list.js +1 -2
- package/lib/commands/firestore-backups-schedules-list.js +1 -2
- package/lib/commands/firestore-indexes-list.js +1 -2
- package/lib/commands/firestore-utils.js +1 -2
- package/lib/commands/functions-artifacts-setpolicy.js +1 -2
- package/lib/commands/functions-config-export.js +2 -3
- package/lib/commands/hosting-channel-deploy.js +2 -2
- package/lib/commands/hosting-clone.js +2 -3
- package/lib/commands/hosting-sites-create.js +1 -1
- package/lib/commands/index.js +2 -3
- package/lib/commands/init.js +4 -5
- package/lib/commands/internaltesting-functions-discover.js +1 -1
- package/lib/commands/login.js +4 -5
- package/lib/commands/logout.js +3 -3
- package/lib/commands/projects-create.js +1 -1
- package/lib/commands/remoteconfig-experiments-list.js +2 -3
- package/lib/commands/remoteconfig-get.js +1 -1
- package/lib/commands/remoteconfig-rollback.js +1 -2
- package/lib/commands/remoteconfig-rollouts-list.js +2 -3
- package/lib/commands/remoteconfig-versions-list.js +3 -4
- package/lib/commands/use.js +3 -3
- package/lib/config.js +4 -5
- package/lib/crashlytics/buildToolsJarHelper.js +3 -5
- package/lib/crashlytics/events.js +4 -7
- package/lib/crashlytics/filters.js +10 -12
- package/lib/crashlytics/issues.js +2 -3
- package/lib/crashlytics/notes.js +3 -4
- package/lib/crashlytics/reports.js +21 -15
- package/lib/crashlytics/types.js +7 -7
- package/lib/crashlytics/utils.js +4 -4
- package/lib/database/api.js +2 -3
- package/lib/database/import.js +4 -4
- package/lib/database/metadata.js +5 -6
- package/lib/database/rulesConfig.js +2 -3
- package/lib/dataconnect/build.js +10 -13
- package/lib/dataconnect/checkIam.js +1 -2
- package/lib/dataconnect/client.js +15 -18
- package/lib/dataconnect/dataplaneClient.js +6 -6
- package/lib/dataconnect/ensureApis.js +2 -3
- package/lib/dataconnect/errors.js +8 -11
- package/lib/dataconnect/filters.js +2 -3
- package/lib/dataconnect/freeTrial.js +3 -4
- package/lib/dataconnect/graphqlError.js +5 -8
- package/lib/dataconnect/load.js +10 -11
- package/lib/dataconnect/names.js +14 -18
- package/lib/dataconnect/prompts.js +1 -2
- package/lib/dataconnect/provisionCloudSql.js +13 -17
- package/lib/dataconnect/schemaMigration.js +60 -27
- package/lib/dataconnect/types.js +10 -12
- package/lib/dataconnect/webhook.js +3 -3
- package/lib/defaultCredentials.js +3 -4
- package/lib/deploy/apphosting/deploy.js +2 -3
- package/lib/deploy/apphosting/prepare.js +3 -5
- package/lib/deploy/apphosting/release.js +1 -1
- package/lib/deploy/apphosting/util.js +1 -2
- package/lib/deploy/database/deploy.js +1 -2
- package/lib/deploy/database/prepare.js +1 -2
- package/lib/deploy/database/release.js +1 -2
- package/lib/deploy/dataconnect/context.js +15 -4
- package/lib/deploy/dataconnect/deploy.js +5 -6
- package/lib/deploy/dataconnect/prepare.js +7 -9
- package/lib/deploy/dataconnect/release.js +7 -10
- package/lib/deploy/extensions/deploy.js +7 -9
- package/lib/deploy/extensions/deploymentSummary.js +6 -7
- package/lib/deploy/extensions/planner.js +15 -18
- package/lib/deploy/extensions/prepare.js +9 -11
- package/lib/deploy/extensions/release.js +10 -12
- package/lib/deploy/extensions/secrets.js +8 -11
- package/lib/deploy/extensions/tasks.js +6 -8
- package/lib/deploy/extensions/v2FunctionHelper.js +2 -3
- package/lib/deploy/extensions/validate.js +1 -2
- package/lib/deploy/firestore/deploy.js +3 -5
- package/lib/deploy/firestore/prepare.js +2 -3
- package/lib/deploy/firestore/release.js +3 -4
- package/lib/deploy/functions/backend.js +52 -42
- package/lib/deploy/functions/build.js +41 -15
- package/lib/deploy/functions/cache/applyHash.js +3 -5
- package/lib/deploy/functions/cache/hash.js +4 -5
- package/lib/deploy/functions/cel.js +3 -3
- package/lib/deploy/functions/checkIam.js +8 -8
- package/lib/deploy/functions/containerCleaner.js +10 -6
- package/lib/deploy/functions/deploy.js +6 -8
- package/lib/deploy/functions/ensure.js +6 -9
- package/lib/deploy/functions/functionsDeployHelper.js +10 -11
- package/lib/deploy/functions/params.js +10 -10
- package/lib/deploy/functions/prepare.js +41 -36
- package/lib/deploy/functions/prepareFunctionsUpload.js +24 -10
- package/lib/deploy/functions/pricing.js +3 -3
- package/lib/deploy/functions/prompts.js +7 -10
- package/lib/deploy/functions/release/executor.js +5 -6
- package/lib/deploy/functions/release/fabricator.js +76 -29
- package/lib/deploy/functions/release/index.js +23 -14
- package/lib/deploy/functions/release/planner.js +15 -14
- package/lib/deploy/functions/release/reporter.js +20 -20
- package/lib/deploy/functions/release/sourceTokenScraper.js +4 -5
- package/lib/deploy/functions/remoteSource.js +3 -4
- package/lib/deploy/functions/runtimes/discovery/index.js +9 -12
- package/lib/deploy/functions/runtimes/discovery/parsing.js +2 -3
- package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +29 -10
- package/lib/deploy/functions/runtimes/index.js +1 -2
- package/lib/deploy/functions/runtimes/node/index.js +18 -9
- package/lib/deploy/functions/runtimes/node/parseRuntimeAndValidateSDK.js +2 -2
- package/lib/deploy/functions/runtimes/node/validate.js +1 -2
- package/lib/deploy/functions/runtimes/node/versioning.js +6 -7
- package/lib/deploy/functions/runtimes/python/index.js +12 -12
- package/lib/deploy/functions/runtimes/supported/index.js +5 -6
- package/lib/deploy/functions/services/auth.js +49 -36
- package/lib/deploy/functions/services/database.js +1 -2
- package/lib/deploy/functions/services/dataconnect.js +16 -2
- package/lib/deploy/functions/services/firebaseAlerts.js +1 -2
- package/lib/deploy/functions/services/firestore.js +3 -5
- package/lib/deploy/functions/services/index.js +2 -2
- package/lib/deploy/functions/services/remoteConfig.js +1 -2
- package/lib/deploy/functions/services/storage.js +3 -5
- package/lib/deploy/functions/services/testLab.js +1 -2
- package/lib/deploy/functions/triggerRegionHelper.js +1 -2
- package/lib/deploy/functions/validate.js +12 -11
- package/lib/deploy/hosting/convertConfig.js +38 -22
- package/lib/deploy/hosting/deploy.js +4 -7
- package/lib/deploy/hosting/hashcache.js +2 -3
- package/lib/deploy/hosting/prepare.js +14 -14
- package/lib/deploy/hosting/release.js +1 -2
- package/lib/deploy/index.js +7 -8
- package/lib/deploy/lifecycleHooks.js +3 -5
- package/lib/deploy/remoteconfig/deploy.js +1 -1
- package/lib/deploy/remoteconfig/functions.js +5 -6
- package/lib/deploy/remoteconfig/prepare.js +2 -3
- package/lib/deploy/remoteconfig/release.js +2 -2
- package/lib/deploy/storage/deploy.js +1 -1
- package/lib/deploy/storage/prepare.js +1 -1
- package/lib/deploy/storage/release.js +1 -1
- package/lib/deploymentTool.js +5 -6
- package/lib/detectProjectRoot.js +1 -2
- package/lib/downloadUtils.js +2 -3
- package/lib/emulator/adminSdkConfig.js +2 -3
- package/lib/emulator/apphosting/config.js +1 -2
- package/lib/emulator/apphosting/developmentServer.js +3 -3
- package/lib/emulator/apphosting/serve.js +20 -14
- package/lib/emulator/auth/cloudFunctions.js +2 -3
- package/lib/emulator/auth/errors.js +2 -2
- package/lib/emulator/auth/handlers.js +3 -4
- package/lib/emulator/auth/index.js +6 -6
- package/lib/emulator/auth/operations.js +171 -129
- package/lib/emulator/auth/server.js +30 -22
- package/lib/emulator/auth/state.js +26 -36
- package/lib/emulator/auth/utils.js +12 -13
- package/lib/emulator/commandUtils.js +20 -20
- package/lib/emulator/controller.js +32 -29
- package/lib/emulator/databaseEmulator.js +1 -2
- package/lib/emulator/dataconnect/pgliteServer.js +48 -104
- package/lib/emulator/dataconnectEmulator.js +6 -9
- package/lib/emulator/download.js +2 -3
- package/lib/emulator/downloadableEmulatorInfo.json +31 -31
- package/lib/emulator/downloadableEmulators.js +49 -24
- package/lib/emulator/emulatorLogger.js +19 -4
- package/lib/emulator/env.js +6 -8
- package/lib/emulator/eventarcEmulator.js +2 -3
- package/lib/emulator/eventarcEmulatorUtils.js +3 -6
- package/lib/emulator/extensions/postinstall.js +1 -2
- package/lib/emulator/extensions/validation.js +4 -7
- package/lib/emulator/extensionsEmulator.js +6 -9
- package/lib/emulator/functionsEmulator.js +89 -46
- package/lib/emulator/functionsEmulatorRuntime.js +1 -1
- package/lib/emulator/functionsEmulatorShared.js +30 -30
- package/lib/emulator/functionsEmulatorShell.js +4 -6
- package/lib/emulator/functionsEmulatorUtils.js +8 -9
- package/lib/emulator/functionsRuntimeWorker.js +18 -9
- package/lib/emulator/hub.js +41 -34
- package/lib/emulator/hubClient.js +1 -1
- package/lib/emulator/initEmulators.js +2 -3
- package/lib/emulator/loggingEmulator.js +2 -2
- package/lib/emulator/portUtils.js +4 -5
- package/lib/emulator/registry.js +10 -4
- package/lib/emulator/shared/request.js +1 -2
- package/lib/emulator/storage/apis/firebase.js +16 -20
- package/lib/emulator/storage/apis/gcloud.js +6 -9
- package/lib/emulator/storage/apis/shared.js +1 -2
- package/lib/emulator/storage/crc.js +2 -3
- package/lib/emulator/storage/files.js +18 -41
- package/lib/emulator/storage/metadata.js +10 -4
- package/lib/emulator/storage/multipart.js +1 -2
- package/lib/emulator/storage/rfc.js +1 -2
- package/lib/emulator/storage/rules/config.js +1 -2
- package/lib/emulator/storage/rules/manager.js +3 -5
- package/lib/emulator/storage/rules/runtime.js +15 -13
- package/lib/emulator/storage/rules/types.js +2 -2
- package/lib/emulator/storage/rules/utils.js +5 -6
- package/lib/emulator/storage/server.js +1 -2
- package/lib/emulator/storage/upload.js +3 -4
- package/lib/emulator/taskQueue.js +11 -4
- package/lib/emulator/tasksEmulator.js +11 -12
- package/lib/emulator/types.js +6 -6
- package/lib/emulator/ui.js +6 -1
- package/lib/ensureApiEnabled.js +7 -9
- package/lib/env.js +2 -3
- package/lib/error.js +11 -13
- package/lib/errorOut.js +1 -2
- package/lib/experiments.js +15 -18
- package/lib/extensions/askUserForEventsConfig.js +12 -13
- package/lib/extensions/askUserForParam.js +11 -12
- package/lib/extensions/change-log.js +4 -5
- package/lib/extensions/checkProjectBilling.js +1 -2
- package/lib/extensions/diagnose.js +1 -2
- package/lib/extensions/displayExtensionInfo.js +25 -32
- package/lib/extensions/emulator/optionsHelper.js +6 -8
- package/lib/extensions/emulator/specHelper.js +15 -16
- package/lib/extensions/emulator/triggerHelper.js +3 -5
- package/lib/extensions/etags.js +2 -3
- package/lib/extensions/export.js +7 -9
- package/lib/extensions/extensionsApi.js +23 -29
- package/lib/extensions/extensionsHelper.js +52 -80
- package/lib/extensions/listExtensions.js +3 -5
- package/lib/extensions/localHelper.js +5 -5
- package/lib/extensions/manifest.js +15 -16
- package/lib/extensions/metricsUtils.js +3 -4
- package/lib/extensions/paramHelper.js +21 -18
- package/lib/extensions/provisioningHelper.js +17 -21
- package/lib/extensions/publishHelpers.js +1 -2
- package/lib/extensions/publisherApi.js +11 -13
- package/lib/extensions/refs.js +6 -7
- package/lib/extensions/runtimes/common.js +18 -19
- package/lib/extensions/runtimes/node.js +5 -6
- package/lib/extensions/secretsUtils.js +8 -8
- package/lib/extensions/tos.js +7 -8
- package/lib/extensions/types.js +3 -3
- package/lib/extensions/updateHelper.js +6 -7
- package/lib/extensions/utils.js +6 -8
- package/lib/extensions/versionHelper.js +1 -2
- package/lib/extensions/warnings.js +6 -8
- package/lib/fetchMOTD.js +1 -2
- package/lib/fetchWebSetup.js +3 -4
- package/lib/filterTargets.js +1 -2
- package/lib/firebaseConfigValidate.js +2 -3
- package/lib/firestore/api-sort.js +8 -9
- package/lib/firestore/api-types.js +15 -15
- package/lib/firestore/api.js +15 -13
- package/lib/firestore/backupUtils.js +3 -3
- package/lib/firestore/checkDatabaseType.js +1 -2
- package/lib/firestore/delete.js +1 -2
- package/lib/firestore/encodeFirestoreValue.js +1 -2
- package/lib/firestore/fsConfig.js +1 -2
- package/lib/firestore/options.js +1 -1
- package/lib/firestore/util.js +5 -6
- package/lib/firestore/validator.js +4 -5
- package/lib/frameworks/angular/index.js +14 -15
- package/lib/frameworks/angular/utils.js +21 -23
- package/lib/frameworks/astro/index.js +7 -7
- package/lib/frameworks/astro/utils.js +4 -6
- package/lib/frameworks/compose/discover/filesystem.js +3 -3
- package/lib/frameworks/compose/discover/frameworkMatcher.js +4 -5
- package/lib/frameworks/compose/discover/index.js +1 -2
- package/lib/frameworks/compose/discover/runtime/node.js +8 -11
- package/lib/frameworks/compose/driver/docker.js +3 -5
- package/lib/frameworks/compose/driver/hooks.js +2 -2
- package/lib/frameworks/compose/driver/index.js +2 -2
- package/lib/frameworks/compose/driver/local.js +2 -3
- package/lib/frameworks/compose/index.js +5 -7
- package/lib/frameworks/constants.js +3 -3
- package/lib/frameworks/express/index.js +7 -8
- package/lib/frameworks/flutter/index.js +6 -7
- package/lib/frameworks/flutter/utils.js +4 -5
- package/lib/frameworks/index.js +21 -22
- package/lib/frameworks/next/constants.js +5 -2
- package/lib/frameworks/next/index.js +34 -32
- package/lib/frameworks/next/utils.js +40 -39
- package/lib/frameworks/nuxt/index.js +9 -9
- package/lib/frameworks/nuxt/utils.js +4 -6
- package/lib/frameworks/nuxt2/index.js +7 -7
- package/lib/frameworks/sveltekit/index.js +6 -8
- package/lib/frameworks/utils.js +26 -24
- package/lib/frameworks/vite/index.js +8 -9
- package/lib/fsAsync.js +1 -2
- package/lib/fsutils.js +5 -6
- package/lib/functional.js +11 -11
- package/lib/functions/artifacts.js +25 -22
- package/lib/functions/ensureTargeted.js +1 -2
- package/lib/functions/env.js +13 -14
- package/lib/functions/functionslog.js +2 -3
- package/lib/functions/projectConfig.js +29 -33
- package/lib/functions/python.js +10 -4
- package/lib/functions/secrets.js +32 -18
- package/lib/functionsConfig.js +14 -14
- package/lib/functionsConfigClone.js +1 -2
- package/lib/functionsShellCommandAction.js +2 -3
- package/lib/gcp/apphosting.js +43 -28
- package/lib/gcp/apptesting.js +2 -2
- package/lib/gcp/artifactregistry.js +5 -5
- package/lib/gcp/auth.js +11 -13
- package/lib/gcp/cloudbilling.js +4 -5
- package/lib/gcp/cloudbuild.js +10 -11
- package/lib/gcp/cloudfunctions.js +61 -45
- package/lib/gcp/cloudfunctionsv2.js +81 -43
- package/lib/gcp/cloudlogging.js +2 -4
- package/lib/gcp/cloudmonitoring.js +7 -7
- package/lib/gcp/cloudscheduler.js +12 -14
- package/lib/gcp/cloudsql/cloudsqladmin.js +19 -21
- package/lib/gcp/cloudsql/connect.js +14 -9
- package/lib/gcp/cloudsql/fbToolsAuthClient.js +5 -3
- package/lib/gcp/cloudsql/interactive.js +2 -3
- package/lib/gcp/cloudsql/permissions.js +8 -8
- package/lib/gcp/cloudsql/permissionsSetup.js +9 -9
- package/lib/gcp/cloudtasks.js +19 -18
- package/lib/gcp/computeEngine.js +1 -2
- package/lib/gcp/devConnect.js +32 -29
- package/lib/gcp/docker.js +2 -4
- package/lib/gcp/eventarc.js +5 -5
- package/lib/gcp/firedata.js +4 -4
- package/lib/gcp/firestore.js +16 -16
- package/lib/gcp/iam.js +11 -12
- package/lib/gcp/identityPlatform.js +4 -5
- package/lib/gcp/k8s.js +1 -2
- package/lib/gcp/location.js +2 -2
- package/lib/gcp/proto.js +10 -11
- package/lib/gcp/pubsub.js +4 -5
- package/lib/gcp/resourceManager.js +5 -5
- package/lib/gcp/rules.js +13 -14
- package/lib/gcp/run.js +24 -31
- package/lib/gcp/runv2.js +39 -27
- package/lib/gcp/secretManager.js +60 -39
- package/lib/gcp/serviceusage.js +8 -4
- package/lib/gcp/storage.js +22 -20
- package/lib/gemini/fdcExperience.js +5 -5
- package/lib/getDefaultDatabaseInstance.js +2 -4
- package/lib/getDefaultHostingSite.js +3 -4
- package/lib/getProjectNumber.js +1 -2
- package/lib/hosting/api.js +32 -36
- package/lib/hosting/cloudRunProxy.js +2 -3
- package/lib/hosting/config.js +17 -17
- package/lib/hosting/expireUtils.js +3 -3
- package/lib/hosting/functionsProxy.js +1 -2
- package/lib/hosting/implicitInit.js +1 -2
- package/lib/hosting/initMiddleware.js +1 -2
- package/lib/hosting/interactive.js +1 -2
- package/lib/hosting/proxy.js +3 -5
- package/lib/hosting/runTags.js +8 -11
- package/lib/init/features/account.js +1 -2
- package/lib/init/features/ailogic/index.js +3 -5
- package/lib/init/features/ailogic/utils.js +6 -8
- package/lib/init/features/aitools/claude.js +1 -2
- package/lib/init/features/aitools/cursor.js +1 -2
- package/lib/init/features/aitools/gemini.js +1 -1
- package/lib/init/features/aitools/promptUpdater.js +10 -12
- package/lib/init/features/aitools.js +1 -2
- package/lib/init/features/apphosting.js +3 -4
- package/lib/init/features/apptesting/index.js +9 -9
- package/lib/init/features/database.js +4 -5
- package/lib/init/features/dataconnect/create_app.js +3 -4
- package/lib/init/features/dataconnect/index.js +25 -22
- package/lib/init/features/dataconnect/resolver.js +6 -10
- package/lib/init/features/dataconnect/sdk.js +31 -24
- package/lib/init/features/emulators.js +7 -6
- package/lib/init/features/extensions/index.js +3 -5
- package/lib/init/features/firestore/index.js +7 -9
- package/lib/init/features/firestore/indexes.js +2 -2
- package/lib/init/features/firestore/rules.js +3 -3
- package/lib/init/features/functions/index.js +3 -5
- package/lib/init/features/functions/javascript.js +1 -2
- package/lib/init/features/functions/npm-dependencies.js +1 -2
- package/lib/init/features/functions/python.js +1 -2
- package/lib/init/features/functions/typescript.js +1 -2
- package/lib/init/features/genkit/index.js +44 -18
- package/lib/init/features/hosting/github.js +6 -8
- package/lib/init/features/hosting/index.js +10 -13
- package/lib/init/features/project.js +4 -7
- package/lib/init/features/remoteconfig.js +1 -2
- package/lib/init/features/storage.js +3 -5
- package/lib/init/index.js +4 -7
- package/lib/init/spawn.js +7 -9
- package/lib/listFiles.js +1 -2
- package/lib/loadCJSON.js +1 -2
- package/lib/localFunction.js +14 -15
- package/lib/logError.js +1 -2
- package/lib/logger.js +7 -7
- package/lib/management/apps.js +22 -22
- package/lib/management/database.js +11 -12
- package/lib/management/projects.js +57 -56
- package/lib/management/provisioning/errorHandler.js +3 -5
- package/lib/management/provisioning/provision.js +15 -9
- package/lib/management/studio.js +2 -3
- package/lib/mcp/errors.js +4 -4
- package/lib/mcp/index.js +47 -45
- package/lib/mcp/prompt.js +1 -2
- package/lib/mcp/prompts/core/consult.js +2 -3
- package/lib/mcp/prompts/crashlytics/connect.js +15 -122
- package/lib/mcp/prompts/dataconnect/schema.js +3 -3
- package/lib/mcp/prompts/index.js +8 -10
- package/lib/mcp/resource.js +3 -15
- package/lib/mcp/resources/guides/app_id.js +39 -0
- package/lib/mcp/resources/guides/crashlytics_connect.js +51 -0
- package/lib/mcp/resources/guides/crashlytics_investigations.js +51 -0
- package/lib/mcp/resources/guides/crashlytics_issues.js +42 -0
- package/lib/mcp/resources/guides/crashlytics_reports.js +112 -0
- package/lib/mcp/resources/index.js +11 -3
- package/lib/mcp/tool.js +3 -15
- package/lib/mcp/tools/apphosting/fetch_logs.js +3 -4
- package/lib/mcp/tools/apphosting/list_backends.js +1 -1
- package/lib/mcp/tools/auth/get_users.js +5 -16
- package/lib/mcp/tools/core/create_android_sha.js +4 -1
- package/lib/mcp/tools/core/get_environment.js +7 -4
- package/lib/mcp/tools/core/get_sdk_config.js +4 -5
- package/lib/mcp/tools/core/get_security_rules.js +1 -2
- package/lib/mcp/tools/core/init.js +2 -2
- package/lib/mcp/tools/core/logout.js +1 -1
- package/lib/mcp/tools/core/read_resources.js +2 -2
- package/lib/mcp/tools/core/validate_security_rules.js +1 -2
- package/lib/mcp/tools/crashlytics/events.js +43 -19
- package/lib/mcp/tools/crashlytics/index.js +1 -6
- package/lib/mcp/tools/crashlytics/issues.js +33 -12
- package/lib/mcp/tools/crashlytics/reports.js +66 -117
- package/lib/mcp/tools/dataconnect/list_services.js +2 -3
- package/lib/mcp/tools/firestore/converter.js +3 -5
- package/lib/mcp/tools/firestore/delete_document.js +1 -1
- package/lib/mcp/tools/functions/get_logs.js +14 -12
- package/lib/mcp/tools/functions/list_functions.js +1 -1
- package/lib/mcp/tools/index.js +67 -50
- package/lib/mcp/util/apptesting/availability.js +1 -2
- package/lib/mcp/util/availability.js +1 -2
- package/lib/mcp/util/crashlytics/availability.js +1 -2
- package/lib/mcp/util/dataconnect/compile.js +7 -6
- package/lib/mcp/util/dataconnect/converter.js +7 -10
- package/lib/mcp/util/dataconnect/emulator.js +1 -2
- package/lib/mcp/util.js +9 -11
- package/lib/messaging/sendMessage.js +1 -2
- package/lib/metaprogramming.js +1 -2
- package/lib/operation-poller.js +2 -2
- package/lib/profileReport.js +6 -6
- package/lib/profiler.js +1 -2
- package/lib/projectPath.js +1 -2
- package/lib/projectUtils.js +5 -6
- package/lib/prompt.js +22 -13
- package/lib/rc.js +5 -7
- package/lib/remoteconfig/deleteExperiment.js +1 -2
- package/lib/remoteconfig/deleteRollout.js +1 -2
- package/lib/remoteconfig/get.js +2 -3
- package/lib/remoteconfig/getExperiment.js +2 -2
- package/lib/remoteconfig/getRollout.js +2 -2
- package/lib/remoteconfig/interfaces.js +1 -1
- package/lib/remoteconfig/listExperiments.js +2 -2
- package/lib/remoteconfig/listRollouts.js +2 -2
- package/lib/remoteconfig/publish.js +1 -2
- package/lib/remoteconfig/rollback.js +1 -2
- package/lib/remoteconfig/versionslist.js +1 -2
- package/lib/requireAuth.js +4 -6
- package/lib/requireConfig.js +5 -8
- package/lib/requireDatabaseInstance.js +2 -2
- package/lib/requireHostingSite.js +1 -2
- package/lib/requireInteractive.js +1 -1
- package/lib/requirePermissions.js +1 -2
- package/lib/requireTosAcceptance.js +1 -2
- package/lib/responseToError.js +1 -2
- package/lib/rtdb.js +2 -3
- package/lib/rulesDeploy.js +3 -4
- package/lib/serve/functions.js +9 -1
- package/lib/serve/hosting.js +4 -5
- package/lib/serve/index.js +1 -2
- package/lib/shortenUrl.js +1 -2
- package/lib/templates.js +3 -4
- package/lib/throttler/throttler.js +3 -3
- package/lib/timeout.js +2 -3
- package/lib/track.js +23 -14
- package/lib/tsconfig.publish.tsbuildinfo +1 -0
- package/lib/unzip.js +2 -3
- package/lib/utils.js +62 -63
- package/lib/vsCodeUtils.js +2 -3
- package/package.json +6 -6
- package/templates/extensions/typescript/index.ts +1 -1
- package/templates/extensions/typescript/package.lint.json +1 -1
- package/templates/extensions/typescript/package.nolint.json +1 -1
- package/templates/extensions/typescript/tsconfig.json +2 -1
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.setupCloudSql = setupCloudSql;
|
|
4
|
+
exports.cloudSQLBeingCreated = cloudSQLBeingCreated;
|
|
5
|
+
exports.getUpdateReason = getUpdateReason;
|
|
4
6
|
const clc = require("colorette");
|
|
5
7
|
const cloudSqlAdminClient = require("../gcp/cloudsql/cloudsqladmin");
|
|
6
8
|
const logger_1 = require("../logger");
|
|
@@ -12,13 +14,12 @@ const utils = require("../utils");
|
|
|
12
14
|
const cloudbilling_1 = require("../gcp/cloudbilling");
|
|
13
15
|
const GOOGLE_ML_INTEGRATION_ROLE = "roles/aiplatform.user";
|
|
14
16
|
async function setupCloudSql(args) {
|
|
15
|
-
var _a;
|
|
16
17
|
const { projectId, instanceId, requireGoogleMlIntegration, dryRun } = args;
|
|
17
18
|
const startTime = Date.now();
|
|
18
19
|
const stats = { action: "get" };
|
|
19
20
|
let success = false;
|
|
20
21
|
try {
|
|
21
|
-
await upsertInstance(stats,
|
|
22
|
+
await upsertInstance(stats, { ...args });
|
|
22
23
|
success = true;
|
|
23
24
|
}
|
|
24
25
|
finally {
|
|
@@ -28,7 +29,7 @@ async function setupCloudSql(args) {
|
|
|
28
29
|
action: success ? stats.action : `${stats.action}_error`,
|
|
29
30
|
location: args.location,
|
|
30
31
|
enable_google_ml_integration: args.requireGoogleMlIntegration.toString(),
|
|
31
|
-
database_version:
|
|
32
|
+
database_version: stats.databaseVersion?.toLowerCase() || "unknown",
|
|
32
33
|
dataconnect_label: stats.dataconnectLabel || "unknown",
|
|
33
34
|
}, Date.now() - startTime);
|
|
34
35
|
}
|
|
@@ -37,16 +38,14 @@ async function setupCloudSql(args) {
|
|
|
37
38
|
await (0, checkIam_1.grantRolesToCloudSqlServiceAccount)(projectId, instanceId, [GOOGLE_ML_INTEGRATION_ROLE]);
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
|
-
exports.setupCloudSql = setupCloudSql;
|
|
41
41
|
async function upsertInstance(stats, args) {
|
|
42
|
-
var _a, _b;
|
|
43
42
|
const { projectId, instanceId, requireGoogleMlIntegration, dryRun } = args;
|
|
44
43
|
try {
|
|
45
44
|
const existingInstance = await cloudSqlAdminClient.getInstance(projectId, instanceId);
|
|
46
45
|
utils.logLabeledBullet("dataconnect", `Found existing Cloud SQL instance ${clc.bold(instanceId)}.`);
|
|
47
46
|
stats.databaseVersion = existingInstance.databaseVersion;
|
|
48
47
|
stats.dataconnectLabel =
|
|
49
|
-
|
|
48
|
+
existingInstance.settings?.userLabels?.["firebase-data-connect"] || "absent";
|
|
50
49
|
const why = getUpdateReason(existingInstance, requireGoogleMlIntegration);
|
|
51
50
|
if (why) {
|
|
52
51
|
if (dryRun) {
|
|
@@ -61,7 +60,7 @@ async function upsertInstance(stats, args) {
|
|
|
61
60
|
await (0, utils_1.promiseWithSpinner)(() => cloudSqlAdminClient.updateInstanceForDataConnect(existingInstance, requireGoogleMlIntegration), "Updating your Cloud SQL instance...");
|
|
62
61
|
}
|
|
63
62
|
}
|
|
64
|
-
await upsertDatabase(
|
|
63
|
+
await upsertDatabase({ ...args });
|
|
65
64
|
}
|
|
66
65
|
catch (err) {
|
|
67
66
|
if (err.status !== 404) {
|
|
@@ -71,7 +70,7 @@ async function upsertInstance(stats, args) {
|
|
|
71
70
|
stats.databaseVersion = cloudSqlAdminClient.DEFAULT_DATABASE_VERSION;
|
|
72
71
|
const freeTrialUsed = await (0, freeTrial_1.checkFreeTrialInstanceUsed)(projectId);
|
|
73
72
|
stats.dataconnectLabel = freeTrialUsed ? "nt" : "ft";
|
|
74
|
-
await createInstance(
|
|
73
|
+
await createInstance({ ...args, freeTrialLabel: stats.dataconnectLabel });
|
|
75
74
|
}
|
|
76
75
|
}
|
|
77
76
|
async function createInstance(args) {
|
|
@@ -104,7 +103,6 @@ function cloudSQLBeingCreated(projectId, instanceId, isFreeTrial, billingEnabled
|
|
|
104
103
|
: `
|
|
105
104
|
Monitor its progress at\n\n\t${cloudSqlAdminClient.instanceConsoleLink(projectId, instanceId)}\n`));
|
|
106
105
|
}
|
|
107
|
-
exports.cloudSQLBeingCreated = cloudSQLBeingCreated;
|
|
108
106
|
async function upsertDatabase(args) {
|
|
109
107
|
const { projectId, instanceId, databaseId, dryRun } = args;
|
|
110
108
|
try {
|
|
@@ -127,14 +125,13 @@ async function upsertDatabase(args) {
|
|
|
127
125
|
}
|
|
128
126
|
}
|
|
129
127
|
function getUpdateReason(instance, requireGoogleMlIntegration) {
|
|
130
|
-
var _a, _b, _c, _d, _e, _f;
|
|
131
128
|
let reason = "";
|
|
132
129
|
const settings = instance.settings;
|
|
133
|
-
if (!
|
|
130
|
+
if (!settings.ipConfiguration?.ipv4Enabled) {
|
|
134
131
|
utils.logLabeledWarning("dataconnect", `Cloud SQL instance ${clc.bold(instance.name)} does not have a public IP.
|
|
135
132
|
${clc.bold("firebase dataconnect:sql:migrate")} will only work within its VPC (e.g. GCE, GKE).`);
|
|
136
|
-
if (
|
|
137
|
-
!
|
|
133
|
+
if (settings.ipConfiguration?.privateNetwork &&
|
|
134
|
+
!settings.ipConfiguration?.enablePrivatePathForGoogleCloudServices) {
|
|
138
135
|
reason += "\n - to enable Private Path for Google Cloud Services.";
|
|
139
136
|
}
|
|
140
137
|
}
|
|
@@ -142,14 +139,13 @@ function getUpdateReason(instance, requireGoogleMlIntegration) {
|
|
|
142
139
|
if (!settings.enableGoogleMlIntegration) {
|
|
143
140
|
reason += "\n - to enable Google ML integration.";
|
|
144
141
|
}
|
|
145
|
-
if (!
|
|
142
|
+
if (!settings.databaseFlags?.some((f) => f.name === "cloudsql.enable_google_ml_integration" && f.value === "on")) {
|
|
146
143
|
reason += "\n - to enable Google ML integration database flag.";
|
|
147
144
|
}
|
|
148
145
|
}
|
|
149
|
-
const isIamEnabled =
|
|
146
|
+
const isIamEnabled = settings.databaseFlags?.some((f) => f.name === "cloudsql.iam_authentication" && f.value === "on") ?? false;
|
|
150
147
|
if (!isIamEnabled) {
|
|
151
148
|
reason += "\n - to enable IAM authentication database flag.";
|
|
152
149
|
}
|
|
153
150
|
return reason;
|
|
154
151
|
}
|
|
155
|
-
exports.getUpdateReason = getUpdateReason;
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.diffSchema = diffSchema;
|
|
4
|
+
exports.migrateSchema = migrateSchema;
|
|
5
|
+
exports.upsertSecondarySchema = upsertSecondarySchema;
|
|
6
|
+
exports.grantRoleToUserInSchema = grantRoleToUserInSchema;
|
|
7
|
+
exports.getIdentifiers = getIdentifiers;
|
|
8
|
+
exports.serviceNameFromSchema = serviceNameFromSchema;
|
|
9
|
+
exports.ensureServiceIsConnectedToCloudSql = ensureServiceIsConnectedToCloudSql;
|
|
4
10
|
const clc = require("colorette");
|
|
5
11
|
const sql_formatter_1 = require("sql-formatter");
|
|
6
12
|
const types_1 = require("./types");
|
|
@@ -40,7 +46,7 @@ async function setupSchemaIfNecessary(instanceId, databaseId, options) {
|
|
|
40
46
|
}
|
|
41
47
|
}
|
|
42
48
|
async function diffSchema(options, schema, schemaValidation) {
|
|
43
|
-
let validationMode = schemaValidation
|
|
49
|
+
let validationMode = schemaValidation ?? "STRICT";
|
|
44
50
|
setSchemaValidationMode(schema, validationMode);
|
|
45
51
|
displayStartSchemaDiff(validationMode);
|
|
46
52
|
const { serviceName, instanceName, databaseId, instanceId } = getIdentifiers(schema);
|
|
@@ -51,7 +57,7 @@ async function diffSchema(options, schema, schemaValidation) {
|
|
|
51
57
|
displayNoSchemaDiff(instanceId, databaseId, validationMode);
|
|
52
58
|
}
|
|
53
59
|
catch (err) {
|
|
54
|
-
if (
|
|
60
|
+
if (err?.status !== 400) {
|
|
55
61
|
throw err;
|
|
56
62
|
}
|
|
57
63
|
incompatible = errors.getIncompatibleSchemaError(err);
|
|
@@ -84,7 +90,7 @@ async function diffSchema(options, schema, schemaValidation) {
|
|
|
84
90
|
displayNoSchemaDiff(instanceId, databaseId, validationMode);
|
|
85
91
|
}
|
|
86
92
|
catch (err) {
|
|
87
|
-
if (
|
|
93
|
+
if (err?.status !== 400) {
|
|
88
94
|
throw err;
|
|
89
95
|
}
|
|
90
96
|
compatibleIncompatible = errors.getIncompatibleSchemaError(err);
|
|
@@ -101,11 +107,9 @@ async function diffSchema(options, schema, schemaValidation) {
|
|
|
101
107
|
}
|
|
102
108
|
return incompatible.diffs;
|
|
103
109
|
}
|
|
104
|
-
exports.diffSchema = diffSchema;
|
|
105
110
|
async function migrateSchema(args) {
|
|
106
|
-
var _a;
|
|
107
111
|
const { options, schema, validateOnly, schemaValidation, stats } = args;
|
|
108
|
-
let validationMode = schemaValidation
|
|
112
|
+
let validationMode = schemaValidation ?? "COMPATIBLE";
|
|
109
113
|
setSchemaValidationMode(schema, validationMode);
|
|
110
114
|
displayStartSchemaDiff(validationMode);
|
|
111
115
|
const projectId = (0, projectUtils_1.needProjectId)(options);
|
|
@@ -116,7 +120,7 @@ async function migrateSchema(args) {
|
|
|
116
120
|
if (stats) {
|
|
117
121
|
stats.numSchemaSkippedDueToPendingCreate++;
|
|
118
122
|
}
|
|
119
|
-
const postgresql =
|
|
123
|
+
const postgresql = schema.datasources.find((d) => d.postgresql)?.postgresql;
|
|
120
124
|
if (!postgresql) {
|
|
121
125
|
throw new error_1.FirebaseError(`Cannot find Postgres datasource in the schema to deploy: ${serviceName}/schemas/${types_1.MAIN_SCHEMA_ID}.\nIts datasources: ${JSON.stringify(schema.datasources)}`);
|
|
122
126
|
}
|
|
@@ -136,7 +140,7 @@ async function migrateSchema(args) {
|
|
|
136
140
|
displayNoSchemaDiff(instanceId, databaseId, validationMode);
|
|
137
141
|
}
|
|
138
142
|
catch (err) {
|
|
139
|
-
if (
|
|
143
|
+
if (err?.status !== 400) {
|
|
140
144
|
throw err;
|
|
141
145
|
}
|
|
142
146
|
const incompatible = errors.getIncompatibleSchemaError(err);
|
|
@@ -206,7 +210,34 @@ async function migrateSchema(args) {
|
|
|
206
210
|
}
|
|
207
211
|
return diffs;
|
|
208
212
|
}
|
|
209
|
-
|
|
213
|
+
async function upsertSecondarySchema(args) {
|
|
214
|
+
const { options, schema, stats } = args;
|
|
215
|
+
const serviceName = serviceNameFromSchema(schema);
|
|
216
|
+
try {
|
|
217
|
+
await (0, client_1.upsertSchema)(schema, false);
|
|
218
|
+
}
|
|
219
|
+
catch (err) {
|
|
220
|
+
if (err?.status !== 400) {
|
|
221
|
+
throw err;
|
|
222
|
+
}
|
|
223
|
+
const invalidConnectors = errors.getInvalidConnectors(err);
|
|
224
|
+
if (!invalidConnectors.length) {
|
|
225
|
+
const gqlErrs = errors.getGQLErrors(err);
|
|
226
|
+
if (gqlErrs) {
|
|
227
|
+
throw new error_1.FirebaseError(`There are errors in your schema files:\n${gqlErrs}`);
|
|
228
|
+
}
|
|
229
|
+
throw err;
|
|
230
|
+
}
|
|
231
|
+
if (stats) {
|
|
232
|
+
stats.numSchemaInvalidConnectors += invalidConnectors.length;
|
|
233
|
+
}
|
|
234
|
+
const shouldDeleteInvalidConnectors = await promptForInvalidConnectorError(options, serviceName, invalidConnectors, false);
|
|
235
|
+
if (shouldDeleteInvalidConnectors) {
|
|
236
|
+
await deleteInvalidConnectors(invalidConnectors);
|
|
237
|
+
}
|
|
238
|
+
await (0, client_1.upsertSchema)(schema, false);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
210
241
|
async function grantRoleToUserInSchema(options, schema) {
|
|
211
242
|
const role = options.role;
|
|
212
243
|
const email = options.email;
|
|
@@ -218,7 +249,6 @@ async function grantRoleToUserInSchema(options, schema) {
|
|
|
218
249
|
}
|
|
219
250
|
await (0, permissionsSetup_1.grantRoleTo)(options, instanceId, databaseId, role, email);
|
|
220
251
|
}
|
|
221
|
-
exports.grantRoleToUserInSchema = grantRoleToUserInSchema;
|
|
222
252
|
function diffsEqual(x, y) {
|
|
223
253
|
if (x.length !== y.length) {
|
|
224
254
|
return false;
|
|
@@ -234,23 +264,22 @@ function diffsEqual(x, y) {
|
|
|
234
264
|
}
|
|
235
265
|
function setSchemaValidationMode(schema, schemaValidation) {
|
|
236
266
|
const postgresDatasource = schema.datasources.find((d) => d.postgresql);
|
|
237
|
-
if (postgresDatasource
|
|
267
|
+
if (postgresDatasource?.postgresql) {
|
|
238
268
|
postgresDatasource.postgresql.schemaValidation = schemaValidation;
|
|
239
269
|
}
|
|
240
270
|
}
|
|
241
271
|
function getIdentifiers(schema) {
|
|
242
|
-
var _a, _b, _c;
|
|
243
272
|
const postgresDatasource = schema.datasources.find((d) => d.postgresql);
|
|
244
|
-
const databaseId =
|
|
273
|
+
const databaseId = postgresDatasource?.postgresql?.database;
|
|
245
274
|
if (!databaseId) {
|
|
246
275
|
throw new error_1.FirebaseError("Data Connect schema must have a postgres datasource with a database name.");
|
|
247
276
|
}
|
|
248
|
-
const instanceName =
|
|
277
|
+
const instanceName = postgresDatasource?.postgresql?.cloudSql?.instance;
|
|
249
278
|
if (!instanceName) {
|
|
250
279
|
throw new error_1.FirebaseError("Data Connect schema must have a postgres datasource with a CloudSQL instance.");
|
|
251
280
|
}
|
|
252
281
|
const instanceId = instanceName.split("/").pop();
|
|
253
|
-
const serviceName = schema
|
|
282
|
+
const serviceName = serviceNameFromSchema(schema);
|
|
254
283
|
return {
|
|
255
284
|
databaseId,
|
|
256
285
|
instanceId,
|
|
@@ -258,7 +287,10 @@ function getIdentifiers(schema) {
|
|
|
258
287
|
serviceName,
|
|
259
288
|
};
|
|
260
289
|
}
|
|
261
|
-
|
|
290
|
+
function serviceNameFromSchema(schema) {
|
|
291
|
+
const regex = /\/schemas\/[^/]*$/;
|
|
292
|
+
return schema.name.replace(regex, "");
|
|
293
|
+
}
|
|
262
294
|
function suggestedCommand(serviceName, invalidConnectorNames) {
|
|
263
295
|
const serviceId = serviceName.split("/")[5];
|
|
264
296
|
const connectorIds = invalidConnectorNames.map((i) => i.split("/")[7]);
|
|
@@ -371,7 +403,10 @@ async function promptForInvalidConnectorError(options, serviceName, invalidConne
|
|
|
371
403
|
return true;
|
|
372
404
|
}
|
|
373
405
|
if (!options.nonInteractive &&
|
|
374
|
-
(await (0, prompt_1.confirm)(
|
|
406
|
+
(await (0, prompt_1.confirm)({
|
|
407
|
+
...options,
|
|
408
|
+
message: `Would you like to delete and recreate these connectors? This will cause ${clc.red(`downtime`)}.`,
|
|
409
|
+
}))) {
|
|
375
410
|
return true;
|
|
376
411
|
}
|
|
377
412
|
const cmd = suggestedCommand(serviceName, invalidConnectors);
|
|
@@ -386,13 +421,12 @@ function displayInvalidConnectors(invalidConnectors) {
|
|
|
386
421
|
(0, utils_1.logLabeledWarning)("dataconnect", `This is a ${clc.red("breaking")} change and may break existing apps.`);
|
|
387
422
|
}
|
|
388
423
|
async function ensureServiceIsConnectedToCloudSql(serviceName, instanceName, databaseId, linkIfNotConnected) {
|
|
389
|
-
var _a, _b, _c, _d;
|
|
390
424
|
let currentSchema = await (0, client_1.getSchema)(serviceName);
|
|
391
|
-
let postgresql =
|
|
392
|
-
if (
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
425
|
+
let postgresql = currentSchema?.datasources?.find((d) => d.postgresql)?.postgresql;
|
|
426
|
+
if (currentSchema?.reconciling &&
|
|
427
|
+
postgresql?.ephemeral &&
|
|
428
|
+
postgresql?.cloudSql?.instance &&
|
|
429
|
+
postgresql?.schemaValidation === "NONE") {
|
|
396
430
|
const [, , , , , serviceId] = serviceName.split("/");
|
|
397
431
|
const [, projectId, , , , instanceId] = postgresql.cloudSql.instance.split("/");
|
|
398
432
|
throw new error_1.FirebaseError(`While checking the service ${serviceId}, ` + (0, provisionCloudSql_1.cloudSQLBeingCreated)(projectId, instanceId));
|
|
@@ -419,7 +453,7 @@ async function ensureServiceIsConnectedToCloudSql(serviceName, instanceName, dat
|
|
|
419
453
|
postgresql = currentSchema.datasources[0].postgresql;
|
|
420
454
|
}
|
|
421
455
|
let alreadyConnected = !postgresql.ephemeral || false;
|
|
422
|
-
if (
|
|
456
|
+
if (postgresql.cloudSql?.instance && postgresql.cloudSql.instance !== instanceName) {
|
|
423
457
|
alreadyConnected = false;
|
|
424
458
|
(0, utils_1.logLabeledWarning)("dataconnect", `Switching connected Cloud SQL instance\n From ${postgresql.cloudSql.instance}\n To ${instanceName}`);
|
|
425
459
|
}
|
|
@@ -437,13 +471,12 @@ async function ensureServiceIsConnectedToCloudSql(serviceName, instanceName, dat
|
|
|
437
471
|
await (0, client_1.upsertSchema)(currentSchema, false);
|
|
438
472
|
}
|
|
439
473
|
catch (err) {
|
|
440
|
-
if (
|
|
474
|
+
if (err?.status >= 500) {
|
|
441
475
|
throw err;
|
|
442
476
|
}
|
|
443
477
|
logger_1.logger.debug(`Failed to ensure service is connected to Cloud SQL: ${err.message}`);
|
|
444
478
|
}
|
|
445
479
|
}
|
|
446
|
-
exports.ensureServiceIsConnectedToCloudSql = ensureServiceIsConnectedToCloudSql;
|
|
447
480
|
function displayStartSchemaDiff(validationMode) {
|
|
448
481
|
switch (validationMode) {
|
|
449
482
|
case "COMPATIBLE":
|
package/lib/dataconnect/types.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isGraphQLResponseError = exports.isGraphQLResponse = exports.
|
|
3
|
+
exports.isGraphQLResponseError = exports.isGraphQLResponse = exports.MAIN_SCHEMA_ID = void 0;
|
|
4
|
+
exports.requiresVector = requiresVector;
|
|
5
|
+
exports.toDatasource = toDatasource;
|
|
6
|
+
exports.mainSchemaYaml = mainSchemaYaml;
|
|
7
|
+
exports.mainSchema = mainSchema;
|
|
8
|
+
exports.isMainSchema = isMainSchema;
|
|
4
9
|
exports.MAIN_SCHEMA_ID = "main";
|
|
5
10
|
function requiresVector(dm) {
|
|
6
|
-
|
|
7
|
-
return (_d = (_c = (_b = (_a = dm === null || dm === void 0 ? void 0 : dm.primaryDataSource) === null || _a === void 0 ? void 0 : _a.postgres) === null || _b === void 0 ? void 0 : _b.requiredExtensions) === null || _c === void 0 ? void 0 : _c.includes("vector")) !== null && _d !== void 0 ? _d : false;
|
|
11
|
+
return dm?.primaryDataSource?.postgres?.requiredExtensions?.includes("vector") ?? false;
|
|
8
12
|
}
|
|
9
|
-
exports.requiresVector = requiresVector;
|
|
10
13
|
function toDatasource(projectId, locationId, ds) {
|
|
11
|
-
if (ds
|
|
14
|
+
if (ds?.postgresql) {
|
|
12
15
|
return {
|
|
13
16
|
postgresql: {
|
|
14
17
|
database: ds.postgresql.database,
|
|
@@ -19,7 +22,7 @@ function toDatasource(projectId, locationId, ds) {
|
|
|
19
22
|
},
|
|
20
23
|
};
|
|
21
24
|
}
|
|
22
|
-
if (ds
|
|
25
|
+
if (ds?.httpGraphql) {
|
|
23
26
|
return {
|
|
24
27
|
httpGraphql: {
|
|
25
28
|
uri: ds.httpGraphql.uri,
|
|
@@ -29,19 +32,16 @@ function toDatasource(projectId, locationId, ds) {
|
|
|
29
32
|
}
|
|
30
33
|
return {};
|
|
31
34
|
}
|
|
32
|
-
exports.toDatasource = toDatasource;
|
|
33
35
|
function mainSchemaYaml(dataconnectYaml) {
|
|
34
|
-
var _a;
|
|
35
36
|
if (dataconnectYaml.schema) {
|
|
36
37
|
return dataconnectYaml.schema;
|
|
37
38
|
}
|
|
38
|
-
const mainSch =
|
|
39
|
+
const mainSch = dataconnectYaml.schemas?.find((s) => s.id === exports.MAIN_SCHEMA_ID || !s.id);
|
|
39
40
|
if (!mainSch) {
|
|
40
41
|
throw new Error(`Service ${dataconnectYaml.serviceId} has no main schema defined`);
|
|
41
42
|
}
|
|
42
43
|
return mainSch;
|
|
43
44
|
}
|
|
44
|
-
exports.mainSchemaYaml = mainSchemaYaml;
|
|
45
45
|
function mainSchema(schemas) {
|
|
46
46
|
const mainSch = schemas.find((s) => isMainSchema(s));
|
|
47
47
|
if (!mainSch) {
|
|
@@ -49,11 +49,9 @@ function mainSchema(schemas) {
|
|
|
49
49
|
}
|
|
50
50
|
return mainSch;
|
|
51
51
|
}
|
|
52
|
-
exports.mainSchema = mainSchema;
|
|
53
52
|
function isMainSchema(schema) {
|
|
54
53
|
return schema.name.endsWith(`/schemas/${exports.MAIN_SCHEMA_ID}`);
|
|
55
54
|
}
|
|
56
|
-
exports.isMainSchema = isMainSchema;
|
|
57
55
|
const isGraphQLResponse = (g) => !!g.data || !!g.errors;
|
|
58
56
|
exports.isGraphQLResponse = isGraphQLResponse;
|
|
59
57
|
const isGraphQLResponseError = (g) => !!g.error;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.port = exports.DEFAULT_PORT = exports.VSCODE_MESSAGE = void 0;
|
|
4
|
+
exports.sendVSCodeMessage = sendVSCodeMessage;
|
|
4
5
|
const node_fetch_1 = require("node-fetch");
|
|
5
6
|
const logger_1 = require("../logger");
|
|
6
7
|
var VSCODE_MESSAGE;
|
|
@@ -8,7 +9,7 @@ var VSCODE_MESSAGE;
|
|
|
8
9
|
VSCODE_MESSAGE["EMULATORS_STARTED"] = "EMULATORS_STARTED";
|
|
9
10
|
VSCODE_MESSAGE["EMULATORS_START_ERRORED"] = "EMULATORS_START_ERRORED";
|
|
10
11
|
VSCODE_MESSAGE["EMULATORS_SHUTDOWN"] = "EMULATORS_SHUTDOWN";
|
|
11
|
-
})(VSCODE_MESSAGE
|
|
12
|
+
})(VSCODE_MESSAGE || (exports.VSCODE_MESSAGE = VSCODE_MESSAGE = {}));
|
|
12
13
|
exports.DEFAULT_PORT = "40001";
|
|
13
14
|
exports.port = process.env.VSCODE_WEBHOOK_PORT || exports.DEFAULT_PORT;
|
|
14
15
|
async function sendVSCodeMessage(body) {
|
|
@@ -29,4 +30,3 @@ async function sendVSCodeMessage(body) {
|
|
|
29
30
|
logger_1.logger.debug(`Could not find VSCode notification endpoint: ${e}. If you are not running the Firebase Data Connect VSCode extension, this is expected and not an issue.`);
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
|
-
exports.sendVSCodeMessage = sendVSCodeMessage;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getCredentialPathAsync = getCredentialPathAsync;
|
|
4
|
+
exports.clearCredentials = clearCredentials;
|
|
5
|
+
exports.hasDefaultCredentials = hasDefaultCredentials;
|
|
4
6
|
const fs = require("fs");
|
|
5
7
|
const path = require("path");
|
|
6
8
|
const google_auth_library_1 = require("google-auth-library");
|
|
@@ -29,7 +31,6 @@ async function getCredentialPathAsync(account) {
|
|
|
29
31
|
});
|
|
30
32
|
});
|
|
31
33
|
}
|
|
32
|
-
exports.getCredentialPathAsync = getCredentialPathAsync;
|
|
33
34
|
function clearCredentials(account) {
|
|
34
35
|
const filePath = credFilePath(account.user);
|
|
35
36
|
if (!filePath) {
|
|
@@ -40,7 +41,6 @@ function clearCredentials(account) {
|
|
|
40
41
|
}
|
|
41
42
|
fs.unlinkSync(filePath);
|
|
42
43
|
}
|
|
43
|
-
exports.clearCredentials = clearCredentials;
|
|
44
44
|
function getCredential(tokens) {
|
|
45
45
|
if (tokens.refresh_token) {
|
|
46
46
|
return {
|
|
@@ -88,4 +88,3 @@ async function hasDefaultCredentials() {
|
|
|
88
88
|
return false;
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
|
-
exports.hasDefaultCredentials = hasDefaultCredentials;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = default_1;
|
|
3
4
|
const fs = require("fs");
|
|
4
5
|
const path = require("path");
|
|
5
6
|
const error_1 = require("../../error");
|
|
@@ -49,8 +50,7 @@ async function default_1(context, options) {
|
|
|
49
50
|
bucketsPerLocation[loc] = resolvedName;
|
|
50
51
|
}));
|
|
51
52
|
await Promise.all(Object.values(context.backendConfigs).map(async (cfg) => {
|
|
52
|
-
|
|
53
|
-
const rootDir = (_a = options.projectRoot) !== null && _a !== void 0 ? _a : process.cwd();
|
|
53
|
+
const rootDir = options.projectRoot ?? process.cwd();
|
|
54
54
|
let builtAppDir;
|
|
55
55
|
if (cfg.localBuild) {
|
|
56
56
|
builtAppDir = context.backendLocalBuilds[cfg.backendId].buildDir;
|
|
@@ -75,4 +75,3 @@ async function default_1(context, options) {
|
|
|
75
75
|
`gs://${bucketName}/${path.basename(zippedSourcePath)}`;
|
|
76
76
|
}));
|
|
77
77
|
}
|
|
78
|
-
exports.default = default_1;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.default = default_1;
|
|
4
|
+
exports.getBackendConfigs = getBackendConfigs;
|
|
4
5
|
const path = require("path");
|
|
5
6
|
const backend_1 = require("../../apphosting/backend");
|
|
6
7
|
const apphosting_1 = require("../../gcp/apphosting");
|
|
@@ -11,7 +12,6 @@ const utils_1 = require("../../utils");
|
|
|
11
12
|
const localbuilds_1 = require("../../apphosting/localbuilds");
|
|
12
13
|
const error_1 = require("../../error");
|
|
13
14
|
async function default_1(context, options) {
|
|
14
|
-
var _a;
|
|
15
15
|
const projectId = (0, projectUtils_1.needProjectId)(options);
|
|
16
16
|
await (0, apphosting_1.ensureApiEnabled)(options);
|
|
17
17
|
await (0, backend_1.ensureRequiredApisEnabled)(projectId);
|
|
@@ -55,7 +55,7 @@ async function default_1(context, options) {
|
|
|
55
55
|
}
|
|
56
56
|
const backend = filteredBackends[0];
|
|
57
57
|
const { location } = (0, apphosting_1.parseBackendName)(backend.name);
|
|
58
|
-
if (cfg.alwaysDeployFromSource === undefined &&
|
|
58
|
+
if (cfg.alwaysDeployFromSource === undefined && backend.codebase?.repository) {
|
|
59
59
|
const { connectionName, id } = (0, devConnect_1.parseGitRepositoryLinkName)(backend.codebase.repository);
|
|
60
60
|
const gitRepositoryLink = await (0, devConnect_1.getGitRepositoryLink)(projectId, location, connectionName, id);
|
|
61
61
|
if (!options.force) {
|
|
@@ -129,7 +129,6 @@ async function default_1(context, options) {
|
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
|
-
exports.default = default_1;
|
|
133
132
|
function getBackendConfigs(options) {
|
|
134
133
|
if (!options.config.src.apphosting) {
|
|
135
134
|
return [];
|
|
@@ -158,4 +157,3 @@ function getBackendConfigs(options) {
|
|
|
158
157
|
}
|
|
159
158
|
return backendConfigs.filter((cfg) => backendIds.includes(cfg.backendId));
|
|
160
159
|
}
|
|
161
|
-
exports.getBackendConfigs = getBackendConfigs;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = default_1;
|
|
3
4
|
const ora = require("ora");
|
|
4
5
|
const api_1 = require("../../api");
|
|
5
6
|
const backend_1 = require("../../apphosting/backend");
|
|
@@ -52,4 +53,3 @@ async function default_1(context, options) {
|
|
|
52
53
|
}
|
|
53
54
|
rolloutsSpinner.stop();
|
|
54
55
|
}
|
|
55
|
-
exports.default = default_1;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createArchive =
|
|
3
|
+
exports.createArchive = createArchive;
|
|
4
4
|
const archiver = require("archiver");
|
|
5
5
|
const fs = require("fs");
|
|
6
6
|
const path = require("path");
|
|
@@ -39,7 +39,6 @@ async function createArchive(config, rootDir, targetSubDir) {
|
|
|
39
39
|
}
|
|
40
40
|
return tmpFile;
|
|
41
41
|
}
|
|
42
|
-
exports.createArchive = createArchive;
|
|
43
42
|
function parseGitIgnorePatterns(projectRoot, gitIgnorePath = ".gitignore") {
|
|
44
43
|
const absoluteFilePath = path.resolve(projectRoot, gitIgnorePath);
|
|
45
44
|
if (!fs.existsSync(absoluteFilePath)) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.prepare =
|
|
3
|
+
exports.prepare = prepare;
|
|
4
4
|
const clc = require("colorette");
|
|
5
5
|
const path = require("path");
|
|
6
6
|
const error_1 = require("../../error");
|
|
@@ -49,4 +49,3 @@ function prepare(context, options) {
|
|
|
49
49
|
});
|
|
50
50
|
}));
|
|
51
51
|
}
|
|
52
|
-
exports.prepare = prepare;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.release =
|
|
3
|
+
exports.release = release;
|
|
4
4
|
const clc = require("colorette");
|
|
5
5
|
const rtdb = require("../../rtdb");
|
|
6
6
|
const utils = require("../../utils");
|
|
@@ -27,4 +27,3 @@ function release(context) {
|
|
|
27
27
|
});
|
|
28
28
|
}));
|
|
29
29
|
}
|
|
30
|
-
exports.release = release;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.initDeployStats = initDeployStats;
|
|
4
|
+
exports.deployStatsParams = deployStatsParams;
|
|
4
5
|
function initDeployStats() {
|
|
5
6
|
return {
|
|
6
7
|
numBuildErrors: 0,
|
|
@@ -15,12 +16,22 @@ function initDeployStats() {
|
|
|
15
16
|
numSchemaInvalidConnectors: 0,
|
|
16
17
|
};
|
|
17
18
|
}
|
|
18
|
-
exports.initDeployStats = initDeployStats;
|
|
19
19
|
function deployStatsParams(stats) {
|
|
20
20
|
const buildWarnings = {};
|
|
21
21
|
for (const [type, num] of stats.numBuildWarnings.entries()) {
|
|
22
22
|
buildWarnings[`num_build_warnings_${type}`] = num;
|
|
23
23
|
}
|
|
24
|
-
return
|
|
24
|
+
return {
|
|
25
|
+
missing_billing: (!!stats.missingBilling).toString(),
|
|
26
|
+
num_service_created: stats.numServiceCreated,
|
|
27
|
+
num_service_deleted: stats.numServiceDeleted,
|
|
28
|
+
num_schema_migrated: stats.numSchemaMigrated,
|
|
29
|
+
num_connector_updated_before_schema: stats.numConnectorUpdatedBeforeSchema,
|
|
30
|
+
num_connector_updated_after_schema: stats.numConnectorUpdatedAfterSchema,
|
|
31
|
+
num_schema_skipped_due_to_pending_create: stats.numSchemaSkippedDueToPendingCreate,
|
|
32
|
+
num_schema_sql_diffs: stats.numSchemaSqlDiffs,
|
|
33
|
+
num_schema_invalid_connectors: stats.numSchemaInvalidConnectors,
|
|
34
|
+
num_build_errors: stats.numBuildErrors,
|
|
35
|
+
...buildWarnings,
|
|
36
|
+
};
|
|
25
37
|
}
|
|
26
|
-
exports.deployStatsParams = deployStatsParams;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = default_1;
|
|
3
4
|
const client = require("../../dataconnect/client");
|
|
4
5
|
const utils = require("../../utils");
|
|
5
6
|
const types_1 = require("../../dataconnect/types");
|
|
@@ -27,7 +28,7 @@ async function default_1(context, options) {
|
|
|
27
28
|
.filter((si) => !services.some((s) => matches(si, s)))
|
|
28
29
|
.filter((si) => {
|
|
29
30
|
return (!filters ||
|
|
30
|
-
|
|
31
|
+
filters?.some((f) => si.dataConnectYaml.serviceId === f.serviceId));
|
|
31
32
|
});
|
|
32
33
|
dataconnect.deployStats.numServiceCreated = servicesToCreate.length;
|
|
33
34
|
const servicesToDelete = filters
|
|
@@ -57,14 +58,13 @@ async function default_1(context, options) {
|
|
|
57
58
|
await Promise.all(serviceInfos
|
|
58
59
|
.filter((si) => {
|
|
59
60
|
return (!filters ||
|
|
60
|
-
|
|
61
|
+
filters?.some((f) => si.dataConnectYaml.serviceId === f.serviceId));
|
|
61
62
|
})
|
|
62
63
|
.map(async (s) => {
|
|
63
|
-
var _a, _b, _c;
|
|
64
64
|
const postgresDatasource = (0, types_1.mainSchema)(s.schemas).datasources.find((d) => d.postgresql);
|
|
65
65
|
if (postgresDatasource) {
|
|
66
|
-
const instanceId =
|
|
67
|
-
const databaseId =
|
|
66
|
+
const instanceId = postgresDatasource.postgresql?.cloudSql?.instance.split("/").pop();
|
|
67
|
+
const databaseId = postgresDatasource.postgresql?.database;
|
|
68
68
|
if (!instanceId || !databaseId) {
|
|
69
69
|
return Promise.resolve();
|
|
70
70
|
}
|
|
@@ -80,7 +80,6 @@ async function default_1(context, options) {
|
|
|
80
80
|
}));
|
|
81
81
|
return;
|
|
82
82
|
}
|
|
83
|
-
exports.default = default_1;
|
|
84
83
|
function matches(si, s) {
|
|
85
84
|
return si.serviceName === s.name;
|
|
86
85
|
}
|