firebase-tools 15.1.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 +19 -21
- 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 +1 -2
- 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 +7 -7
- 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 +18 -20
- 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 +16 -23
- 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 +3 -3
- 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 +17 -9
- 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,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
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = default_1;
|
|
3
4
|
const clc = require("colorette");
|
|
4
5
|
const load_1 = require("../../dataconnect/load");
|
|
5
6
|
const logger_1 = require("../../logger");
|
|
@@ -18,7 +19,6 @@ const schemaMigration_1 = require("../../dataconnect/schemaMigration");
|
|
|
18
19
|
const cloudbilling_1 = require("../../gcp/cloudbilling");
|
|
19
20
|
const context_1 = require("./context");
|
|
20
21
|
async function default_1(context, options) {
|
|
21
|
-
var _a, _b, _c;
|
|
22
22
|
const projectId = (0, projectUtils_1.needProjectId)(options);
|
|
23
23
|
await (0, ensureApis_1.ensureApis)(projectId);
|
|
24
24
|
context.dataconnect = {
|
|
@@ -34,7 +34,7 @@ async function default_1(context, options) {
|
|
|
34
34
|
for (const si of serviceInfos) {
|
|
35
35
|
si.deploymentMetadata = await (0, build_1.build)(options, si.sourceDirectory, deployStats);
|
|
36
36
|
}
|
|
37
|
-
const unmatchedFilters = filters
|
|
37
|
+
const unmatchedFilters = filters?.filter((f) => {
|
|
38
38
|
const serviceMatched = serviceInfos.some((s) => s.dataConnectYaml.serviceId === f.serviceId);
|
|
39
39
|
const connectorMatched = f.connectorId
|
|
40
40
|
? serviceInfos.some((s) => {
|
|
@@ -44,25 +44,24 @@ async function default_1(context, options) {
|
|
|
44
44
|
: true;
|
|
45
45
|
return !serviceMatched || !connectorMatched;
|
|
46
46
|
});
|
|
47
|
-
if (unmatchedFilters
|
|
47
|
+
if (unmatchedFilters?.length) {
|
|
48
48
|
throw new error_1.FirebaseError(`The following filters were specified in --only but didn't match anything in this project: ${unmatchedFilters.map(filters_1.toString).map(clc.bold).join(", ")}`);
|
|
49
49
|
}
|
|
50
50
|
utils.logLabeledBullet("dataconnect", `Successfully compiled schema and connectors`);
|
|
51
51
|
if (options.dryRun) {
|
|
52
52
|
for (const si of serviceInfos) {
|
|
53
|
-
await (0, schemaMigration_1.diffSchema)(options, (0, types_1.mainSchema)(si.schemas),
|
|
53
|
+
await (0, schemaMigration_1.diffSchema)(options, (0, types_1.mainSchema)(si.schemas), si.dataConnectYaml.schema?.datasource?.postgresql?.schemaValidation);
|
|
54
54
|
}
|
|
55
55
|
utils.logLabeledBullet("dataconnect", "Checking for CloudSQL resources...");
|
|
56
56
|
await Promise.all(serviceInfos
|
|
57
57
|
.filter((si) => {
|
|
58
|
-
return !filters ||
|
|
58
|
+
return !filters || filters?.some((f) => si.dataConnectYaml.serviceId === f.serviceId);
|
|
59
59
|
})
|
|
60
60
|
.map(async (s) => {
|
|
61
|
-
var _a, _b, _c;
|
|
62
61
|
const postgresDatasource = (0, types_1.mainSchema)(s.schemas).datasources.find((d) => d.postgresql);
|
|
63
62
|
if (postgresDatasource) {
|
|
64
|
-
const instanceId =
|
|
65
|
-
const databaseId =
|
|
63
|
+
const instanceId = postgresDatasource.postgresql?.cloudSql?.instance.split("/").pop();
|
|
64
|
+
const databaseId = postgresDatasource.postgresql?.database;
|
|
66
65
|
if (!instanceId || !databaseId) {
|
|
67
66
|
return Promise.resolve();
|
|
68
67
|
}
|
|
@@ -81,4 +80,3 @@ async function default_1(context, options) {
|
|
|
81
80
|
logger_1.logger.debug(JSON.stringify(context.dataconnect, null, 2));
|
|
82
81
|
return;
|
|
83
82
|
}
|
|
84
|
-
exports.default = default_1;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = default_1;
|
|
3
4
|
const utils = require("../../utils");
|
|
4
5
|
const types_1 = require("../../dataconnect/types");
|
|
5
6
|
const client_1 = require("../../dataconnect/client");
|
|
@@ -23,13 +24,10 @@ async function default_1(context, options) {
|
|
|
23
24
|
return f.serviceId === si.dataConnectYaml.serviceId && (f.schemaOnly || f.fullService);
|
|
24
25
|
}));
|
|
25
26
|
})
|
|
26
|
-
.map((s) => {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
validationMode: (_b = (_a = (0, types_1.mainSchemaYaml)(s.dataConnectYaml).datasource) === null || _a === void 0 ? void 0 : _a.postgresql) === null || _b === void 0 ? void 0 : _b.schemaValidation,
|
|
31
|
-
});
|
|
32
|
-
});
|
|
27
|
+
.map((s) => ({
|
|
28
|
+
schema: (0, types_1.mainSchema)(s.schemas),
|
|
29
|
+
validationMode: (0, types_1.mainSchemaYaml)(s.dataConnectYaml).datasource?.postgresql?.schemaValidation,
|
|
30
|
+
}));
|
|
33
31
|
const wantConnectors = serviceInfos.flatMap((si) => si.connectorInfo
|
|
34
32
|
.filter((c) => {
|
|
35
33
|
return (!filters ||
|
|
@@ -72,8 +70,8 @@ async function default_1(context, options) {
|
|
|
72
70
|
.map((s) => s.schemas.filter((s) => !(0, types_1.isMainSchema)(s)))
|
|
73
71
|
.flatMap((s) => s);
|
|
74
72
|
for (const schema of wantSecondarySchemas) {
|
|
75
|
-
await (0,
|
|
76
|
-
utils.logLabeledSuccess("dataconnect", `
|
|
73
|
+
await (0, schemaMigration_1.upsertSecondarySchema)({ options, schema, stats: dataconnect.deployStats });
|
|
74
|
+
utils.logLabeledSuccess("dataconnect", `Deployed schema ${schema.name}`);
|
|
77
75
|
dataconnect.deployStats.numSchemaMigrated++;
|
|
78
76
|
}
|
|
79
77
|
await Promise.all(remainingConnectors.map(async (c) => {
|
|
@@ -101,7 +99,6 @@ async function default_1(context, options) {
|
|
|
101
99
|
`);
|
|
102
100
|
return;
|
|
103
101
|
}
|
|
104
|
-
exports.default = default_1;
|
|
105
102
|
async function deployedConnectors(serviceInfos) {
|
|
106
103
|
let connectors = [];
|
|
107
104
|
for (const si of serviceInfos) {
|