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.exportOnExit = exportOnExit;
|
|
4
|
+
exports.onExit = onExit;
|
|
5
|
+
exports.cleanShutdown = cleanShutdown;
|
|
6
|
+
exports.filterEmulatorTargets = filterEmulatorTargets;
|
|
7
|
+
exports.shouldStart = shouldStart;
|
|
8
|
+
exports.startAll = startAll;
|
|
9
|
+
exports.exportEmulatorData = exportEmulatorData;
|
|
4
10
|
const clc = require("colorette");
|
|
5
11
|
const fs = require("fs");
|
|
6
12
|
const path = require("path");
|
|
@@ -65,17 +71,14 @@ async function exportOnExit(options) {
|
|
|
65
71
|
}
|
|
66
72
|
}
|
|
67
73
|
}
|
|
68
|
-
exports.exportOnExit = exportOnExit;
|
|
69
74
|
async function onExit(options) {
|
|
70
75
|
await exportOnExit(options);
|
|
71
76
|
}
|
|
72
|
-
exports.onExit = onExit;
|
|
73
77
|
async function cleanShutdown() {
|
|
74
78
|
emulatorLogger_1.EmulatorLogger.forEmulator(types_1.Emulators.HUB).logLabeled("BULLET", "emulators", "Shutting down emulators.");
|
|
75
79
|
await registry_1.EmulatorRegistry.stopAll();
|
|
76
80
|
await (0, webhook_1.sendVSCodeMessage)({ message: webhook_1.VSCODE_MESSAGE.EMULATORS_SHUTDOWN });
|
|
77
81
|
}
|
|
78
|
-
exports.cleanShutdown = cleanShutdown;
|
|
79
82
|
function filterEmulatorTargets(options) {
|
|
80
83
|
let targets = [...types_1.ALL_SERVICE_EMULATORS];
|
|
81
84
|
targets.push(types_1.Emulators.EXTENSIONS);
|
|
@@ -94,9 +97,7 @@ function filterEmulatorTargets(options) {
|
|
|
94
97
|
}
|
|
95
98
|
return targets;
|
|
96
99
|
}
|
|
97
|
-
exports.filterEmulatorTargets = filterEmulatorTargets;
|
|
98
100
|
function shouldStart(options, name) {
|
|
99
|
-
var _a, _b;
|
|
100
101
|
if (name === types_1.Emulators.HUB) {
|
|
101
102
|
return true;
|
|
102
103
|
}
|
|
@@ -106,7 +107,7 @@ function shouldStart(options, name) {
|
|
|
106
107
|
if (options.ui) {
|
|
107
108
|
return true;
|
|
108
109
|
}
|
|
109
|
-
if (
|
|
110
|
+
if (options.config.src.emulators?.ui?.enabled === false) {
|
|
110
111
|
return false;
|
|
111
112
|
}
|
|
112
113
|
return targets.some((target) => types_1.EMULATORS_SUPPORTED_BY_UI.includes(target));
|
|
@@ -127,7 +128,6 @@ function shouldStart(options, name) {
|
|
|
127
128
|
}
|
|
128
129
|
return emulatorInTargets;
|
|
129
130
|
}
|
|
130
|
-
exports.shouldStart = shouldStart;
|
|
131
131
|
function findExportMetadata(importPath) {
|
|
132
132
|
const pathExists = fs.existsSync(importPath);
|
|
133
133
|
if (!pathExists) {
|
|
@@ -169,11 +169,10 @@ function findExportMetadata(importPath) {
|
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
171
|
async function startAll(options, showUI = true, runningTestScript = false) {
|
|
172
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
173
172
|
const targets = filterEmulatorTargets(options);
|
|
174
173
|
options.targets = targets;
|
|
175
|
-
const singleProjectModeEnabled =
|
|
176
|
-
|
|
174
|
+
const singleProjectModeEnabled = options.config.src.emulators?.singleProjectMode === undefined ||
|
|
175
|
+
options.config.src.emulators?.singleProjectMode;
|
|
177
176
|
if (targets.length === 0) {
|
|
178
177
|
throw new error_1.FirebaseError(`No emulators to start, run ${clc.bold("firebase init emulators")} to get started.`);
|
|
179
178
|
}
|
|
@@ -260,7 +259,7 @@ async function startAll(options, showUI = true, runningTestScript = false) {
|
|
|
260
259
|
const config = getListenConfig(options, emulator);
|
|
261
260
|
listenConfig[emulator] = config;
|
|
262
261
|
if (emulator === types_1.Emulators.FIRESTORE) {
|
|
263
|
-
const wsPortConfig =
|
|
262
|
+
const wsPortConfig = options.config.src.emulators?.firestore?.websocketPort;
|
|
264
263
|
listenConfig["firestore.websocket"] = {
|
|
265
264
|
host: config.host,
|
|
266
265
|
port: wsPortConfig || 9150,
|
|
@@ -268,7 +267,7 @@ async function startAll(options, showUI = true, runningTestScript = false) {
|
|
|
268
267
|
};
|
|
269
268
|
}
|
|
270
269
|
if (emulator === types_1.Emulators.DATACONNECT && !(0, api_1.dataConnectLocalConnString)()) {
|
|
271
|
-
const pglitePortConfig =
|
|
270
|
+
const pglitePortConfig = options.config.src.emulators?.dataconnect?.postgresPort;
|
|
272
271
|
listenConfig["dataconnect.postgres"] = {
|
|
273
272
|
host: config.host,
|
|
274
273
|
port: pglitePortConfig || 5432,
|
|
@@ -321,7 +320,7 @@ async function startAll(options, showUI = true, runningTestScript = false) {
|
|
|
321
320
|
}
|
|
322
321
|
}
|
|
323
322
|
const hostingConfig = options.config.get("hosting");
|
|
324
|
-
if (Array.isArray(hostingConfig) ? hostingConfig.some((it) => it.source) : hostingConfig
|
|
323
|
+
if (Array.isArray(hostingConfig) ? hostingConfig.some((it) => it.source) : hostingConfig?.source) {
|
|
325
324
|
experiments.assertEnabled("webframeworks", "emulate a web framework");
|
|
326
325
|
const emulators = [];
|
|
327
326
|
for (const e of types_1.ALL_SERVICE_EMULATORS) {
|
|
@@ -342,7 +341,7 @@ async function startAll(options, showUI = true, runningTestScript = false) {
|
|
|
342
341
|
for (const cfg of functionsCfg) {
|
|
343
342
|
const localCfg = (0, projectConfig_1.requireLocal)(cfg, "Remote sources are not supported in the Functions emulator.");
|
|
344
343
|
const functionsDir = path.join(projectDir, localCfg.source);
|
|
345
|
-
const runtime = (
|
|
344
|
+
const runtime = (options.extDevRuntime ?? cfg.runtime);
|
|
346
345
|
if (runtime && !(0, supported_1.isRuntime)(runtime)) {
|
|
347
346
|
throw new error_1.FirebaseError(`Cannot load functions from ${functionsDir} because it has invalid runtime ${runtime}`);
|
|
348
347
|
}
|
|
@@ -351,7 +350,9 @@ async function startAll(options, showUI = true, runningTestScript = false) {
|
|
|
351
350
|
runtime,
|
|
352
351
|
codebase: localCfg.codebase,
|
|
353
352
|
prefix: localCfg.prefix,
|
|
354
|
-
env:
|
|
353
|
+
env: {
|
|
354
|
+
...options.extDevEnv,
|
|
355
|
+
},
|
|
355
356
|
secretEnv: [],
|
|
356
357
|
predefinedTriggers: options.extDevTriggers,
|
|
357
358
|
ignore: localCfg.ignore,
|
|
@@ -366,7 +367,12 @@ async function startAll(options, showUI = true, runningTestScript = false) {
|
|
|
366
367
|
const account = (0, auth_1.getProjectDefaultAccount)(options.projectRoot);
|
|
367
368
|
if (emulatableBackends.length) {
|
|
368
369
|
if (!listenForEmulator.functions || !listenForEmulator.eventarc || !listenForEmulator.tasks) {
|
|
369
|
-
listenForEmulator = await (0, portUtils_1.resolveHostAndAssignPorts)(
|
|
370
|
+
listenForEmulator = await (0, portUtils_1.resolveHostAndAssignPorts)({
|
|
371
|
+
...listenForEmulator,
|
|
372
|
+
functions: listenForEmulator.functions ?? getListenConfig(options, types_1.Emulators.FUNCTIONS),
|
|
373
|
+
eventarc: listenForEmulator.eventarc ?? getListenConfig(options, types_1.Emulators.EVENTARC),
|
|
374
|
+
tasks: listenForEmulator.eventarc ?? getListenConfig(options, types_1.Emulators.TASKS),
|
|
375
|
+
});
|
|
370
376
|
hubLogger.log("DEBUG", "late-assigned ports for functions and eventarc emulators", {
|
|
371
377
|
user: listenForEmulator,
|
|
372
378
|
});
|
|
@@ -620,13 +626,13 @@ async function startAll(options, showUI = true, runningTestScript = false) {
|
|
|
620
626
|
});
|
|
621
627
|
await startEmulator(hostingEmulator);
|
|
622
628
|
}
|
|
623
|
-
const apphostingEmulatorConfig =
|
|
629
|
+
const apphostingEmulatorConfig = options.config.src.emulators?.[types_1.Emulators.APPHOSTING];
|
|
624
630
|
if (listenForEmulator.apphosting) {
|
|
625
|
-
const rootDirectory = apphostingEmulatorConfig
|
|
626
|
-
const backendRoot = (0, projectPath_1.resolveProjectPath)({}, rootDirectory
|
|
631
|
+
const rootDirectory = apphostingEmulatorConfig?.rootDirectory;
|
|
632
|
+
const backendRoot = (0, projectPath_1.resolveProjectPath)({}, rootDirectory ?? "./");
|
|
627
633
|
let apphostingConfig;
|
|
628
634
|
if (Array.isArray(options.config.src.apphosting)) {
|
|
629
|
-
const matchingAppHostingConfig = options.config.src.apphosting.filter((config) =>
|
|
635
|
+
const matchingAppHostingConfig = options.config.src.apphosting.filter((config) => (0, projectPath_1.resolveProjectPath)({}, path.join(".", config.rootDir ?? "/")) === backendRoot);
|
|
630
636
|
if (matchingAppHostingConfig.length === 1) {
|
|
631
637
|
apphostingConfig = matchingAppHostingConfig[0];
|
|
632
638
|
}
|
|
@@ -635,16 +641,16 @@ async function startAll(options, showUI = true, runningTestScript = false) {
|
|
|
635
641
|
apphostingConfig = options.config.src.apphosting;
|
|
636
642
|
}
|
|
637
643
|
const apphostingAddr = legacyGetFirstAddr(types_1.Emulators.APPHOSTING);
|
|
638
|
-
if (apphostingEmulatorConfig
|
|
644
|
+
if (apphostingEmulatorConfig?.startCommandOverride) {
|
|
639
645
|
const apphostingLogger = emulatorLogger_1.EmulatorLogger.forEmulator(types_1.Emulators.APPHOSTING);
|
|
640
646
|
apphostingLogger.logLabeled("WARN", types_1.Emulators.APPHOSTING, "The `firebase.json#emulators.apphosting.startCommandOverride` config is deprecated, please use `firebase.json#emulators.apphosting.startCommand` to set a custom start command instead");
|
|
641
647
|
}
|
|
642
648
|
const apphostingEmulator = new apphosting_1.AppHostingEmulator({
|
|
643
649
|
projectId: options.project,
|
|
644
|
-
backendId: apphostingConfig
|
|
650
|
+
backendId: apphostingConfig?.backendId,
|
|
645
651
|
host: apphostingAddr.host,
|
|
646
652
|
port: apphostingAddr.port,
|
|
647
|
-
startCommand:
|
|
653
|
+
startCommand: apphostingEmulatorConfig?.startCommand || apphostingEmulatorConfig?.startCommandOverride,
|
|
648
654
|
rootDirectory,
|
|
649
655
|
options,
|
|
650
656
|
});
|
|
@@ -687,14 +693,12 @@ async function startAll(options, showUI = true, runningTestScript = false) {
|
|
|
687
693
|
});
|
|
688
694
|
return { deprecationNotices };
|
|
689
695
|
}
|
|
690
|
-
exports.startAll = startAll;
|
|
691
696
|
function getListenConfig(options, emulator) {
|
|
692
|
-
|
|
693
|
-
let host = ((_b = (_a = options.config.src.emulators) === null || _a === void 0 ? void 0 : _a[emulator]) === null || _b === void 0 ? void 0 : _b.host) || constants_1.Constants.getDefaultHost();
|
|
697
|
+
let host = options.config.src.emulators?.[emulator]?.host || constants_1.Constants.getDefaultHost();
|
|
694
698
|
if (host === "localhost" && utils.isRunningInWSL()) {
|
|
695
699
|
host = "127.0.0.1";
|
|
696
700
|
}
|
|
697
|
-
const portVal =
|
|
701
|
+
const portVal = options.config.src.emulators?.[emulator]?.port;
|
|
698
702
|
let port;
|
|
699
703
|
let portFixed;
|
|
700
704
|
if (portVal) {
|
|
@@ -759,4 +763,3 @@ async function exportEmulatorData(exportPath, options, initiatedBy) {
|
|
|
759
763
|
}
|
|
760
764
|
utils.logSuccess("Export complete");
|
|
761
765
|
}
|
|
762
|
-
exports.exportEmulatorData = exportEmulatorData;
|
|
@@ -121,7 +121,6 @@ class DatabaseEmulator {
|
|
|
121
121
|
});
|
|
122
122
|
}
|
|
123
123
|
async updateRules(instance, rulesPath) {
|
|
124
|
-
var _a;
|
|
125
124
|
const content = fs.readFileSync(rulesPath, "utf8");
|
|
126
125
|
try {
|
|
127
126
|
await registry_1.EmulatorRegistry.client(types_1.Emulators.DATABASE).put(`/.settings/rules.json`, content, {
|
|
@@ -133,7 +132,7 @@ class DatabaseEmulator {
|
|
|
133
132
|
if (e.context && e.context.body) {
|
|
134
133
|
throw e.context.body.error;
|
|
135
134
|
}
|
|
136
|
-
throw
|
|
135
|
+
throw e.original ?? e;
|
|
137
136
|
}
|
|
138
137
|
}
|
|
139
138
|
prettyPrintRulesError(filePath, error) {
|
|
@@ -1,25 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
3
|
-
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
4
|
-
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
5
|
-
var m = o[Symbol.asyncIterator], i;
|
|
6
|
-
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
7
|
-
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
8
|
-
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
9
|
-
};
|
|
10
|
-
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
11
|
-
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
12
|
-
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
13
|
-
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
14
|
-
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
|
|
15
|
-
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
|
16
|
-
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
|
17
|
-
function fulfill(value) { resume("next", value); }
|
|
18
|
-
function reject(value) { resume("throw", value); }
|
|
19
|
-
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
|
20
|
-
};
|
|
21
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.PGliteExtendedQueryPatch = exports.
|
|
3
|
+
exports.PGliteExtendedQueryPatch = exports.PostgresServer = exports.TRUNCATE_TABLES_SQL = void 0;
|
|
4
|
+
exports.fromNodeSocket = fromNodeSocket;
|
|
23
5
|
const pglite_1 = require("@electric-sql/pglite");
|
|
24
6
|
const { dynamicImport } = require(true && "../../dynamicImport");
|
|
25
7
|
const net = require("node:net");
|
|
@@ -51,38 +33,18 @@ class PostgresServer {
|
|
|
51
33
|
const connection = await fromNodeSocket(socket, {
|
|
52
34
|
serverVersion: "17.4 (PGlite 0.3.3)",
|
|
53
35
|
auth: { method: "trust" },
|
|
54
|
-
onMessage(data, { isAuthenticated }) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
for (var _d = true, _e = __asyncValues(extendedQueryPatch.filterResponse(data, response)), _f; _f = yield __await(_e.next()), _a = _f.done, !_a;) {
|
|
67
|
-
_c = _f.value;
|
|
68
|
-
_d = false;
|
|
69
|
-
try {
|
|
70
|
-
const message = _c;
|
|
71
|
-
yield yield __await(message);
|
|
72
|
-
}
|
|
73
|
-
finally {
|
|
74
|
-
_d = true;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
79
|
-
finally {
|
|
80
|
-
try {
|
|
81
|
-
if (!_d && !_a && (_b = _e.return)) yield __await(_b.call(_e));
|
|
82
|
-
}
|
|
83
|
-
finally { if (e_1) throw e_1.error; }
|
|
84
|
-
}
|
|
85
|
-
});
|
|
36
|
+
async *onMessage(data, { isAuthenticated }) {
|
|
37
|
+
if (!isAuthenticated) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const db = await getDb();
|
|
41
|
+
if (data[0] === pg_gateway_1.FrontendMessageCode.Terminate) {
|
|
42
|
+
await db.query("DEALLOCATE ALL");
|
|
43
|
+
}
|
|
44
|
+
const response = await db.execProtocolRaw(data);
|
|
45
|
+
for await (const message of extendedQueryPatch.filterResponse(data, response)) {
|
|
46
|
+
yield message;
|
|
47
|
+
}
|
|
86
48
|
},
|
|
87
49
|
});
|
|
88
50
|
const extendedQueryPatch = new PGliteExtendedQueryPatch(connection);
|
|
@@ -132,7 +94,7 @@ class PostgresServer {
|
|
|
132
94
|
logger_1.logger.info("Opening database with Postgres 16...");
|
|
133
95
|
const extensions = await this.getExtensions();
|
|
134
96
|
const dataDir = this.baseDataDirectory;
|
|
135
|
-
const oldDb = new PGlite02(
|
|
97
|
+
const oldDb = new PGlite02({ ...pgliteArgs, dataDir });
|
|
136
98
|
await oldDb.waitReady;
|
|
137
99
|
const oldVersion = await oldDb.query("SELECT version();");
|
|
138
100
|
logger_1.logger.debug(`Old database version: ${oldVersion.rows[0].version}`);
|
|
@@ -155,7 +117,7 @@ class PostgresServer {
|
|
|
155
117
|
logger_1.logger.info("If you need to use an older version of the Firebase CLI, you can restore from that directory.");
|
|
156
118
|
logger_1.logger.info("Creating new database with Postgres 17...");
|
|
157
119
|
const pg17Dir = this.getVersionedDataDir(17);
|
|
158
|
-
const newDb = new pglite_1.PGlite(
|
|
120
|
+
const newDb = new pglite_1.PGlite({ ...pgliteArgs, dataDir: pg17Dir });
|
|
159
121
|
await newDb.waitReady;
|
|
160
122
|
logger_1.logger.info("Importing data into new database...");
|
|
161
123
|
const dumpText = await dumpResult.text();
|
|
@@ -197,14 +159,14 @@ class PostgresServer {
|
|
|
197
159
|
}
|
|
198
160
|
}
|
|
199
161
|
try {
|
|
200
|
-
const db = new pglite_1.PGlite(
|
|
162
|
+
const db = new pglite_1.PGlite({ ...baseArgs, dataDir: pg17Dir });
|
|
201
163
|
await db.waitReady;
|
|
202
164
|
return db;
|
|
203
165
|
}
|
|
204
166
|
catch (err) {
|
|
205
167
|
if (pg17Dir && (0, error_1.hasMessage)(err) && /Database already exists/.test(err.message)) {
|
|
206
168
|
fs.rmSync(pg17Dir, { force: true, recursive: true });
|
|
207
|
-
const db = new pglite_1.PGlite(
|
|
169
|
+
const db = new pglite_1.PGlite({ ...baseArgs, dataDir: pg17Dir });
|
|
208
170
|
await db.waitReady;
|
|
209
171
|
return db;
|
|
210
172
|
}
|
|
@@ -234,10 +196,12 @@ async function fromNodeSocket(socket, options) {
|
|
|
234
196
|
const rs = node_stream_1.Readable.toWeb(socket);
|
|
235
197
|
const ws = node_stream_1.Writable.toWeb(socket);
|
|
236
198
|
const opts = options
|
|
237
|
-
?
|
|
199
|
+
? {
|
|
200
|
+
...options,
|
|
201
|
+
}
|
|
202
|
+
: undefined;
|
|
238
203
|
return new pg_gateway_1.PostgresConnection({ readable: rs, writable: ws }, opts);
|
|
239
204
|
}
|
|
240
|
-
exports.fromNodeSocket = fromNodeSocket;
|
|
241
205
|
class PGliteExtendedQueryPatch {
|
|
242
206
|
constructor(connection) {
|
|
243
207
|
this.connection = connection;
|
|
@@ -245,55 +209,35 @@ class PGliteExtendedQueryPatch {
|
|
|
245
209
|
this.eqpErrored = false;
|
|
246
210
|
this.pgliteDebugLog = fs.createWriteStream("pglite-debug.log");
|
|
247
211
|
}
|
|
248
|
-
filterResponse(message, response) {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
this.
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
212
|
+
async *filterResponse(message, response) {
|
|
213
|
+
const pipelineStartMessages = [
|
|
214
|
+
pg_gateway_1.FrontendMessageCode.Parse,
|
|
215
|
+
pg_gateway_1.FrontendMessageCode.Bind,
|
|
216
|
+
pg_gateway_1.FrontendMessageCode.Close,
|
|
217
|
+
];
|
|
218
|
+
const decoded = decoder.write(message);
|
|
219
|
+
this.pgliteDebugLog.write("Front: " + decoded);
|
|
220
|
+
if (pipelineStartMessages.includes(message[0])) {
|
|
221
|
+
this.isExtendedQuery = true;
|
|
222
|
+
}
|
|
223
|
+
if (message[0] === pg_gateway_1.FrontendMessageCode.Sync) {
|
|
224
|
+
this.isExtendedQuery = false;
|
|
225
|
+
this.eqpErrored = false;
|
|
226
|
+
}
|
|
227
|
+
for await (const bm of (0, pg_gateway_1.getMessages)(response)) {
|
|
228
|
+
if (this.eqpErrored) {
|
|
229
|
+
continue;
|
|
264
230
|
}
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
_c = _f.value;
|
|
268
|
-
_d = false;
|
|
269
|
-
try {
|
|
270
|
-
const bm = _c;
|
|
271
|
-
if (this.eqpErrored) {
|
|
272
|
-
continue;
|
|
273
|
-
}
|
|
274
|
-
if (this.isExtendedQuery && bm[0] === pg_gateway_1.BackendMessageCode.ErrorMessage) {
|
|
275
|
-
this.eqpErrored = true;
|
|
276
|
-
}
|
|
277
|
-
if (this.isExtendedQuery && bm[0] === pg_gateway_1.BackendMessageCode.ReadyForQuery) {
|
|
278
|
-
this.pgliteDebugLog.write("Filtered: " + decoder.write(bm));
|
|
279
|
-
continue;
|
|
280
|
-
}
|
|
281
|
-
this.pgliteDebugLog.write("Sent: " + decoder.write(bm));
|
|
282
|
-
yield yield __await(bm);
|
|
283
|
-
}
|
|
284
|
-
finally {
|
|
285
|
-
_d = true;
|
|
286
|
-
}
|
|
287
|
-
}
|
|
231
|
+
if (this.isExtendedQuery && bm[0] === pg_gateway_1.BackendMessageCode.ErrorMessage) {
|
|
232
|
+
this.eqpErrored = true;
|
|
288
233
|
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
if (!_d && !_a && (_b = _e.return)) yield __await(_b.call(_e));
|
|
293
|
-
}
|
|
294
|
-
finally { if (e_2) throw e_2.error; }
|
|
234
|
+
if (this.isExtendedQuery && bm[0] === pg_gateway_1.BackendMessageCode.ReadyForQuery) {
|
|
235
|
+
this.pgliteDebugLog.write("Filtered: " + decoder.write(bm));
|
|
236
|
+
continue;
|
|
295
237
|
}
|
|
296
|
-
|
|
238
|
+
this.pgliteDebugLog.write("Sent: " + decoder.write(bm));
|
|
239
|
+
yield bm;
|
|
240
|
+
}
|
|
297
241
|
}
|
|
298
242
|
}
|
|
299
243
|
exports.PGliteExtendedQueryPatch = PGliteExtendedQueryPatch;
|
|
@@ -30,7 +30,6 @@ class DataConnectEmulator {
|
|
|
30
30
|
this.emulatorClient = new DataConnectEmulatorClient();
|
|
31
31
|
}
|
|
32
32
|
async start() {
|
|
33
|
-
var _a, _b, _c;
|
|
34
33
|
let resolvedConfigDir;
|
|
35
34
|
try {
|
|
36
35
|
resolvedConfigDir = this.args.config.path(this.args.configDir);
|
|
@@ -62,10 +61,10 @@ class DataConnectEmulator {
|
|
|
62
61
|
this.usingExistingEmulator = false;
|
|
63
62
|
if (this.args.autoconnectToPostgres) {
|
|
64
63
|
const info = await (0, load_1.load)(this.args.projectId, this.args.config, this.args.configDir);
|
|
65
|
-
const dbId = (
|
|
64
|
+
const dbId = (0, types_2.mainSchemaYaml)(info.dataConnectYaml).datasource.postgresql?.database || "postgres";
|
|
66
65
|
const serviceId = info.dataConnectYaml.serviceId;
|
|
67
|
-
const pgPort =
|
|
68
|
-
const pgHost =
|
|
66
|
+
const pgPort = this.args.postgresListen?.[0].port;
|
|
67
|
+
const pgHost = this.args.postgresListen?.[0].address;
|
|
69
68
|
let connStr = (0, api_1.dataConnectLocalConnString)();
|
|
70
69
|
if (connStr) {
|
|
71
70
|
this.logger.logLabeled("INFO", "dataconnect", `FIREBASE_DATACONNECT_POSTGRESQL_STRING is set to ${clc.bold(connStr)} - using that instead of starting a new database`);
|
|
@@ -188,7 +187,6 @@ class DataConnectEmulator {
|
|
|
188
187
|
});
|
|
189
188
|
}
|
|
190
189
|
static async build(args) {
|
|
191
|
-
var _a;
|
|
192
190
|
const commandInfo = await (0, downloadableEmulators_1.downloadIfNecessary)(types_1.Emulators.DATACONNECT);
|
|
193
191
|
const cmd = ["--logtostderr", "-v=2", "build", `--config_dir=${args.configDir}`];
|
|
194
192
|
if (args.projectId) {
|
|
@@ -216,7 +214,7 @@ class DataConnectEmulator {
|
|
|
216
214
|
return JSON.parse(res.stdout);
|
|
217
215
|
}
|
|
218
216
|
catch (err) {
|
|
219
|
-
throw new error_1.FirebaseError(`Unable to parse 'fdc build' output: ${
|
|
217
|
+
throw new error_1.FirebaseError(`Unable to parse 'fdc build' output: ${res.stdout ?? res.stderr}`);
|
|
220
218
|
}
|
|
221
219
|
}
|
|
222
220
|
async connectToPostgres(connectionString, database, serviceId) {
|
|
@@ -256,7 +254,7 @@ class DataConnectEmulator {
|
|
|
256
254
|
credsEnv.GOOGLE_APPLICATION_CREDENTIALS = defaultCredPath;
|
|
257
255
|
}
|
|
258
256
|
}
|
|
259
|
-
return
|
|
257
|
+
return { ...process.env, ...extraEnv, ...credsEnv };
|
|
260
258
|
}
|
|
261
259
|
}
|
|
262
260
|
exports.DataConnectEmulator = DataConnectEmulator;
|
|
@@ -265,7 +263,6 @@ class DataConnectEmulatorClient {
|
|
|
265
263
|
this.client = undefined;
|
|
266
264
|
}
|
|
267
265
|
async configureEmulator(body) {
|
|
268
|
-
var _a, _b;
|
|
269
266
|
if (!this.client) {
|
|
270
267
|
this.client = registry_1.EmulatorRegistry.client(types_1.Emulators.DATACONNECT);
|
|
271
268
|
}
|
|
@@ -275,7 +272,7 @@ class DataConnectEmulatorClient {
|
|
|
275
272
|
}
|
|
276
273
|
catch (err) {
|
|
277
274
|
if (err.status === 500) {
|
|
278
|
-
throw new error_1.FirebaseError(`Data Connect emulator: ${
|
|
275
|
+
throw new error_1.FirebaseError(`Data Connect emulator: ${err?.context?.body?.message}`);
|
|
279
276
|
}
|
|
280
277
|
throw err;
|
|
281
278
|
}
|
package/lib/emulator/download.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.downloadEmulator = downloadEmulator;
|
|
4
|
+
exports.downloadExtensionVersion = downloadExtensionVersion;
|
|
4
5
|
const crypto = require("crypto");
|
|
5
6
|
const fs = require("fs-extra");
|
|
6
7
|
const path = require("path");
|
|
@@ -35,7 +36,6 @@ async function downloadEmulator(name) {
|
|
|
35
36
|
fs.chmodSync(executablePath, 0o755);
|
|
36
37
|
removeOldFiles(name, emulator);
|
|
37
38
|
}
|
|
38
|
-
exports.downloadEmulator = downloadEmulator;
|
|
39
39
|
async function downloadExtensionVersion(extensionVersionRef, sourceDownloadUri, targetDir) {
|
|
40
40
|
const emulatorLogger = emulatorLogger_1.EmulatorLogger.forExtension({ ref: extensionVersionRef });
|
|
41
41
|
emulatorLogger.logLabeled("BULLET", "extensions", `Starting download for ${extensionVersionRef} source code to ${targetDir}..`);
|
|
@@ -52,7 +52,6 @@ async function downloadExtensionVersion(extensionVersionRef, sourceDownloadUri,
|
|
|
52
52
|
emulatorLogger.logLabeled("BULLET", "extensions", `Downloaded to ${targetDir}...`);
|
|
53
53
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
54
54
|
}
|
|
55
|
-
exports.downloadExtensionVersion = downloadExtensionVersion;
|
|
56
55
|
function removeOldFiles(name, emulator, removeAllVersions = false) {
|
|
57
56
|
const currentLocalPath = emulator.downloadPath;
|
|
58
57
|
const currentUnzipPath = emulator.unzipDir;
|
|
@@ -44,13 +44,13 @@
|
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
46
|
"pubsub": {
|
|
47
|
-
"version": "0.8.
|
|
48
|
-
"expectedSize":
|
|
49
|
-
"expectedChecksum": "
|
|
50
|
-
"expectedChecksumSHA256": "
|
|
51
|
-
"remoteUrl": "https://storage.googleapis.com/firebase-preview-drop/emulator/pubsub-emulator-0.8.
|
|
52
|
-
"downloadPathRelativeToCacheDir": "pubsub-emulator-0.8.
|
|
53
|
-
"binaryPathRelativeToCacheDir": "pubsub-emulator-0.8.
|
|
47
|
+
"version": "0.8.25",
|
|
48
|
+
"expectedSize": 52169500,
|
|
49
|
+
"expectedChecksum": "ff855b79e84d26b2b5b2d56e84e0fb51",
|
|
50
|
+
"expectedChecksumSHA256": "a69fe788be3b0b3866c55b7ed8790efa424a88e6f26843bdbe9d34b93c9509af",
|
|
51
|
+
"remoteUrl": "https://storage.googleapis.com/firebase-preview-drop/emulator/pubsub-emulator-0.8.25.zip",
|
|
52
|
+
"downloadPathRelativeToCacheDir": "pubsub-emulator-0.8.25.zip",
|
|
53
|
+
"binaryPathRelativeToCacheDir": "pubsub-emulator-0.8.25/pubsub-emulator/bin/cloud-pubsub-emulator"
|
|
54
54
|
},
|
|
55
55
|
"dataconnect": {
|
|
56
56
|
"darwin": {
|