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
package/lib/functions/python.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.DEFAULT_VENV_DIR = void 0;
|
|
4
|
+
exports.virtualEnvCmd = virtualEnvCmd;
|
|
5
|
+
exports.runWithVirtualEnv = runWithVirtualEnv;
|
|
4
6
|
const path = require("path");
|
|
5
7
|
const spawn = require("cross-spawn");
|
|
6
8
|
const logger_1 = require("../logger");
|
|
@@ -14,11 +16,15 @@ function virtualEnvCmd(cwd, venvDir) {
|
|
|
14
16
|
args: [utils_1.IS_WINDOWS ? "" : venvActivate],
|
|
15
17
|
};
|
|
16
18
|
}
|
|
17
|
-
exports.virtualEnvCmd = virtualEnvCmd;
|
|
18
19
|
function runWithVirtualEnv(commandAndArgs, cwd, envs, spawnOpts = {}, venvDir = exports.DEFAULT_VENV_DIR) {
|
|
19
20
|
const { command, args } = virtualEnvCmd(cwd, venvDir);
|
|
20
21
|
args.push("&&", ...commandAndArgs);
|
|
21
22
|
logger_1.logger.debug(`Running command with virtualenv: command=${command}, args=${JSON.stringify(args)}`);
|
|
22
|
-
return spawn(command, args,
|
|
23
|
+
return spawn(command, args, {
|
|
24
|
+
shell: true,
|
|
25
|
+
cwd,
|
|
26
|
+
stdio: ["pipe", "pipe", "pipe", "pipe"],
|
|
27
|
+
...spawnOpts,
|
|
28
|
+
env: envs,
|
|
29
|
+
});
|
|
23
30
|
}
|
|
24
|
-
exports.runWithVirtualEnv = runWithVirtualEnv;
|
package/lib/functions/secrets.js
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.ensureValidKey = ensureValidKey;
|
|
4
|
+
exports.validateJsonSecret = validateJsonSecret;
|
|
5
|
+
exports.ensureSecret = ensureSecret;
|
|
6
|
+
exports.of = of;
|
|
7
|
+
exports.getSecretVersions = getSecretVersions;
|
|
8
|
+
exports.inUse = inUse;
|
|
9
|
+
exports.versionInUse = versionInUse;
|
|
10
|
+
exports.pruneSecrets = pruneSecrets;
|
|
11
|
+
exports.pruneAndDestroySecrets = pruneAndDestroySecrets;
|
|
12
|
+
exports.updateEndpointSecret = updateEndpointSecret;
|
|
13
|
+
exports.describeSecret = describeSecret;
|
|
4
14
|
const utils = require("../utils");
|
|
5
15
|
const poller = require("../operation-poller");
|
|
6
16
|
const gcfV1 = require("../gcp/cloudfunctions");
|
|
@@ -60,7 +70,6 @@ async function ensureValidKey(key, options) {
|
|
|
60
70
|
}
|
|
61
71
|
return transformedKey;
|
|
62
72
|
}
|
|
63
|
-
exports.ensureValidKey = ensureValidKey;
|
|
64
73
|
function validateJsonSecret(secretName, secretValue) {
|
|
65
74
|
try {
|
|
66
75
|
JSON.parse(secretValue);
|
|
@@ -73,7 +82,6 @@ function validateJsonSecret(secretName, secretValue) {
|
|
|
73
82
|
` cat <file.json> | firebase functions:secrets:set ${secretName} --format=json`);
|
|
74
83
|
}
|
|
75
84
|
}
|
|
76
|
-
exports.validateJsonSecret = validateJsonSecret;
|
|
77
85
|
async function ensureSecret(projectId, name, options) {
|
|
78
86
|
try {
|
|
79
87
|
const secret = await (0, secretManager_1.getSecret)(projectId, name);
|
|
@@ -103,7 +111,10 @@ async function ensureSecret(projectId, name, options) {
|
|
|
103
111
|
force: options.force,
|
|
104
112
|
});
|
|
105
113
|
if (updateLabels) {
|
|
106
|
-
return (0, secretManager_1.patchSecret)(projectId, secret.name,
|
|
114
|
+
return (0, secretManager_1.patchSecret)(projectId, secret.name, {
|
|
115
|
+
...secret.labels,
|
|
116
|
+
...(0, secretManager_3.labels)(),
|
|
117
|
+
});
|
|
107
118
|
}
|
|
108
119
|
}
|
|
109
120
|
}
|
|
@@ -116,18 +127,15 @@ async function ensureSecret(projectId, name, options) {
|
|
|
116
127
|
}
|
|
117
128
|
return await (0, secretManager_1.createSecret)(projectId, name, (0, secretManager_3.labels)());
|
|
118
129
|
}
|
|
119
|
-
exports.ensureSecret = ensureSecret;
|
|
120
130
|
function of(endpoints) {
|
|
121
131
|
return endpoints.reduce((envs, endpoint) => [...envs, ...(endpoint.secretEnvironmentVariables || [])], []);
|
|
122
132
|
}
|
|
123
|
-
exports.of = of;
|
|
124
133
|
function getSecretVersions(endpoint) {
|
|
125
134
|
return (endpoint.secretEnvironmentVariables || []).reduce((memo, { secret, version }) => {
|
|
126
135
|
memo[secret] = version || "";
|
|
127
136
|
return memo;
|
|
128
137
|
}, {});
|
|
129
138
|
}
|
|
130
|
-
exports.getSecretVersions = getSecretVersions;
|
|
131
139
|
function inUse(projectInfo, secret, endpoint) {
|
|
132
140
|
const { projectId, projectNumber } = projectInfo;
|
|
133
141
|
for (const sev of of([endpoint])) {
|
|
@@ -138,7 +146,6 @@ function inUse(projectInfo, secret, endpoint) {
|
|
|
138
146
|
}
|
|
139
147
|
return false;
|
|
140
148
|
}
|
|
141
|
-
exports.inUse = inUse;
|
|
142
149
|
function versionInUse(projectInfo, sv, endpoint) {
|
|
143
150
|
const { projectId, projectNumber } = projectInfo;
|
|
144
151
|
for (const sev of of([endpoint])) {
|
|
@@ -150,7 +157,6 @@ function versionInUse(projectInfo, sv, endpoint) {
|
|
|
150
157
|
}
|
|
151
158
|
return false;
|
|
152
159
|
}
|
|
153
|
-
exports.versionInUse = versionInUse;
|
|
154
160
|
async function pruneSecrets(projectInfo, endpoints) {
|
|
155
161
|
const { projectId, projectNumber } = projectInfo;
|
|
156
162
|
const pruneKey = (name, version) => `${name}@${version}`;
|
|
@@ -169,7 +175,7 @@ async function pruneSecrets(projectInfo, endpoints) {
|
|
|
169
175
|
}
|
|
170
176
|
if (secret.projectId === projectId || secret.projectId === projectNumber) {
|
|
171
177
|
if (secret.version) {
|
|
172
|
-
secrets.push(
|
|
178
|
+
secrets.push({ ...secret, version: secret.version });
|
|
173
179
|
}
|
|
174
180
|
}
|
|
175
181
|
}
|
|
@@ -190,7 +196,6 @@ async function pruneSecrets(projectInfo, endpoints) {
|
|
|
190
196
|
.map((key) => key.split("@"))
|
|
191
197
|
.map(([secret, version]) => ({ projectId, version, secret, key: secret }));
|
|
192
198
|
}
|
|
193
|
-
exports.pruneSecrets = pruneSecrets;
|
|
194
199
|
async function pruneAndDestroySecrets(projectInfo, endpoints) {
|
|
195
200
|
const { projectId, projectNumber } = projectInfo;
|
|
196
201
|
logger_1.logger.debug("Pruning secrets to find unused secret versions...");
|
|
@@ -216,7 +221,6 @@ async function pruneAndDestroySecrets(projectInfo, endpoints) {
|
|
|
216
221
|
}
|
|
217
222
|
return { destroyed, erred };
|
|
218
223
|
}
|
|
219
|
-
exports.pruneAndDestroySecrets = pruneAndDestroySecrets;
|
|
220
224
|
async function updateEndpointSecret(projectInfo, secretVersion, endpoint) {
|
|
221
225
|
const { projectId, projectNumber } = projectInfo;
|
|
222
226
|
if (!inUse(projectInfo, secretVersion.secret, endpoint)) {
|
|
@@ -224,7 +228,7 @@ async function updateEndpointSecret(projectInfo, secretVersion, endpoint) {
|
|
|
224
228
|
}
|
|
225
229
|
const updatedSevs = [];
|
|
226
230
|
for (const sev of of([endpoint])) {
|
|
227
|
-
const updatedSev =
|
|
231
|
+
const updatedSev = { ...sev };
|
|
228
232
|
if ((updatedSev.projectId === projectId || updatedSev.projectId === projectNumber) &&
|
|
229
233
|
updatedSev.secret === secretVersion.secret.name) {
|
|
230
234
|
updatedSev.version = secretVersion.versionId;
|
|
@@ -239,13 +243,25 @@ async function updateEndpointSecret(projectInfo, secretVersion, endpoint) {
|
|
|
239
243
|
entryPoint: fn.entryPoint,
|
|
240
244
|
secretEnvironmentVariables: updatedSevs,
|
|
241
245
|
});
|
|
242
|
-
const cfn = await poller.pollOperation(
|
|
246
|
+
const cfn = await poller.pollOperation({
|
|
247
|
+
...gcfV1PollerOptions,
|
|
248
|
+
operationResourceName: op.name,
|
|
249
|
+
});
|
|
243
250
|
return gcfV1.endpointFromFunction(cfn);
|
|
244
251
|
}
|
|
245
252
|
else if (endpoint.platform === "gcfv2") {
|
|
246
253
|
const fn = gcfV2.functionFromEndpoint(endpoint);
|
|
247
|
-
const op = await gcfV2.updateFunction(
|
|
248
|
-
|
|
254
|
+
const op = await gcfV2.updateFunction({
|
|
255
|
+
...fn,
|
|
256
|
+
serviceConfig: {
|
|
257
|
+
...fn.serviceConfig,
|
|
258
|
+
secretEnvironmentVariables: updatedSevs,
|
|
259
|
+
},
|
|
260
|
+
});
|
|
261
|
+
const cfn = await poller.pollOperation({
|
|
262
|
+
...gcfV2PollerOptions,
|
|
263
|
+
operationResourceName: op.name,
|
|
264
|
+
});
|
|
249
265
|
return gcfV2.endpointFromFunction(cfn);
|
|
250
266
|
}
|
|
251
267
|
else if (endpoint.platform === "run") {
|
|
@@ -255,7 +271,6 @@ async function updateEndpointSecret(projectInfo, secretVersion, endpoint) {
|
|
|
255
271
|
(0, functional_1.assertExhaustive)(endpoint.platform);
|
|
256
272
|
}
|
|
257
273
|
}
|
|
258
|
-
exports.updateEndpointSecret = updateEndpointSecret;
|
|
259
274
|
async function describeSecret(key, options) {
|
|
260
275
|
const projectId = (0, projectUtils_1.needProjectId)(options);
|
|
261
276
|
const versions = await (0, secretManager_1.listSecretVersions)(projectId, key);
|
|
@@ -269,4 +284,3 @@ async function describeSecret(key, options) {
|
|
|
269
284
|
logger_1.logger.info(table.toString());
|
|
270
285
|
return { secrets: versions };
|
|
271
286
|
}
|
|
272
|
-
exports.describeSecret = describeSecret;
|
package/lib/functionsConfig.js
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.RESERVED_NAMESPACES = void 0;
|
|
4
|
+
exports.getFunctionsConfigDeprecationMessage = getFunctionsConfigDeprecationMessage;
|
|
5
|
+
exports.logFunctionsConfigDeprecationWarning = logFunctionsConfigDeprecationWarning;
|
|
6
|
+
exports.ensureLegacyRuntimeConfigCommandsEnabled = ensureLegacyRuntimeConfigCommandsEnabled;
|
|
7
|
+
exports.ensureApi = ensureApi;
|
|
8
|
+
exports.varNameToIds = varNameToIds;
|
|
9
|
+
exports.idsToVarName = idsToVarName;
|
|
10
|
+
exports.getAppEngineLocation = getAppEngineLocation;
|
|
11
|
+
exports.getFirebaseConfig = getFirebaseConfig;
|
|
12
|
+
exports.setVariablesRecursive = setVariablesRecursive;
|
|
13
|
+
exports.materializeConfig = materializeConfig;
|
|
14
|
+
exports.materializeAll = materializeAll;
|
|
15
|
+
exports.parseSetArgs = parseSetArgs;
|
|
16
|
+
exports.parseUnsetArgs = parseUnsetArgs;
|
|
4
17
|
const _ = require("lodash");
|
|
5
18
|
const clc = require("colorette");
|
|
6
19
|
const api_1 = require("./api");
|
|
@@ -37,18 +50,15 @@ To run this legacy command temporarily, run the following command and try again:
|
|
|
37
50
|
function getFunctionsConfigDeprecationMessage() {
|
|
38
51
|
return FUNCTIONS_CONFIG_DEPRECATION_MESSAGE;
|
|
39
52
|
}
|
|
40
|
-
exports.getFunctionsConfigDeprecationMessage = getFunctionsConfigDeprecationMessage;
|
|
41
53
|
function logFunctionsConfigDeprecationWarning() {
|
|
42
54
|
(0, utils_1.logWarningToStderr)(FUNCTIONS_CONFIG_DEPRECATION_MESSAGE);
|
|
43
55
|
}
|
|
44
|
-
exports.logFunctionsConfigDeprecationWarning = logFunctionsConfigDeprecationWarning;
|
|
45
56
|
function ensureLegacyRuntimeConfigCommandsEnabled() {
|
|
46
57
|
if (experiments.isEnabled(LEGACY_RUNTIME_CONFIG_EXPERIMENT)) {
|
|
47
58
|
return;
|
|
48
59
|
}
|
|
49
60
|
throw new error_1.FirebaseError(LEGACY_GUIDANCE_MESSAGE, { exit: 1 });
|
|
50
61
|
}
|
|
51
|
-
exports.ensureLegacyRuntimeConfigCommandsEnabled = ensureLegacyRuntimeConfigCommandsEnabled;
|
|
52
62
|
function keyToIds(key) {
|
|
53
63
|
const keyParts = key.split(".");
|
|
54
64
|
const variable = keyParts.slice(1).join("/");
|
|
@@ -73,18 +83,15 @@ async function ensureApi(options) {
|
|
|
73
83
|
const projectId = (0, projectUtils_1.needProjectId)(options);
|
|
74
84
|
return (0, ensureApiEnabled_1.ensure)(projectId, "runtimeconfig.googleapis.com", "runtimeconfig", true);
|
|
75
85
|
}
|
|
76
|
-
exports.ensureApi = ensureApi;
|
|
77
86
|
function varNameToIds(varName) {
|
|
78
87
|
return {
|
|
79
88
|
config: varName.match(new RegExp("/configs/(.+)/variables/"))[1],
|
|
80
89
|
variable: varName.match(new RegExp("/variables/(.+)"))[1],
|
|
81
90
|
};
|
|
82
91
|
}
|
|
83
|
-
exports.varNameToIds = varNameToIds;
|
|
84
92
|
function idsToVarName(projectId, configId, varId) {
|
|
85
93
|
return ["projects", projectId, "configs", configId, "variables", varId].join("/");
|
|
86
94
|
}
|
|
87
|
-
exports.idsToVarName = idsToVarName;
|
|
88
95
|
function getAppEngineLocation(config) {
|
|
89
96
|
let appEngineLocation = config.locationId;
|
|
90
97
|
if (appEngineLocation && appEngineLocation.match(/[^\d]$/)) {
|
|
@@ -92,13 +99,11 @@ function getAppEngineLocation(config) {
|
|
|
92
99
|
}
|
|
93
100
|
return appEngineLocation || "us-central1";
|
|
94
101
|
}
|
|
95
|
-
exports.getAppEngineLocation = getAppEngineLocation;
|
|
96
102
|
async function getFirebaseConfig(options) {
|
|
97
103
|
const projectId = (0, projectUtils_1.needProjectId)(options);
|
|
98
104
|
const response = await apiClient.get(`/v1beta1/projects/${projectId}/adminSdkConfig`);
|
|
99
105
|
return response.body;
|
|
100
106
|
}
|
|
101
|
-
exports.getFirebaseConfig = getFirebaseConfig;
|
|
102
107
|
async function setVariablesRecursive(projectId, configId, varPath, val) {
|
|
103
108
|
let parsed = val;
|
|
104
109
|
if (typeof val === "string") {
|
|
@@ -116,7 +121,6 @@ async function setVariablesRecursive(projectId, configId, varPath, val) {
|
|
|
116
121
|
}
|
|
117
122
|
return setVariable(projectId, configId, varPath, val);
|
|
118
123
|
}
|
|
119
|
-
exports.setVariablesRecursive = setVariablesRecursive;
|
|
120
124
|
async function materializeConfig(configName, output) {
|
|
121
125
|
const materializeVariable = async function (varName) {
|
|
122
126
|
const variable = await runtimeconfig.variables.get(varName);
|
|
@@ -133,7 +137,6 @@ async function materializeConfig(configName, output) {
|
|
|
133
137
|
await traverseVariables(variables);
|
|
134
138
|
return output;
|
|
135
139
|
}
|
|
136
|
-
exports.materializeConfig = materializeConfig;
|
|
137
140
|
async function materializeAll(projectId) {
|
|
138
141
|
const output = {};
|
|
139
142
|
const configs = await runtimeconfig.configs.list(projectId);
|
|
@@ -148,7 +151,6 @@ async function materializeAll(projectId) {
|
|
|
148
151
|
}));
|
|
149
152
|
return output;
|
|
150
153
|
}
|
|
151
|
-
exports.materializeAll = materializeAll;
|
|
152
154
|
function parseSetArgs(args) {
|
|
153
155
|
const parsed = [];
|
|
154
156
|
for (const arg of args) {
|
|
@@ -173,7 +175,6 @@ function parseSetArgs(args) {
|
|
|
173
175
|
}
|
|
174
176
|
return parsed;
|
|
175
177
|
}
|
|
176
|
-
exports.parseSetArgs = parseSetArgs;
|
|
177
178
|
function parseUnsetArgs(args) {
|
|
178
179
|
const parsed = [];
|
|
179
180
|
let splitArgs = [];
|
|
@@ -192,4 +193,3 @@ function parseUnsetArgs(args) {
|
|
|
192
193
|
}
|
|
193
194
|
return parsed;
|
|
194
195
|
}
|
|
195
|
-
exports.parseUnsetArgs = parseUnsetArgs;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.functionsConfigClone =
|
|
3
|
+
exports.functionsConfigClone = functionsConfigClone;
|
|
4
4
|
const _ = require("lodash");
|
|
5
5
|
const clc = require("colorette");
|
|
6
6
|
const error_1 = require("./error");
|
|
@@ -65,4 +65,3 @@ async function functionsConfigClone(fromProject, toProject, only, except = []) {
|
|
|
65
65
|
}));
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
|
-
exports.functionsConfigClone = functionsConfigClone;
|
|
@@ -19,7 +19,6 @@ const localFunction_2 = require("./localFunction");
|
|
|
19
19
|
const projectUtils_1 = require("./projectUtils");
|
|
20
20
|
const serveFunctions = new functions_1.FunctionsServer();
|
|
21
21
|
const actionFunction = async (options) => {
|
|
22
|
-
var _a, _b, _c, _d, _e, _f;
|
|
23
22
|
if (typeof options.port === "string") {
|
|
24
23
|
options.port = parseInt(options.port, 10);
|
|
25
24
|
}
|
|
@@ -46,8 +45,8 @@ const actionFunction = async (options) => {
|
|
|
46
45
|
utils.logLabeledWarning("functions", `You are already running the Cloud Functions emulator on port ${functionsInfo.port}. Running the emulator and the Functions shell simultaenously can result in unexpected behavior.`);
|
|
47
46
|
}
|
|
48
47
|
else if (!options.port) {
|
|
49
|
-
port =
|
|
50
|
-
host =
|
|
48
|
+
port = options.config.src.emulators?.functions?.port ?? port;
|
|
49
|
+
host = options.config.src.emulators?.functions?.host ?? host;
|
|
51
50
|
options.host = host;
|
|
52
51
|
}
|
|
53
52
|
const listen = (await (0, portUtils_1.resolveHostAndAssignPorts)({
|
package/lib/gcp/apphosting.js
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.client = exports.API_VERSION = void 0;
|
|
4
|
+
exports.serviceAgentEmail = serviceAgentEmail;
|
|
5
|
+
exports.parseBackendName = parseBackendName;
|
|
6
|
+
exports.createBackend = createBackend;
|
|
7
|
+
exports.getBackend = getBackend;
|
|
8
|
+
exports.getTraffic = getTraffic;
|
|
9
|
+
exports.listDomains = listDomains;
|
|
10
|
+
exports.listBackends = listBackends;
|
|
11
|
+
exports.deleteBackend = deleteBackend;
|
|
12
|
+
exports.getBuild = getBuild;
|
|
13
|
+
exports.listBuilds = listBuilds;
|
|
14
|
+
exports.createBuild = createBuild;
|
|
15
|
+
exports.createRollout = createRollout;
|
|
16
|
+
exports.listRollouts = listRollouts;
|
|
17
|
+
exports.updateTraffic = updateTraffic;
|
|
18
|
+
exports.listLocations = listLocations;
|
|
19
|
+
exports.ensureApiEnabled = ensureApiEnabled;
|
|
20
|
+
exports.getNextRolloutId = getNextRolloutId;
|
|
4
21
|
const proto = require("../gcp/proto");
|
|
5
22
|
const apiv2_1 = require("../apiv2");
|
|
6
23
|
const projectUtils_1 = require("../projectUtils");
|
|
@@ -23,37 +40,36 @@ const P4SA_DOMAIN = (0, api_1.apphostingP4SADomain)();
|
|
|
23
40
|
function serviceAgentEmail(projectNumber) {
|
|
24
41
|
return `service-${projectNumber}@${P4SA_DOMAIN}`;
|
|
25
42
|
}
|
|
26
|
-
exports.serviceAgentEmail = serviceAgentEmail;
|
|
27
43
|
function parseBackendName(backendName) {
|
|
28
44
|
const [, projectName, , location, , id] = backendName.split("/");
|
|
29
45
|
return { projectName, location, id };
|
|
30
46
|
}
|
|
31
|
-
exports.parseBackendName = parseBackendName;
|
|
32
47
|
async function createBackend(projectId, location, backendReqBoby, backendId) {
|
|
33
|
-
const res = await exports.client.post(`projects/${projectId}/locations/${location}/backends`,
|
|
48
|
+
const res = await exports.client.post(`projects/${projectId}/locations/${location}/backends`, {
|
|
49
|
+
...backendReqBoby,
|
|
50
|
+
labels: {
|
|
51
|
+
...backendReqBoby.labels,
|
|
52
|
+
...deploymentTool.labels(),
|
|
53
|
+
},
|
|
54
|
+
}, { queryParams: { backendId } });
|
|
34
55
|
return res.body;
|
|
35
56
|
}
|
|
36
|
-
exports.createBackend = createBackend;
|
|
37
57
|
async function getBackend(projectId, location, backendId) {
|
|
38
58
|
const name = `projects/${projectId}/locations/${location}/backends/${backendId}`;
|
|
39
59
|
const res = await exports.client.get(name);
|
|
40
60
|
return res.body;
|
|
41
61
|
}
|
|
42
|
-
exports.getBackend = getBackend;
|
|
43
62
|
async function getTraffic(projectId, location, backendId) {
|
|
44
63
|
const name = `projects/${projectId}/locations/${location}/backends/${backendId}/traffic`;
|
|
45
64
|
const res = await exports.client.get(name);
|
|
46
65
|
return res.body;
|
|
47
66
|
}
|
|
48
|
-
exports.getTraffic = getTraffic;
|
|
49
67
|
async function listDomains(projectId, location, backendId) {
|
|
50
68
|
const name = `projects/${projectId}/locations/${location}/backends/${backendId}/domains`;
|
|
51
69
|
const res = await exports.client.get(name, { queryParams: { pageSize: 100 } });
|
|
52
70
|
return Array.isArray(res.body.domains) ? res.body.domains : [];
|
|
53
71
|
}
|
|
54
|
-
exports.listDomains = listDomains;
|
|
55
72
|
async function listBackends(projectId, location) {
|
|
56
|
-
var _a;
|
|
57
73
|
const name = `projects/${projectId}/locations/${location}/backends`;
|
|
58
74
|
let pageToken;
|
|
59
75
|
const res = {
|
|
@@ -64,27 +80,23 @@ async function listBackends(projectId, location) {
|
|
|
64
80
|
const queryParams = pageToken ? { pageToken } : {};
|
|
65
81
|
const int = await exports.client.get(name, { queryParams });
|
|
66
82
|
res.backends.push(...(int.body.backends || []));
|
|
67
|
-
|
|
83
|
+
res.unreachable?.push(...(int.body.unreachable || []));
|
|
68
84
|
pageToken = int.body.nextPageToken;
|
|
69
85
|
} while (pageToken);
|
|
70
86
|
res.unreachable = [...new Set(res.unreachable)];
|
|
71
87
|
return res;
|
|
72
88
|
}
|
|
73
|
-
exports.listBackends = listBackends;
|
|
74
89
|
async function deleteBackend(projectId, location, backendId) {
|
|
75
90
|
const name = `projects/${projectId}/locations/${location}/backends/${backendId}`;
|
|
76
91
|
const res = await exports.client.delete(name, { queryParams: { force: "true" } });
|
|
77
92
|
return res.body;
|
|
78
93
|
}
|
|
79
|
-
exports.deleteBackend = deleteBackend;
|
|
80
94
|
async function getBuild(projectId, location, backendId, buildId) {
|
|
81
95
|
const name = `projects/${projectId}/locations/${location}/backends/${backendId}/builds/${buildId}`;
|
|
82
96
|
const res = await exports.client.get(name);
|
|
83
97
|
return res.body;
|
|
84
98
|
}
|
|
85
|
-
exports.getBuild = getBuild;
|
|
86
99
|
async function listBuilds(projectId, location, backendId) {
|
|
87
|
-
var _a;
|
|
88
100
|
const name = `projects/${projectId}/locations/${location}/backends/${backendId}/builds`;
|
|
89
101
|
let pageToken;
|
|
90
102
|
const res = {
|
|
@@ -95,23 +107,32 @@ async function listBuilds(projectId, location, backendId) {
|
|
|
95
107
|
const queryParams = pageToken ? { pageToken } : {};
|
|
96
108
|
const int = await exports.client.get(name, { queryParams });
|
|
97
109
|
res.builds.push(...(int.body.builds || []));
|
|
98
|
-
|
|
110
|
+
res.unreachable?.push(...(int.body.unreachable || []));
|
|
99
111
|
pageToken = int.body.nextPageToken;
|
|
100
112
|
} while (pageToken);
|
|
101
113
|
res.unreachable = [...new Set(res.unreachable)];
|
|
102
114
|
return res;
|
|
103
115
|
}
|
|
104
|
-
exports.listBuilds = listBuilds;
|
|
105
116
|
async function createBuild(projectId, location, backendId, buildId, buildInput) {
|
|
106
|
-
const res = await exports.client.post(`projects/${projectId}/locations/${location}/backends/${backendId}/builds`,
|
|
117
|
+
const res = await exports.client.post(`projects/${projectId}/locations/${location}/backends/${backendId}/builds`, {
|
|
118
|
+
...buildInput,
|
|
119
|
+
labels: {
|
|
120
|
+
...buildInput.labels,
|
|
121
|
+
...deploymentTool.labels(),
|
|
122
|
+
},
|
|
123
|
+
}, { queryParams: { buildId } });
|
|
107
124
|
return res.body;
|
|
108
125
|
}
|
|
109
|
-
exports.createBuild = createBuild;
|
|
110
126
|
async function createRollout(projectId, location, backendId, rolloutId, rollout, validateOnly = false) {
|
|
111
|
-
const res = await exports.client.post(`projects/${projectId}/locations/${location}/backends/${backendId}/rollouts`,
|
|
127
|
+
const res = await exports.client.post(`projects/${projectId}/locations/${location}/backends/${backendId}/rollouts`, {
|
|
128
|
+
...rollout,
|
|
129
|
+
labels: {
|
|
130
|
+
...rollout.labels,
|
|
131
|
+
...deploymentTool.labels(),
|
|
132
|
+
},
|
|
133
|
+
}, { queryParams: { rolloutId, validateOnly: validateOnly ? "true" : "false" } });
|
|
112
134
|
return res.body;
|
|
113
135
|
}
|
|
114
|
-
exports.createRollout = createRollout;
|
|
115
136
|
async function listRollouts(projectId, location, backendId) {
|
|
116
137
|
const name = `projects/${projectId}/locations/${location}/backends/${backendId}/rollouts`;
|
|
117
138
|
let pageToken = undefined;
|
|
@@ -129,19 +150,17 @@ async function listRollouts(projectId, location, backendId) {
|
|
|
129
150
|
res.unreachable = [...new Set(res.unreachable)];
|
|
130
151
|
return res;
|
|
131
152
|
}
|
|
132
|
-
exports.listRollouts = listRollouts;
|
|
133
153
|
async function updateTraffic(projectId, location, backendId, traffic) {
|
|
134
154
|
const fieldMasks = proto.fieldMasks(traffic, "rolloutPolicy");
|
|
135
155
|
const queryParams = {
|
|
136
156
|
updateMask: fieldMasks.join(","),
|
|
137
157
|
};
|
|
138
158
|
const name = `projects/${projectId}/locations/${location}/backends/${backendId}/traffic`;
|
|
139
|
-
const res = await exports.client.patch(name,
|
|
159
|
+
const res = await exports.client.patch(name, { ...traffic, name }, {
|
|
140
160
|
queryParams,
|
|
141
161
|
});
|
|
142
162
|
return res.body;
|
|
143
163
|
}
|
|
144
|
-
exports.updateTraffic = updateTraffic;
|
|
145
164
|
async function listLocations(projectId) {
|
|
146
165
|
let pageToken = undefined;
|
|
147
166
|
let locations = [];
|
|
@@ -157,14 +176,11 @@ async function listLocations(projectId) {
|
|
|
157
176
|
} while (pageToken);
|
|
158
177
|
return locations;
|
|
159
178
|
}
|
|
160
|
-
exports.listLocations = listLocations;
|
|
161
179
|
async function ensureApiEnabled(options) {
|
|
162
180
|
const projectId = (0, projectUtils_1.needProjectId)(options);
|
|
163
181
|
return await (0, ensureApiEnabled_1.ensure)(projectId, (0, api_1.apphostingOrigin)(), "app hosting", true);
|
|
164
182
|
}
|
|
165
|
-
exports.ensureApiEnabled = ensureApiEnabled;
|
|
166
183
|
async function getNextRolloutId(projectId, location, backendId, counter) {
|
|
167
|
-
var _a, _b;
|
|
168
184
|
const date = new Date();
|
|
169
185
|
const year = date.getUTCFullYear();
|
|
170
186
|
const month = String(date.getUTCMonth() + 1).padStart(2, "0");
|
|
@@ -175,7 +191,7 @@ async function getNextRolloutId(projectId, location, backendId, counter) {
|
|
|
175
191
|
const rolloutsPromise = exports.listRollouts(projectId, location, backendId);
|
|
176
192
|
const buildsPromise = exports.listBuilds(projectId, location, backendId);
|
|
177
193
|
const [rollouts, builds] = await Promise.all([rolloutsPromise, buildsPromise]);
|
|
178
|
-
if (
|
|
194
|
+
if (builds.unreachable?.includes(location) || rollouts.unreachable?.includes(location)) {
|
|
179
195
|
throw new error_1.FirebaseError(`Firebase App Hosting is currently unreachable in location ${location}`);
|
|
180
196
|
}
|
|
181
197
|
const test = new RegExp(`projects/${projectId}/locations/${location}/backends/${backendId}/(rollouts|builds)/build-${year}-${month}-${day}-(\\d+)`);
|
|
@@ -196,4 +212,3 @@ async function getNextRolloutId(projectId, location, backendId, counter) {
|
|
|
196
212
|
const highest = Math.max(highestId(builds.builds), highestId(rollouts.rollouts));
|
|
197
213
|
return `build-${year}-${month}-${day}-${String(highest + 1).padStart(3, "0")}`;
|
|
198
214
|
}
|
|
199
|
-
exports.getNextRolloutId = getNextRolloutId;
|
package/lib/gcp/apptesting.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.client = exports.API_VERSION = void 0;
|
|
4
|
+
exports.testEnvironmentCatalog = testEnvironmentCatalog;
|
|
4
5
|
const apiv2_1 = require("../apiv2");
|
|
5
6
|
const api_1 = require("../api");
|
|
6
7
|
exports.API_VERSION = "v1";
|
|
@@ -15,4 +16,3 @@ async function testEnvironmentCatalog(projectId, environmentType) {
|
|
|
15
16
|
const res = await exports.client.get(name, { queryParams });
|
|
16
17
|
return res.body;
|
|
17
18
|
}
|
|
18
|
-
exports.testEnvironmentCatalog = testEnvironmentCatalog;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.API_VERSION = void 0;
|
|
4
|
+
exports.ensureApiEnabled = ensureApiEnabled;
|
|
5
|
+
exports.deletePackage = deletePackage;
|
|
6
|
+
exports.getRepository = getRepository;
|
|
7
|
+
exports.updateRepository = updateRepository;
|
|
4
8
|
const apiv2_1 = require("../apiv2");
|
|
5
9
|
const api_1 = require("../api");
|
|
6
10
|
const metaprogramming_1 = require("../metaprogramming");
|
|
@@ -15,18 +19,15 @@ const client = new apiv2_1.Client({
|
|
|
15
19
|
function ensureApiEnabled(projectId) {
|
|
16
20
|
return api.ensure(projectId, (0, api_1.artifactRegistryDomain)(), "artifactregistry", true);
|
|
17
21
|
}
|
|
18
|
-
exports.ensureApiEnabled = ensureApiEnabled;
|
|
19
22
|
(0, metaprogramming_1.assertImplements)();
|
|
20
23
|
async function deletePackage(name) {
|
|
21
24
|
const res = await client.delete(name);
|
|
22
25
|
return res.body;
|
|
23
26
|
}
|
|
24
|
-
exports.deletePackage = deletePackage;
|
|
25
27
|
async function getRepository(repoPath) {
|
|
26
28
|
const res = await client.get(repoPath);
|
|
27
29
|
return res.body;
|
|
28
30
|
}
|
|
29
|
-
exports.getRepository = getRepository;
|
|
30
31
|
async function updateRepository(repo) {
|
|
31
32
|
const updateMask = proto.fieldMasks(repo, "cleanupPolicies", "cleanupPolicyDryRun", "labels");
|
|
32
33
|
if (updateMask.length === 0) {
|
|
@@ -38,4 +39,3 @@ async function updateRepository(repo) {
|
|
|
38
39
|
});
|
|
39
40
|
return res.body;
|
|
40
41
|
}
|
|
41
|
-
exports.updateRepository = updateRepository;
|
package/lib/gcp/auth.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getAuthDomains = getAuthDomains;
|
|
4
|
+
exports.updateAuthDomains = updateAuthDomains;
|
|
5
|
+
exports.findUser = findUser;
|
|
6
|
+
exports.listUsers = listUsers;
|
|
7
|
+
exports.toggleUserEnablement = toggleUserEnablement;
|
|
8
|
+
exports.setCustomClaim = setCustomClaim;
|
|
9
|
+
exports.setAllowSmsRegionPolicy = setAllowSmsRegionPolicy;
|
|
10
|
+
exports.setDenySmsRegionPolicy = setDenySmsRegionPolicy;
|
|
4
11
|
const apiv2_1 = require("../apiv2");
|
|
5
12
|
const api_1 = require("../api");
|
|
6
13
|
const apiClient = new apiv2_1.Client({ urlPrefix: (0, api_1.identityOrigin)(), auth: true });
|
|
@@ -8,7 +15,6 @@ async function getAuthDomains(project) {
|
|
|
8
15
|
const res = await apiClient.get(`/admin/v2/projects/${project}/config`, { headers: { "x-goog-user-project": project } });
|
|
9
16
|
return res.body.authorizedDomains;
|
|
10
17
|
}
|
|
11
|
-
exports.getAuthDomains = getAuthDomains;
|
|
12
18
|
async function updateAuthDomains(project, authDomains) {
|
|
13
19
|
const res = await apiClient.patch(`/admin/v2/projects/${project}/config`, { authorizedDomains: authDomains }, {
|
|
14
20
|
queryParams: { update_mask: "authorizedDomains" },
|
|
@@ -16,9 +22,7 @@ async function updateAuthDomains(project, authDomains) {
|
|
|
16
22
|
});
|
|
17
23
|
return res.body.authorizedDomains;
|
|
18
24
|
}
|
|
19
|
-
exports.updateAuthDomains = updateAuthDomains;
|
|
20
25
|
async function findUser(project, email, phone, uid) {
|
|
21
|
-
var _a;
|
|
22
26
|
const expression = {
|
|
23
27
|
email,
|
|
24
28
|
phoneNumber: phone,
|
|
@@ -28,7 +32,7 @@ async function findUser(project, email, phone, uid) {
|
|
|
28
32
|
expression: [expression],
|
|
29
33
|
limit: "1",
|
|
30
34
|
});
|
|
31
|
-
if (!
|
|
35
|
+
if (!res.body.userInfo?.length) {
|
|
32
36
|
throw new Error("No users found");
|
|
33
37
|
}
|
|
34
38
|
const modifiedUserInfo = res.body.userInfo.map((ui) => {
|
|
@@ -38,7 +42,6 @@ async function findUser(project, email, phone, uid) {
|
|
|
38
42
|
});
|
|
39
43
|
return modifiedUserInfo[0];
|
|
40
44
|
}
|
|
41
|
-
exports.findUser = findUser;
|
|
42
45
|
async function listUsers(project, limit) {
|
|
43
46
|
let queryLimit = limit;
|
|
44
47
|
let offset = 0;
|
|
@@ -67,7 +70,6 @@ async function listUsers(project, limit) {
|
|
|
67
70
|
}
|
|
68
71
|
return userInfo;
|
|
69
72
|
}
|
|
70
|
-
exports.listUsers = listUsers;
|
|
71
73
|
async function toggleUserEnablement(project, uid, disabled) {
|
|
72
74
|
const res = await apiClient.post("/v1/accounts:update", {
|
|
73
75
|
disableUser: disabled,
|
|
@@ -76,19 +78,18 @@ async function toggleUserEnablement(project, uid, disabled) {
|
|
|
76
78
|
});
|
|
77
79
|
return res.status === 200;
|
|
78
80
|
}
|
|
79
|
-
exports.toggleUserEnablement = toggleUserEnablement;
|
|
80
81
|
async function setCustomClaim(project, uid, claim, options) {
|
|
81
82
|
let user = await findUser(project, undefined, undefined, uid);
|
|
82
83
|
if (user.uid !== uid) {
|
|
83
84
|
throw new Error(`Could not find ${uid} in the auth db, please check the uid again.`);
|
|
84
85
|
}
|
|
85
86
|
let reqClaim = JSON.stringify(claim);
|
|
86
|
-
if (options
|
|
87
|
+
if (options?.merge) {
|
|
87
88
|
let attributeJson = new Map();
|
|
88
89
|
if (user.customAttributes !== undefined && user.customAttributes !== "") {
|
|
89
90
|
attributeJson = JSON.parse(user.customAttributes);
|
|
90
91
|
}
|
|
91
|
-
reqClaim = JSON.stringify(
|
|
92
|
+
reqClaim = JSON.stringify({ ...attributeJson, ...claim });
|
|
92
93
|
}
|
|
93
94
|
const res = await apiClient.post("/v1/accounts:update", {
|
|
94
95
|
customAttributes: reqClaim,
|
|
@@ -101,7 +102,6 @@ async function setCustomClaim(project, uid, claim, options) {
|
|
|
101
102
|
user = await findUser(project, undefined, undefined, uid);
|
|
102
103
|
return user;
|
|
103
104
|
}
|
|
104
|
-
exports.setCustomClaim = setCustomClaim;
|
|
105
105
|
async function setAllowSmsRegionPolicy(project, countryCodes) {
|
|
106
106
|
const res = await apiClient.patch(`/admin/v2/projects/${project}/config?updateMask=sms_region_config`, {
|
|
107
107
|
sms_region_config: {
|
|
@@ -115,7 +115,6 @@ async function setAllowSmsRegionPolicy(project, countryCodes) {
|
|
|
115
115
|
}
|
|
116
116
|
return true;
|
|
117
117
|
}
|
|
118
|
-
exports.setAllowSmsRegionPolicy = setAllowSmsRegionPolicy;
|
|
119
118
|
async function setDenySmsRegionPolicy(project, countryCodes) {
|
|
120
119
|
const res = await apiClient.patch(`/admin/v2/projects/${project}/config?updateMask=sms_region_config`, {
|
|
121
120
|
sms_region_config: {
|
|
@@ -129,4 +128,3 @@ async function setDenySmsRegionPolicy(project, countryCodes) {
|
|
|
129
128
|
}
|
|
130
129
|
return true;
|
|
131
130
|
}
|
|
132
|
-
exports.setDenySmsRegionPolicy = setDenySmsRegionPolicy;
|