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,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createApp =
|
|
3
|
+
exports.createApp = createApp;
|
|
4
4
|
const cors = require("cors");
|
|
5
5
|
const express = require("express");
|
|
6
6
|
const exegesisExpress = require("exegesis-express");
|
|
@@ -26,29 +26,40 @@ const SERVICE_ACCOUNT_TOKEN_PREFIX = "ya29.";
|
|
|
26
26
|
function specForRouter() {
|
|
27
27
|
const paths = {};
|
|
28
28
|
Object.entries(apiSpec.paths).forEach(([path, pathObj]) => {
|
|
29
|
-
|
|
30
|
-
const servers = (_a = pathObj.servers) !== null && _a !== void 0 ? _a : apiSpec.servers;
|
|
29
|
+
const servers = pathObj.servers ?? apiSpec.servers;
|
|
31
30
|
if (!servers || !servers.length) {
|
|
32
31
|
throw new Error("No servers defined in API spec.");
|
|
33
32
|
}
|
|
34
33
|
const pathWithNamespace = servers[0].url.replace("https://", "/") + path;
|
|
35
34
|
paths[pathWithNamespace] = pathObj;
|
|
36
35
|
});
|
|
37
|
-
return
|
|
36
|
+
return {
|
|
37
|
+
...apiSpec,
|
|
38
|
+
paths,
|
|
39
|
+
servers: undefined,
|
|
40
|
+
"x-exegesis-controller": "auth",
|
|
41
|
+
};
|
|
38
42
|
}
|
|
39
43
|
function specWithEmulatorServer(protocol, host) {
|
|
40
44
|
const paths = {};
|
|
41
45
|
Object.entries(apiSpec.paths).forEach(([path, pathObj]) => {
|
|
42
46
|
const servers = pathObj.servers;
|
|
43
47
|
if (servers) {
|
|
44
|
-
pathObj =
|
|
48
|
+
pathObj = {
|
|
49
|
+
...pathObj,
|
|
50
|
+
servers: serversWithEmulators(servers),
|
|
51
|
+
};
|
|
45
52
|
}
|
|
46
53
|
paths[path] = pathObj;
|
|
47
54
|
});
|
|
48
55
|
if (!apiSpec.servers) {
|
|
49
56
|
throw new Error("No servers defined in API spec.");
|
|
50
57
|
}
|
|
51
|
-
return
|
|
58
|
+
return {
|
|
59
|
+
...apiSpec,
|
|
60
|
+
servers: serversWithEmulators(apiSpec.servers),
|
|
61
|
+
paths,
|
|
62
|
+
};
|
|
52
63
|
function serversWithEmulators(servers) {
|
|
53
64
|
const result = [];
|
|
54
65
|
for (const server of servers) {
|
|
@@ -217,7 +228,7 @@ async function createApp(defaultProjectId, singleProjectMode = index_1.SinglePro
|
|
|
217
228
|
postController(ctx) {
|
|
218
229
|
if (ctx.res.statusCode === 401) {
|
|
219
230
|
const requirements = ctx.api.operationObject.security;
|
|
220
|
-
if (requirements
|
|
231
|
+
if (requirements?.some((req) => req.apiKeyQuery || req.apiKeyHeader)) {
|
|
221
232
|
throw new errors_2.PermissionDeniedError("The request is missing a valid API key.");
|
|
222
233
|
}
|
|
223
234
|
else {
|
|
@@ -287,7 +298,6 @@ async function createApp(defaultProjectId, singleProjectMode = index_1.SinglePro
|
|
|
287
298
|
return agentState.getTenantProject(tenantId);
|
|
288
299
|
}
|
|
289
300
|
}
|
|
290
|
-
exports.createApp = createApp;
|
|
291
301
|
function registerLegacyRoutes(app) {
|
|
292
302
|
const relyingPartyPrefix = "/www.googleapis.com/identitytoolkit/v3/relyingparty/";
|
|
293
303
|
const v1Prefix = "/identitytoolkit.googleapis.com/v1/";
|
|
@@ -372,30 +382,29 @@ function toExegesisController(ops, getProjectStateById) {
|
|
|
372
382
|
}
|
|
373
383
|
function toExegesisOperation(operation) {
|
|
374
384
|
return (ctx) => {
|
|
375
|
-
|
|
376
|
-
let targetProjectId = ctx.params.path.targetProjectId || ((_a = ctx.requestBody) === null || _a === void 0 ? void 0 : _a.targetProjectId);
|
|
385
|
+
let targetProjectId = ctx.params.path.targetProjectId || ctx.requestBody?.targetProjectId;
|
|
377
386
|
if (targetProjectId) {
|
|
378
|
-
if (
|
|
379
|
-
(0, errors_2.assert)(
|
|
387
|
+
if (ctx.api.operationObject.security?.some((sec) => sec.Oauth2)) {
|
|
388
|
+
(0, errors_2.assert)(ctx.security?.Oauth2, "INSUFFICIENT_PERMISSION : Only authenticated requests can specify target_project_id.");
|
|
380
389
|
}
|
|
381
390
|
}
|
|
382
391
|
else {
|
|
383
392
|
targetProjectId = ctx.user;
|
|
384
393
|
}
|
|
385
394
|
let targetTenantId = undefined;
|
|
386
|
-
if (ctx.params.path.tenantId &&
|
|
395
|
+
if (ctx.params.path.tenantId && ctx.requestBody?.tenantId) {
|
|
387
396
|
(0, errors_2.assert)(ctx.params.path.tenantId === ctx.requestBody.tenantId, "TENANT_ID_MISMATCH");
|
|
388
397
|
}
|
|
389
|
-
targetTenantId = ctx.params.path.tenantId ||
|
|
390
|
-
if (
|
|
391
|
-
const idToken =
|
|
398
|
+
targetTenantId = ctx.params.path.tenantId || ctx.requestBody?.tenantId;
|
|
399
|
+
if (ctx.requestBody?.idToken) {
|
|
400
|
+
const idToken = ctx.requestBody?.idToken;
|
|
392
401
|
const decoded = (0, jsonwebtoken_1.decode)(idToken, { complete: true });
|
|
393
|
-
if (
|
|
394
|
-
(0, errors_2.assert)(
|
|
402
|
+
if (decoded?.payload.firebase.tenant && targetTenantId) {
|
|
403
|
+
(0, errors_2.assert)(decoded?.payload.firebase.tenant === targetTenantId, "TENANT_ID_MISMATCH");
|
|
395
404
|
}
|
|
396
|
-
targetTenantId = targetTenantId ||
|
|
405
|
+
targetTenantId = targetTenantId || decoded?.payload.firebase.tenant;
|
|
397
406
|
}
|
|
398
|
-
if (
|
|
407
|
+
if (ctx.requestBody?.refreshToken) {
|
|
399
408
|
const refreshTokenRecord = (0, state_1.decodeRefreshToken)(ctx.requestBody.refreshToken);
|
|
400
409
|
if (refreshTokenRecord.tenantId && targetTenantId) {
|
|
401
410
|
(0, errors_2.assert)(refreshTokenRecord.tenantId === targetTenantId, "TENANT_ID_MISMATCH: ((Refresh token tenant ID does not match target tenant ID.))");
|
|
@@ -417,7 +426,6 @@ function wrapValidateBody(pluginContext) {
|
|
|
417
426
|
}
|
|
418
427
|
}
|
|
419
428
|
function validateAndFixRestMappingRequestBody(validate, body) {
|
|
420
|
-
var _a;
|
|
421
429
|
body = convertKeysToCamelCase(body);
|
|
422
430
|
let result;
|
|
423
431
|
let keepFixing = false;
|
|
@@ -428,7 +436,7 @@ function validateAndFixRestMappingRequestBody(validate, body) {
|
|
|
428
436
|
return result;
|
|
429
437
|
keepFixing = false;
|
|
430
438
|
for (const error of result.errors) {
|
|
431
|
-
const path =
|
|
439
|
+
const path = error.location?.path;
|
|
432
440
|
const ajvError = error.ajvError;
|
|
433
441
|
if (!path || fixedPaths.has(path) || !ajvError) {
|
|
434
442
|
continue;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.BlockingFunctionEvents = exports.TenantProjectState = exports.AgentProjectState = exports.ProjectState = exports.SIGNIN_METHOD_EMAIL_LINK = exports.PROVIDER_GAME_CENTER = exports.PROVIDER_CUSTOM = exports.PROVIDER_ANONYMOUS = exports.PROVIDER_PHONE = exports.PROVIDER_PASSWORD = void 0;
|
|
4
|
+
exports.encodeRefreshToken = encodeRefreshToken;
|
|
5
|
+
exports.decodeRefreshToken = decodeRefreshToken;
|
|
4
6
|
const utils_1 = require("./utils");
|
|
5
7
|
const cloudFunctions_1 = require("./cloudFunctions");
|
|
6
8
|
const errors_1 = require("./errors");
|
|
@@ -73,9 +75,8 @@ class ProjectState {
|
|
|
73
75
|
this.authCloudFunction.dispatch("delete", user);
|
|
74
76
|
}
|
|
75
77
|
updateUserByLocalId(localId, fields, options = {}) {
|
|
76
|
-
|
|
77
|
-
const
|
|
78
|
-
const deleteProviders = (_b = options.deleteProviders) !== null && _b !== void 0 ? _b : [];
|
|
78
|
+
const upsertProviders = options.upsertProviders ?? [];
|
|
79
|
+
const deleteProviders = options.deleteProviders ?? [];
|
|
79
80
|
const user = this.users.get(localId);
|
|
80
81
|
if (!user) {
|
|
81
82
|
throw new Error(`Internal assertion error: trying to update nonexistent user: ${localId}`);
|
|
@@ -140,13 +141,12 @@ class ProjectState {
|
|
|
140
141
|
return enrollments;
|
|
141
142
|
}
|
|
142
143
|
updateUserProviderInfo(user, upsertProviders, deleteProviders) {
|
|
143
|
-
var _a, _b;
|
|
144
144
|
const oldProviderEmails = getProviderEmailsForUser(user);
|
|
145
145
|
if (user.providerUserInfo) {
|
|
146
146
|
const updatedProviderUserInfo = [];
|
|
147
147
|
for (const info of user.providerUserInfo) {
|
|
148
148
|
if (deleteProviders.includes(info.providerId)) {
|
|
149
|
-
|
|
149
|
+
this.userIdForProviderRawId.get(info.providerId)?.delete(info.rawId);
|
|
150
150
|
}
|
|
151
151
|
else {
|
|
152
152
|
updatedProviderUserInfo.push(info);
|
|
@@ -155,7 +155,7 @@ class ProjectState {
|
|
|
155
155
|
user.providerUserInfo = updatedProviderUserInfo;
|
|
156
156
|
}
|
|
157
157
|
if (upsertProviders.length) {
|
|
158
|
-
user.providerUserInfo =
|
|
158
|
+
user.providerUserInfo = user.providerUserInfo ?? [];
|
|
159
159
|
for (const upsert of upsertProviders) {
|
|
160
160
|
const providerId = upsert.providerId;
|
|
161
161
|
let users = this.userIdForProviderRawId.get(providerId);
|
|
@@ -209,7 +209,6 @@ class ProjectState {
|
|
|
209
209
|
return userInfo;
|
|
210
210
|
}
|
|
211
211
|
getUsersByEmailOrProviderEmail(email) {
|
|
212
|
-
var _a;
|
|
213
212
|
const users = [];
|
|
214
213
|
const seenLocalIds = new Set();
|
|
215
214
|
const localId = this.localIdForEmail.get(email);
|
|
@@ -217,7 +216,7 @@ class ProjectState {
|
|
|
217
216
|
users.push(this.getUserByLocalIdAssertingExists(localId));
|
|
218
217
|
seenLocalIds.add(localId);
|
|
219
218
|
}
|
|
220
|
-
for (const localId of
|
|
219
|
+
for (const localId of this.localIdsForProviderEmail.get(email) ?? []) {
|
|
221
220
|
if (!seenLocalIds.has(localId)) {
|
|
222
221
|
users.push(this.getUserByLocalIdAssertingExists(localId));
|
|
223
222
|
seenLocalIds.add(localId);
|
|
@@ -243,15 +242,13 @@ class ProjectState {
|
|
|
243
242
|
}
|
|
244
243
|
}
|
|
245
244
|
getUserByProviderRawId(provider, rawId) {
|
|
246
|
-
|
|
247
|
-
const localId = (_a = this.userIdForProviderRawId.get(provider)) === null || _a === void 0 ? void 0 : _a.get(rawId);
|
|
245
|
+
const localId = this.userIdForProviderRawId.get(provider)?.get(rawId);
|
|
248
246
|
if (!localId) {
|
|
249
247
|
return undefined;
|
|
250
248
|
}
|
|
251
249
|
return this.getUserByLocalIdAssertingExists(localId);
|
|
252
250
|
}
|
|
253
251
|
listProviderInfosByProviderId(provider) {
|
|
254
|
-
var _a;
|
|
255
252
|
const users = this.userIdForProviderRawId.get(provider);
|
|
256
253
|
if (!users) {
|
|
257
254
|
return [];
|
|
@@ -259,7 +256,7 @@ class ProjectState {
|
|
|
259
256
|
const infos = [];
|
|
260
257
|
for (const localId of users.values()) {
|
|
261
258
|
const user = this.getUserByLocalIdAssertingExists(localId);
|
|
262
|
-
const info =
|
|
259
|
+
const info = user.providerUserInfo?.find((info) => info.providerId === provider);
|
|
263
260
|
if (!info) {
|
|
264
261
|
throw new Error(`Internal assertion error: User ${localId} does not have providerInfo ${provider}.`);
|
|
265
262
|
}
|
|
@@ -388,7 +385,6 @@ class ProjectState {
|
|
|
388
385
|
return record;
|
|
389
386
|
}
|
|
390
387
|
removeUserFromIndex(user) {
|
|
391
|
-
var _a, _b;
|
|
392
388
|
if (user.email) {
|
|
393
389
|
this.localIdForEmail.delete(user.email);
|
|
394
390
|
}
|
|
@@ -398,8 +394,8 @@ class ProjectState {
|
|
|
398
394
|
if (user.phoneNumber) {
|
|
399
395
|
this.localIdForPhoneNumber.delete(user.phoneNumber);
|
|
400
396
|
}
|
|
401
|
-
for (const info of
|
|
402
|
-
|
|
397
|
+
for (const info of user.providerUserInfo ?? []) {
|
|
398
|
+
this.userIdForProviderRawId.get(info.providerId)?.delete(info.rawId);
|
|
403
399
|
if (info.email) {
|
|
404
400
|
this.removeProviderEmailForUser(info.email, user.localId);
|
|
405
401
|
}
|
|
@@ -460,14 +456,13 @@ class AgentProjectState extends ProjectState {
|
|
|
460
456
|
this._config.blockingFunctions = blockingFunctions;
|
|
461
457
|
}
|
|
462
458
|
shouldForwardCredentialToBlockingFunction(type) {
|
|
463
|
-
var _a, _b, _c, _d, _e, _f;
|
|
464
459
|
switch (type) {
|
|
465
460
|
case "accessToken":
|
|
466
|
-
return
|
|
461
|
+
return this._config.blockingFunctions.forwardInboundCredentials?.accessToken ?? false;
|
|
467
462
|
case "idToken":
|
|
468
|
-
return
|
|
463
|
+
return this._config.blockingFunctions.forwardInboundCredentials?.idToken ?? false;
|
|
469
464
|
case "refreshToken":
|
|
470
|
-
return
|
|
465
|
+
return this._config.blockingFunctions.forwardInboundCredentials?.refreshToken ?? false;
|
|
471
466
|
}
|
|
472
467
|
}
|
|
473
468
|
getBlockingFunctionUri(event) {
|
|
@@ -480,12 +475,11 @@ class AgentProjectState extends ProjectState {
|
|
|
480
475
|
return undefined;
|
|
481
476
|
}
|
|
482
477
|
updateConfig(update, updateMask) {
|
|
483
|
-
var _a, _b, _c, _d, _e;
|
|
484
478
|
if (!updateMask) {
|
|
485
|
-
this.oneAccountPerEmail =
|
|
486
|
-
this.blockingFunctionsConfig =
|
|
479
|
+
this.oneAccountPerEmail = !update.signIn?.allowDuplicateEmails;
|
|
480
|
+
this.blockingFunctionsConfig = update.blockingFunctions ?? {};
|
|
487
481
|
this.enableImprovedEmailPrivacy =
|
|
488
|
-
|
|
482
|
+
update.emailPrivacyConfig?.enableImprovedEmailPrivacy ?? false;
|
|
489
483
|
return this.config;
|
|
490
484
|
}
|
|
491
485
|
return applyMask(updateMask, this.config, update);
|
|
@@ -592,9 +586,8 @@ class TenantProjectState extends ProjectState {
|
|
|
592
586
|
this.parentProject.deleteTenant(this.tenantId);
|
|
593
587
|
}
|
|
594
588
|
updateTenant(update, updateMask) {
|
|
595
|
-
var _a, _b, _c, _d, _e;
|
|
596
589
|
if (!updateMask) {
|
|
597
|
-
const mfaConfig =
|
|
590
|
+
const mfaConfig = update.mfaConfig ?? {};
|
|
598
591
|
if (!("state" in mfaConfig)) {
|
|
599
592
|
mfaConfig.state = "DISABLED";
|
|
600
593
|
}
|
|
@@ -604,11 +597,11 @@ class TenantProjectState extends ProjectState {
|
|
|
604
597
|
this._tenantConfig = {
|
|
605
598
|
tenantId: this.tenantId,
|
|
606
599
|
name: this.tenantConfig.name,
|
|
607
|
-
allowPasswordSignup:
|
|
608
|
-
disableAuth:
|
|
600
|
+
allowPasswordSignup: update.allowPasswordSignup ?? false,
|
|
601
|
+
disableAuth: update.disableAuth ?? false,
|
|
609
602
|
mfaConfig: mfaConfig,
|
|
610
|
-
enableAnonymousUser:
|
|
611
|
-
enableEmailLinkSignin:
|
|
603
|
+
enableAnonymousUser: update.enableAnonymousUser ?? false,
|
|
604
|
+
enableEmailLinkSignin: update.enableEmailLinkSignin ?? false,
|
|
612
605
|
displayName: update.displayName,
|
|
613
606
|
};
|
|
614
607
|
return this.tenantConfig;
|
|
@@ -621,28 +614,25 @@ var BlockingFunctionEvents;
|
|
|
621
614
|
(function (BlockingFunctionEvents) {
|
|
622
615
|
BlockingFunctionEvents["BEFORE_CREATE"] = "beforeCreate";
|
|
623
616
|
BlockingFunctionEvents["BEFORE_SIGN_IN"] = "beforeSignIn";
|
|
624
|
-
})(BlockingFunctionEvents
|
|
617
|
+
})(BlockingFunctionEvents || (exports.BlockingFunctionEvents = BlockingFunctionEvents = {}));
|
|
625
618
|
function encodeRefreshToken(refreshTokenRecord) {
|
|
626
619
|
return Buffer.from(JSON.stringify(refreshTokenRecord), "utf8").toString("base64");
|
|
627
620
|
}
|
|
628
|
-
exports.encodeRefreshToken = encodeRefreshToken;
|
|
629
621
|
function decodeRefreshToken(refreshTokenString) {
|
|
630
622
|
let refreshTokenRecord;
|
|
631
623
|
try {
|
|
632
624
|
const json = Buffer.from(refreshTokenString, "base64").toString("utf8");
|
|
633
625
|
refreshTokenRecord = JSON.parse(json);
|
|
634
626
|
}
|
|
635
|
-
catch
|
|
627
|
+
catch {
|
|
636
628
|
throw new errors_1.BadRequestError("INVALID_REFRESH_TOKEN");
|
|
637
629
|
}
|
|
638
630
|
(0, errors_1.assert)(refreshTokenRecord._AuthEmulatorRefreshToken, "INVALID_REFRESH_TOKEN");
|
|
639
631
|
return refreshTokenRecord;
|
|
640
632
|
}
|
|
641
|
-
exports.decodeRefreshToken = decodeRefreshToken;
|
|
642
633
|
function getProviderEmailsForUser(user) {
|
|
643
|
-
var _a;
|
|
644
634
|
const emails = new Set();
|
|
645
|
-
|
|
635
|
+
user.providerUserInfo?.forEach(({ email }) => {
|
|
646
636
|
if (email) {
|
|
647
637
|
emails.add(email);
|
|
648
638
|
}
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.isValidEmailAddress = isValidEmailAddress;
|
|
4
|
+
exports.isValidPhoneNumber = isValidPhoneNumber;
|
|
5
|
+
exports.canonicalizeEmailAddress = canonicalizeEmailAddress;
|
|
6
|
+
exports.parseAbsoluteUri = parseAbsoluteUri;
|
|
7
|
+
exports.randomId = randomId;
|
|
8
|
+
exports.randomBase64UrlStr = randomBase64UrlStr;
|
|
9
|
+
exports.randomDigits = randomDigits;
|
|
10
|
+
exports.toUnixTimestamp = toUnixTimestamp;
|
|
11
|
+
exports.logError = logError;
|
|
12
|
+
exports.authEmulatorUrl = authEmulatorUrl;
|
|
13
|
+
exports.mirrorFieldTo = mirrorFieldTo;
|
|
4
14
|
const url_1 = require("url");
|
|
5
15
|
const registry_1 = require("../registry");
|
|
6
16
|
const types_1 = require("../types");
|
|
@@ -8,24 +18,20 @@ const emulatorLogger_1 = require("../emulatorLogger");
|
|
|
8
18
|
function isValidEmailAddress(email) {
|
|
9
19
|
return /^[^@]+@[^@]+$/.test(email);
|
|
10
20
|
}
|
|
11
|
-
exports.isValidEmailAddress = isValidEmailAddress;
|
|
12
21
|
function isValidPhoneNumber(phoneNumber) {
|
|
13
22
|
return /^\+/.test(phoneNumber);
|
|
14
23
|
}
|
|
15
|
-
exports.isValidPhoneNumber = isValidPhoneNumber;
|
|
16
24
|
function canonicalizeEmailAddress(email) {
|
|
17
25
|
return email.toLowerCase();
|
|
18
26
|
}
|
|
19
|
-
exports.canonicalizeEmailAddress = canonicalizeEmailAddress;
|
|
20
27
|
function parseAbsoluteUri(uri) {
|
|
21
28
|
try {
|
|
22
29
|
return new url_1.URL(uri);
|
|
23
30
|
}
|
|
24
|
-
catch
|
|
31
|
+
catch {
|
|
25
32
|
return undefined;
|
|
26
33
|
}
|
|
27
34
|
}
|
|
28
|
-
exports.parseAbsoluteUri = parseAbsoluteUri;
|
|
29
35
|
function randomId(len) {
|
|
30
36
|
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
31
37
|
let autoId = "";
|
|
@@ -34,7 +40,6 @@ function randomId(len) {
|
|
|
34
40
|
}
|
|
35
41
|
return autoId;
|
|
36
42
|
}
|
|
37
|
-
exports.randomId = randomId;
|
|
38
43
|
function randomBase64UrlStr(len) {
|
|
39
44
|
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
|
|
40
45
|
let autoId = "";
|
|
@@ -43,7 +48,6 @@ function randomBase64UrlStr(len) {
|
|
|
43
48
|
}
|
|
44
49
|
return autoId;
|
|
45
50
|
}
|
|
46
|
-
exports.randomBase64UrlStr = randomBase64UrlStr;
|
|
47
51
|
function randomDigits(len) {
|
|
48
52
|
let digits = "";
|
|
49
53
|
for (let i = 0; i < len; i++) {
|
|
@@ -51,18 +55,15 @@ function randomDigits(len) {
|
|
|
51
55
|
}
|
|
52
56
|
return digits;
|
|
53
57
|
}
|
|
54
|
-
exports.randomDigits = randomDigits;
|
|
55
58
|
function toUnixTimestamp(date) {
|
|
56
59
|
return Math.floor(date.getTime() / 1000);
|
|
57
60
|
}
|
|
58
|
-
exports.toUnixTimestamp = toUnixTimestamp;
|
|
59
61
|
function logError(err) {
|
|
60
62
|
if (!registry_1.EmulatorRegistry.isRunning(types_1.Emulators.AUTH)) {
|
|
61
63
|
console.error(err);
|
|
62
64
|
}
|
|
63
65
|
emulatorLogger_1.EmulatorLogger.forEmulator(types_1.Emulators.AUTH).log("WARN", err.stack || err.message || err.constructor.name);
|
|
64
66
|
}
|
|
65
|
-
exports.logError = logError;
|
|
66
67
|
function authEmulatorUrl(req) {
|
|
67
68
|
if (registry_1.EmulatorRegistry.isRunning(types_1.Emulators.AUTH)) {
|
|
68
69
|
return registry_1.EmulatorRegistry.url(types_1.Emulators.AUTH);
|
|
@@ -71,7 +72,6 @@ function authEmulatorUrl(req) {
|
|
|
71
72
|
return registry_1.EmulatorRegistry.url(types_1.Emulators.AUTH, req);
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
|
-
exports.authEmulatorUrl = authEmulatorUrl;
|
|
75
75
|
function mirrorFieldTo(dest, field, source) {
|
|
76
76
|
const value = source[field];
|
|
77
77
|
if (value === undefined) {
|
|
@@ -81,4 +81,3 @@ function mirrorFieldTo(dest, field, source) {
|
|
|
81
81
|
dest[field] = value;
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
|
-
exports.mirrorFieldTo = mirrorFieldTo;
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.JAVA_DEPRECATION_WARNING = exports.MIN_SUPPORTED_JAVA_MAJOR_VERSION = exports.
|
|
3
|
+
exports.JAVA_DEPRECATION_WARNING = exports.MIN_SUPPORTED_JAVA_MAJOR_VERSION = exports.DEFAULT_CONFIG = exports.DESC_TEST_PARAMS = exports.FLAG_TEST_PARAMS = exports.DESC_TEST_CONFIG = exports.FLAG_TEST_CONFIG = exports.DESC_UI = exports.FLAG_UI = exports.DESC_VERBOSITY = exports.FLAG_VERBOSITY = exports.FLAG_VERBOSITY_NAME = exports.EXPORT_ON_EXIT_CWD_DANGER = exports.EXPORT_ON_EXIT_USAGE_ERROR = exports.DESC_EXPORT_ON_EXIT = exports.FLAG_EXPORT_ON_EXIT = exports.FLAG_EXPORT_ON_EXIT_NAME = exports.DESC_IMPORT = exports.FLAG_IMPORT = exports.DESC_INSPECT_FUNCTIONS = exports.FLAG_INSPECT_FUNCTIONS = exports.DESC_ONLY = exports.FLAG_ONLY = void 0;
|
|
4
|
+
exports.printNoticeIfEmulated = printNoticeIfEmulated;
|
|
5
|
+
exports.warnEmulatorNotSupported = warnEmulatorNotSupported;
|
|
6
|
+
exports.errorMissingProject = errorMissingProject;
|
|
7
|
+
exports.beforeEmulatorCommand = beforeEmulatorCommand;
|
|
8
|
+
exports.parseInspectionPort = parseInspectionPort;
|
|
9
|
+
exports.setExportOnExitOptions = setExportOnExitOptions;
|
|
10
|
+
exports.shutdownWhenKilled = shutdownWhenKilled;
|
|
11
|
+
exports.getListenOverview = getListenOverview;
|
|
12
|
+
exports.emulatorExec = emulatorExec;
|
|
13
|
+
exports.checkJavaMajorVersion = checkJavaMajorVersion;
|
|
4
14
|
const clc = require("colorette");
|
|
5
15
|
const childProcess = require("child_process");
|
|
6
16
|
const controller = require("../emulator/controller");
|
|
@@ -68,7 +78,6 @@ function printNoticeIfEmulated(options, emulator) {
|
|
|
68
78
|
utils.logBullet(`You have set ${clc.bold(`${envKey}=${envVal}`)}, this command will execute against the ${emuName} running at that address.`);
|
|
69
79
|
}
|
|
70
80
|
}
|
|
71
|
-
exports.printNoticeIfEmulated = printNoticeIfEmulated;
|
|
72
81
|
async function warnEmulatorNotSupported(options, emulator) {
|
|
73
82
|
if (emulator !== types_1.Emulators.DATABASE && emulator !== types_1.Emulators.FIRESTORE) {
|
|
74
83
|
return;
|
|
@@ -85,15 +94,16 @@ async function warnEmulatorNotSupported(options, emulator) {
|
|
|
85
94
|
}
|
|
86
95
|
}
|
|
87
96
|
}
|
|
88
|
-
exports.warnEmulatorNotSupported = warnEmulatorNotSupported;
|
|
89
97
|
async function errorMissingProject(options) {
|
|
90
98
|
if (!options.project) {
|
|
91
99
|
throw new error_1.FirebaseError("Project is not defined. Either use `--project` or use `firebase use` to set your active project.");
|
|
92
100
|
}
|
|
93
101
|
}
|
|
94
|
-
exports.errorMissingProject = errorMissingProject;
|
|
95
102
|
async function beforeEmulatorCommand(options) {
|
|
96
|
-
const optionsWithDefaultConfig =
|
|
103
|
+
const optionsWithDefaultConfig = {
|
|
104
|
+
...options,
|
|
105
|
+
config: exports.DEFAULT_CONFIG,
|
|
106
|
+
};
|
|
97
107
|
const optionsWithConfig = options.config ? options : optionsWithDefaultConfig;
|
|
98
108
|
const canStartWithoutConfig = options.only &&
|
|
99
109
|
!controller.shouldStart(optionsWithConfig, types_1.Emulators.FUNCTIONS) &&
|
|
@@ -116,7 +126,6 @@ async function beforeEmulatorCommand(options) {
|
|
|
116
126
|
await (0, requireConfig_1.requireConfig)(options);
|
|
117
127
|
}
|
|
118
128
|
}
|
|
119
|
-
exports.beforeEmulatorCommand = beforeEmulatorCommand;
|
|
120
129
|
function parseInspectionPort(options) {
|
|
121
130
|
const port = options.inspectFunctions;
|
|
122
131
|
if (typeof port === "undefined") {
|
|
@@ -131,7 +140,6 @@ function parseInspectionPort(options) {
|
|
|
131
140
|
}
|
|
132
141
|
return parsed;
|
|
133
142
|
}
|
|
134
|
-
exports.parseInspectionPort = parseInspectionPort;
|
|
135
143
|
function setExportOnExitOptions(options) {
|
|
136
144
|
if (options.exportOnExit || typeof options.exportOnExit === "string") {
|
|
137
145
|
if (options.import) {
|
|
@@ -152,12 +160,10 @@ function setExportOnExitOptions(options) {
|
|
|
152
160
|
}
|
|
153
161
|
return;
|
|
154
162
|
}
|
|
155
|
-
exports.setExportOnExitOptions = setExportOnExitOptions;
|
|
156
163
|
function processKillSignal(signal, res, rej, options) {
|
|
157
164
|
let lastSignal = new Date().getTime();
|
|
158
165
|
let signalCount = 0;
|
|
159
166
|
return async () => {
|
|
160
|
-
var _a;
|
|
161
167
|
try {
|
|
162
168
|
const now = new Date().getTime();
|
|
163
169
|
const diff = now - lastSignal;
|
|
@@ -191,7 +197,7 @@ function processKillSignal(signal, res, rej, options) {
|
|
|
191
197
|
pids.push(emulatorInfo.pid);
|
|
192
198
|
emulatorsTable.push([
|
|
193
199
|
constants_1.Constants.description(emulatorInfo.name),
|
|
194
|
-
|
|
200
|
+
getListenOverview(emulatorInfo.name) ?? "unknown",
|
|
195
201
|
emulatorInfo.pid,
|
|
196
202
|
]);
|
|
197
203
|
}
|
|
@@ -222,10 +228,9 @@ function shutdownWhenKilled(options) {
|
|
|
222
228
|
throw e;
|
|
223
229
|
});
|
|
224
230
|
}
|
|
225
|
-
exports.shutdownWhenKilled = shutdownWhenKilled;
|
|
226
231
|
async function runScript(script, extraEnv) {
|
|
227
232
|
utils.logBullet(`Running script: ${clc.bold(script)}`);
|
|
228
|
-
const env =
|
|
233
|
+
const env = { ...process.env, ...extraEnv };
|
|
229
234
|
if (env.GCLOUD_PROJECT && !env.FIREBASE_CONFIG) {
|
|
230
235
|
env.FIREBASE_CONFIG = JSON.stringify({
|
|
231
236
|
projectId: env.GCLOUD_PROJECT,
|
|
@@ -268,8 +273,7 @@ async function runScript(script, extraEnv) {
|
|
|
268
273
|
});
|
|
269
274
|
}
|
|
270
275
|
function getListenOverview(emulator) {
|
|
271
|
-
|
|
272
|
-
const info = (_a = registry_1.EmulatorRegistry.get(emulator)) === null || _a === void 0 ? void 0 : _a.getInfo();
|
|
276
|
+
const info = registry_1.EmulatorRegistry.get(emulator)?.getInfo();
|
|
273
277
|
if (!info) {
|
|
274
278
|
return undefined;
|
|
275
279
|
}
|
|
@@ -280,7 +284,6 @@ function getListenOverview(emulator) {
|
|
|
280
284
|
return `${info.host}:${info.port}`;
|
|
281
285
|
}
|
|
282
286
|
}
|
|
283
|
-
exports.getListenOverview = getListenOverview;
|
|
284
287
|
async function emulatorExec(script, options) {
|
|
285
288
|
const projectId = (0, projectUtils_1.getProjectId)(options);
|
|
286
289
|
const extraEnv = {};
|
|
@@ -316,12 +319,10 @@ async function emulatorExec(script, options) {
|
|
|
316
319
|
});
|
|
317
320
|
}
|
|
318
321
|
}
|
|
319
|
-
exports.emulatorExec = emulatorExec;
|
|
320
322
|
const JAVA_VERSION_REGEX = /version "([1-9][0-9]*)/;
|
|
321
323
|
const JAVA_HINT = "Please make sure Java is installed and on your system PATH.";
|
|
322
324
|
async function checkJavaMajorVersion() {
|
|
323
325
|
return new Promise((resolve, reject) => {
|
|
324
|
-
var _a, _b;
|
|
325
326
|
let child;
|
|
326
327
|
try {
|
|
327
328
|
child = childProcess.spawn("java", ["-Duser.language=en", "-Dfile.encoding=UTF-8", "-version"], {
|
|
@@ -333,12 +334,12 @@ async function checkJavaMajorVersion() {
|
|
|
333
334
|
}
|
|
334
335
|
let output = "";
|
|
335
336
|
let error = "";
|
|
336
|
-
|
|
337
|
+
child.stdout?.on("data", (data) => {
|
|
337
338
|
const str = data.toString("utf8");
|
|
338
339
|
logger_1.logger.debug(str);
|
|
339
340
|
output += str;
|
|
340
341
|
});
|
|
341
|
-
|
|
342
|
+
child.stderr?.on("data", (data) => {
|
|
342
343
|
const str = data.toString("utf8");
|
|
343
344
|
logger_1.logger.debug(str);
|
|
344
345
|
error += str;
|
|
@@ -383,7 +384,6 @@ async function checkJavaMajorVersion() {
|
|
|
383
384
|
return versionInt;
|
|
384
385
|
});
|
|
385
386
|
}
|
|
386
|
-
exports.checkJavaMajorVersion = checkJavaMajorVersion;
|
|
387
387
|
exports.MIN_SUPPORTED_JAVA_MAJOR_VERSION = 21;
|
|
388
388
|
exports.JAVA_DEPRECATION_WARNING = "firebase-tools no longer supports Java version before 21. " +
|
|
389
389
|
"Please install a JDK at version 21 or above to get a compatible runtime.";
|