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,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.defaultServiceAccount = defaultServiceAccount;
|
|
4
|
+
exports.cloudBuildEnabled = cloudBuildEnabled;
|
|
5
|
+
exports.secretAccess = secretAccess;
|
|
4
6
|
const clc = require("colorette");
|
|
5
7
|
const ensureApiEnabled_1 = require("../../ensureApiEnabled");
|
|
6
8
|
const error_1 = require("../../error");
|
|
@@ -28,7 +30,6 @@ async function defaultServiceAccount(e) {
|
|
|
28
30
|
}
|
|
29
31
|
(0, functional_1.assertExhaustive)(e.platform);
|
|
30
32
|
}
|
|
31
|
-
exports.defaultServiceAccount = defaultServiceAccount;
|
|
32
33
|
function nodeBillingError(projectId) {
|
|
33
34
|
return new error_1.FirebaseError(`Cloud Functions deployment requires the pay-as-you-go (Blaze) billing plan. To upgrade your project, visit the following URL:
|
|
34
35
|
|
|
@@ -50,8 +51,7 @@ ${FAQ_URL}
|
|
|
50
51
|
`);
|
|
51
52
|
}
|
|
52
53
|
function isPermissionError(e) {
|
|
53
|
-
|
|
54
|
-
return ((_c = (_b = (_a = e.context) === null || _a === void 0 ? void 0 : _a.body) === null || _b === void 0 ? void 0 : _b.error) === null || _c === void 0 ? void 0 : _c.status) === "PERMISSION_DENIED";
|
|
54
|
+
return e.context?.body?.error?.status === "PERMISSION_DENIED";
|
|
55
55
|
}
|
|
56
56
|
async function cloudBuildEnabled(projectId) {
|
|
57
57
|
try {
|
|
@@ -67,7 +67,6 @@ async function cloudBuildEnabled(projectId) {
|
|
|
67
67
|
throw e;
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
exports.cloudBuildEnabled = cloudBuildEnabled;
|
|
71
70
|
async function secretsToServiceAccounts(b) {
|
|
72
71
|
const secretsToSa = {};
|
|
73
72
|
for (const e of backend.allEndpoints(b)) {
|
|
@@ -81,7 +80,6 @@ async function secretsToServiceAccounts(b) {
|
|
|
81
80
|
return secretsToSa;
|
|
82
81
|
}
|
|
83
82
|
async function secretAccess(projectId, wantBackend, haveBackend, dryRun) {
|
|
84
|
-
var _a, _b;
|
|
85
83
|
const ensureAccess = async (secret, serviceAccounts) => {
|
|
86
84
|
(0, utils_1.logLabeledBullet)("functions", `ensuring ${clc.bold(serviceAccounts.join(", "))} access to secret ${clc.bold(secret)}.`);
|
|
87
85
|
if (dryRun) {
|
|
@@ -99,9 +97,9 @@ async function secretAccess(projectId, wantBackend, haveBackend, dryRun) {
|
|
|
99
97
|
const haveSecrets = await secretsToServiceAccounts(haveBackend);
|
|
100
98
|
for (const [secret, serviceAccounts] of Object.entries(haveSecrets)) {
|
|
101
99
|
for (const serviceAccount of serviceAccounts) {
|
|
102
|
-
|
|
100
|
+
wantSecrets[secret]?.delete(serviceAccount);
|
|
103
101
|
}
|
|
104
|
-
if (
|
|
102
|
+
if (wantSecrets[secret]?.size === 0) {
|
|
105
103
|
delete wantSecrets[secret];
|
|
106
104
|
}
|
|
107
105
|
}
|
|
@@ -111,4 +109,3 @@ async function secretAccess(projectId, wantBackend, haveBackend, dryRun) {
|
|
|
111
109
|
}
|
|
112
110
|
await Promise.all(ensure);
|
|
113
111
|
}
|
|
114
|
-
exports.secretAccess = secretAccess;
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.endpointMatchesAnyFilter = endpointMatchesAnyFilter;
|
|
4
|
+
exports.endpointMatchesFilter = endpointMatchesFilter;
|
|
5
|
+
exports.parseFunctionSelector = parseFunctionSelector;
|
|
6
|
+
exports.getEndpointFilters = getEndpointFilters;
|
|
7
|
+
exports.getHumanFriendlyPlatformName = getHumanFriendlyPlatformName;
|
|
8
|
+
exports.getFunctionLabel = getFunctionLabel;
|
|
9
|
+
exports.targetCodebases = targetCodebases;
|
|
10
|
+
exports.groupEndpointsByCodebase = groupEndpointsByCodebase;
|
|
11
|
+
exports.isCodebaseFiltered = isCodebaseFiltered;
|
|
12
|
+
exports.isEndpointFiltered = isEndpointFiltered;
|
|
4
13
|
const backend = require("./backend");
|
|
5
14
|
const projectConfig_1 = require("../../functions/projectConfig");
|
|
6
15
|
const functional_1 = require("../../functional");
|
|
@@ -10,7 +19,6 @@ function endpointMatchesAnyFilter(endpoint, filters) {
|
|
|
10
19
|
}
|
|
11
20
|
return filters.some((filter) => endpointMatchesFilter(endpoint, filter));
|
|
12
21
|
}
|
|
13
|
-
exports.endpointMatchesAnyFilter = endpointMatchesAnyFilter;
|
|
14
22
|
function endpointMatchesFilter(endpoint, filter) {
|
|
15
23
|
if (endpoint.codebase && filter.codebase) {
|
|
16
24
|
if (endpoint.codebase !== filter.codebase) {
|
|
@@ -31,7 +39,6 @@ function endpointMatchesFilter(endpoint, filter) {
|
|
|
31
39
|
}
|
|
32
40
|
return true;
|
|
33
41
|
}
|
|
34
|
-
exports.endpointMatchesFilter = endpointMatchesFilter;
|
|
35
42
|
function parseFunctionSelector(selector, config) {
|
|
36
43
|
const fragments = selector.split(":");
|
|
37
44
|
if (fragments.length < 2) {
|
|
@@ -48,7 +55,6 @@ function parseFunctionSelector(selector, config) {
|
|
|
48
55
|
},
|
|
49
56
|
];
|
|
50
57
|
}
|
|
51
|
-
exports.parseFunctionSelector = parseFunctionSelector;
|
|
52
58
|
function getEndpointFilters(options, config) {
|
|
53
59
|
if (!options.only) {
|
|
54
60
|
return undefined;
|
|
@@ -68,7 +74,6 @@ function getEndpointFilters(options, config) {
|
|
|
68
74
|
}
|
|
69
75
|
return filters;
|
|
70
76
|
}
|
|
71
|
-
exports.getEndpointFilters = getEndpointFilters;
|
|
72
77
|
function getHumanFriendlyPlatformName(platform) {
|
|
73
78
|
if (platform === "gcfv1") {
|
|
74
79
|
return "1st Gen";
|
|
@@ -81,7 +86,6 @@ function getHumanFriendlyPlatformName(platform) {
|
|
|
81
86
|
}
|
|
82
87
|
(0, functional_1.assertExhaustive)(platform);
|
|
83
88
|
}
|
|
84
|
-
exports.getHumanFriendlyPlatformName = getHumanFriendlyPlatformName;
|
|
85
89
|
function getFunctionLabel(fn) {
|
|
86
90
|
let id = `${fn.id}(${fn.region})`;
|
|
87
91
|
if (fn.codebase && fn.codebase !== projectConfig_1.DEFAULT_CODEBASE) {
|
|
@@ -89,7 +93,6 @@ function getFunctionLabel(fn) {
|
|
|
89
93
|
}
|
|
90
94
|
return id;
|
|
91
95
|
}
|
|
92
|
-
exports.getFunctionLabel = getFunctionLabel;
|
|
93
96
|
function targetCodebases(config, filters) {
|
|
94
97
|
const codebasesFromConfig = [...new Set(Object.values(config).map((c) => c.codebase))];
|
|
95
98
|
if (!filters) {
|
|
@@ -109,7 +112,6 @@ function targetCodebases(config, filters) {
|
|
|
109
112
|
}
|
|
110
113
|
return intersections;
|
|
111
114
|
}
|
|
112
|
-
exports.targetCodebases = targetCodebases;
|
|
113
115
|
function groupEndpointsByCodebase(wantBackends, haveEndpoints) {
|
|
114
116
|
const grouped = {};
|
|
115
117
|
let endpointsToAssign = haveEndpoints;
|
|
@@ -128,15 +130,12 @@ function groupEndpointsByCodebase(wantBackends, haveEndpoints) {
|
|
|
128
130
|
}
|
|
129
131
|
return grouped;
|
|
130
132
|
}
|
|
131
|
-
exports.groupEndpointsByCodebase = groupEndpointsByCodebase;
|
|
132
133
|
function isCodebaseFiltered(codebase, filters) {
|
|
133
134
|
return filters.some((filter) => {
|
|
134
135
|
const noIdChunks = (filter.idChunks || []).length === 0;
|
|
135
136
|
return noIdChunks && filter.codebase === codebase;
|
|
136
137
|
});
|
|
137
138
|
}
|
|
138
|
-
exports.isCodebaseFiltered = isCodebaseFiltered;
|
|
139
139
|
function isEndpointFiltered(endpoint, filters) {
|
|
140
140
|
return filters.some((filter) => endpointMatchesFilter(endpoint, filter));
|
|
141
141
|
}
|
|
142
|
-
exports.isEndpointFiltered = isEndpointFiltered;
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.ParamValue = void 0;
|
|
4
|
+
exports.resolveInt = resolveInt;
|
|
5
|
+
exports.resolveString = resolveString;
|
|
6
|
+
exports.resolveList = resolveList;
|
|
7
|
+
exports.resolveBoolean = resolveBoolean;
|
|
8
|
+
exports.isTextInput = isTextInput;
|
|
9
|
+
exports.isSelectInput = isSelectInput;
|
|
10
|
+
exports.isResourceInput = isResourceInput;
|
|
11
|
+
exports.isMultiSelectInput = isMultiSelectInput;
|
|
12
|
+
exports.resolveParams = resolveParams;
|
|
4
13
|
const logger_1 = require("../../logger");
|
|
5
14
|
const error_1 = require("../../error");
|
|
6
15
|
const prompt_1 = require("../../prompt");
|
|
@@ -25,7 +34,6 @@ function resolveInt(from, paramValues) {
|
|
|
25
34
|
}
|
|
26
35
|
return (0, cel_1.resolveExpression)("number", from, paramValues);
|
|
27
36
|
}
|
|
28
|
-
exports.resolveInt = resolveInt;
|
|
29
37
|
function resolveString(from, paramValues) {
|
|
30
38
|
let output = from;
|
|
31
39
|
const celCapture = /{{ .+? }}/g;
|
|
@@ -39,7 +47,6 @@ function resolveString(from, paramValues) {
|
|
|
39
47
|
}
|
|
40
48
|
return output;
|
|
41
49
|
}
|
|
42
|
-
exports.resolveString = resolveString;
|
|
43
50
|
function resolveList(from, paramValues) {
|
|
44
51
|
if (!from) {
|
|
45
52
|
return [];
|
|
@@ -54,30 +61,24 @@ function resolveList(from, paramValues) {
|
|
|
54
61
|
(0, functional_1.assertExhaustive)(from);
|
|
55
62
|
}
|
|
56
63
|
}
|
|
57
|
-
exports.resolveList = resolveList;
|
|
58
64
|
function resolveBoolean(from, paramValues) {
|
|
59
65
|
if (typeof from === "boolean") {
|
|
60
66
|
return from;
|
|
61
67
|
}
|
|
62
68
|
return (0, cel_1.resolveExpression)("boolean", from, paramValues);
|
|
63
69
|
}
|
|
64
|
-
exports.resolveBoolean = resolveBoolean;
|
|
65
70
|
function isTextInput(input) {
|
|
66
71
|
return {}.hasOwnProperty.call(input, "text");
|
|
67
72
|
}
|
|
68
|
-
exports.isTextInput = isTextInput;
|
|
69
73
|
function isSelectInput(input) {
|
|
70
74
|
return {}.hasOwnProperty.call(input, "select");
|
|
71
75
|
}
|
|
72
|
-
exports.isSelectInput = isSelectInput;
|
|
73
76
|
function isResourceInput(input) {
|
|
74
77
|
return {}.hasOwnProperty.call(input, "resource");
|
|
75
78
|
}
|
|
76
|
-
exports.isResourceInput = isResourceInput;
|
|
77
79
|
function isMultiSelectInput(input) {
|
|
78
80
|
return {}.hasOwnProperty.call(input, "multiSelect");
|
|
79
81
|
}
|
|
80
|
-
exports.isMultiSelectInput = isMultiSelectInput;
|
|
81
82
|
class ParamValue {
|
|
82
83
|
constructor(rawValue, internal, types) {
|
|
83
84
|
this.rawValue = rawValue;
|
|
@@ -192,7 +193,6 @@ async function resolveParams(params, firebaseConfig, userEnvs, nonInteractive, i
|
|
|
192
193
|
}
|
|
193
194
|
return paramValues;
|
|
194
195
|
}
|
|
195
|
-
exports.resolveParams = resolveParams;
|
|
196
196
|
function populateDefaultParams(config) {
|
|
197
197
|
const defaultParams = {};
|
|
198
198
|
if (config.databaseURL && config.databaseURL !== "") {
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.EVENTARC_SOURCE_ENV = void 0;
|
|
4
|
+
exports.prepare = prepare;
|
|
5
|
+
exports.inferDetailsFromExisting = inferDetailsFromExisting;
|
|
6
|
+
exports.updateEndpointTargetedStatus = updateEndpointTargetedStatus;
|
|
7
|
+
exports.inferBlockingDetails = inferBlockingDetails;
|
|
8
|
+
exports.resolveCpuAndConcurrency = resolveCpuAndConcurrency;
|
|
9
|
+
exports.loadCodebases = loadCodebases;
|
|
10
|
+
exports.warnIfNewGenkitFunctionIsMissingSecrets = warnIfNewGenkitFunctionIsMissingSecrets;
|
|
11
|
+
exports.ensureAllRequiredAPIsEnabled = ensureAllRequiredAPIsEnabled;
|
|
4
12
|
const clc = require("colorette");
|
|
5
13
|
const proto = require("../../gcp/proto");
|
|
6
14
|
const backend = require("./backend");
|
|
@@ -30,10 +38,8 @@ const backend_1 = require("./backend");
|
|
|
30
38
|
const functional_1 = require("../../functional");
|
|
31
39
|
const prepare_1 = require("../extensions/prepare");
|
|
32
40
|
const prompt = require("../../prompt");
|
|
33
|
-
const experiments = require("../../experiments");
|
|
34
41
|
exports.EVENTARC_SOURCE_ENV = "EVENTARC_CLOUD_EVENT_SOURCE";
|
|
35
42
|
async function prepare(context, options, payload) {
|
|
36
|
-
var _a, _b;
|
|
37
43
|
const projectId = (0, projectUtils_1.needProjectId)(options);
|
|
38
44
|
const projectNumber = await (0, projectUtils_1.needProjectNumber)(options);
|
|
39
45
|
context.config = (0, projectConfig_1.normalizeAndValidate)(options.config.src.functions);
|
|
@@ -55,12 +61,9 @@ async function prepare(context, options, payload) {
|
|
|
55
61
|
context.firebaseConfig = firebaseConfig;
|
|
56
62
|
context.codebaseDeployEvents = {};
|
|
57
63
|
let runtimeConfig = { firebase: firebaseConfig };
|
|
58
|
-
const allowFunctionsConfig = experiments.isEnabled("legacyRuntimeConfigCommands");
|
|
59
64
|
const targetedCodebaseConfigs = context.config.filter((cfg) => codebases.includes(cfg.codebase));
|
|
60
|
-
if (
|
|
61
|
-
|
|
62
|
-
targetedCodebaseConfigs.some(projectConfig_1.shouldUseRuntimeConfig)) {
|
|
63
|
-
runtimeConfig = Object.assign(Object.assign({}, runtimeConfig), (await (0, prepareFunctionsUpload_1.getFunctionsConfig)(projectId)));
|
|
65
|
+
if (checkAPIsEnabled[1] && targetedCodebaseConfigs.some(projectConfig_1.shouldUseRuntimeConfig)) {
|
|
66
|
+
runtimeConfig = { ...runtimeConfig, ...(await (0, prepareFunctionsUpload_1.getFunctionsConfig)(projectId)) };
|
|
64
67
|
}
|
|
65
68
|
context.hasRuntimeConfig = Object.keys(runtimeConfig).some((k) => k !== "firebase");
|
|
66
69
|
const wantBuilds = await loadCodebases(context.config, options, firebaseConfig, runtimeConfig, context.filters);
|
|
@@ -84,7 +87,7 @@ async function prepare(context, options, payload) {
|
|
|
84
87
|
};
|
|
85
88
|
proto.convertIfPresent(userEnvOpt, localCfg, "configDir", (cd) => options.config.path(cd));
|
|
86
89
|
const userEnvs = functionsEnv.loadUserEnvs(userEnvOpt);
|
|
87
|
-
const envs =
|
|
90
|
+
const envs = { ...userEnvs, ...firebaseEnvs };
|
|
88
91
|
const { backend: wantBackend, envs: resolvedEnvs } = await build.resolveBackend({
|
|
89
92
|
build: wantBuild,
|
|
90
93
|
firebaseConfig,
|
|
@@ -96,8 +99,8 @@ async function prepare(context, options, payload) {
|
|
|
96
99
|
let hasEnvsFromParams = false;
|
|
97
100
|
wantBackend.environmentVariables = envs;
|
|
98
101
|
for (const envName of Object.keys(resolvedEnvs)) {
|
|
99
|
-
const isList =
|
|
100
|
-
const envValue =
|
|
102
|
+
const isList = resolvedEnvs[envName]?.legalList;
|
|
103
|
+
const envValue = resolvedEnvs[envName]?.toSDK();
|
|
101
104
|
if (envValue &&
|
|
102
105
|
!resolvedEnvs[envName].internal &&
|
|
103
106
|
(!Object.prototype.hasOwnProperty.call(wantBackend.environmentVariables, envName) || isList)) {
|
|
@@ -106,7 +109,7 @@ async function prepare(context, options, payload) {
|
|
|
106
109
|
}
|
|
107
110
|
}
|
|
108
111
|
for (const endpoint of backend.allEndpoints(wantBackend)) {
|
|
109
|
-
endpoint.environmentVariables =
|
|
112
|
+
endpoint.environmentVariables = { ...(wantBackend.environmentVariables || {}) };
|
|
110
113
|
let resource;
|
|
111
114
|
if (endpoint.platform === "gcfv1") {
|
|
112
115
|
resource = `projects/${endpoint.project}/locations/${endpoint.region}/functions/${endpoint.id}`;
|
|
@@ -155,15 +158,22 @@ async function prepare(context, options, payload) {
|
|
|
155
158
|
(0, utils_1.logLabeledBullet)("functions", `preparing ${clc.bold(sourceDirName)} directory for uploading...`);
|
|
156
159
|
}
|
|
157
160
|
if (backend.someEndpoint(wantBackend, (e) => e.platform === "gcfv2")) {
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
161
|
+
const schPathSet = new Set();
|
|
162
|
+
for (const e of backend.allEndpoints(wantBackend)) {
|
|
163
|
+
if (backend.isDataConnectGraphqlTriggered(e) &&
|
|
164
|
+
e.dataConnectGraphqlTrigger.schemaFilePath) {
|
|
165
|
+
schPathSet.add(e.dataConnectGraphqlTrigger.schemaFilePath);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
const packagedSource = await (0, prepareFunctionsUpload_1.prepareFunctionsUpload)(options.config.projectDir, sourceDir, localCfg, [...schPathSet]);
|
|
169
|
+
source.functionsSourceV2 = packagedSource?.pathToSource;
|
|
170
|
+
source.functionsSourceV2Hash = packagedSource?.hash;
|
|
161
171
|
}
|
|
162
172
|
if (backend.someEndpoint(wantBackend, (e) => e.platform === "gcfv1")) {
|
|
163
173
|
const configForUpload = (0, projectConfig_1.shouldUseRuntimeConfig)(localCfg) ? runtimeConfig : undefined;
|
|
164
|
-
const packagedSource = await (0, prepareFunctionsUpload_1.prepareFunctionsUpload)(sourceDir, localCfg, configForUpload);
|
|
165
|
-
source.functionsSourceV1 = packagedSource
|
|
166
|
-
source.functionsSourceV1Hash = packagedSource
|
|
174
|
+
const packagedSource = await (0, prepareFunctionsUpload_1.prepareFunctionsUpload)(options.config.projectDir, sourceDir, localCfg, [], configForUpload);
|
|
175
|
+
source.functionsSourceV1 = packagedSource?.pathToSource;
|
|
176
|
+
source.functionsSourceV1Hash = packagedSource?.hash;
|
|
167
177
|
}
|
|
168
178
|
context.sources[codebase] = source;
|
|
169
179
|
}
|
|
@@ -197,17 +207,18 @@ async function prepare(context, options, payload) {
|
|
|
197
207
|
updateEndpointTargetedStatus(wantBackends, context.filters || []);
|
|
198
208
|
(0, applyHash_1.applyBackendHashToBackends)(wantBackends, context);
|
|
199
209
|
}
|
|
200
|
-
exports.prepare = prepare;
|
|
201
210
|
function inferDetailsFromExisting(want, have, usedDotenv) {
|
|
202
|
-
var _a;
|
|
203
211
|
for (const wantE of backend.allEndpoints(want)) {
|
|
204
|
-
const haveE =
|
|
212
|
+
const haveE = have.endpoints[wantE.region]?.[wantE.id];
|
|
205
213
|
if (!haveE) {
|
|
206
214
|
continue;
|
|
207
215
|
}
|
|
208
216
|
wantE.runServiceId = haveE.runServiceId;
|
|
209
217
|
if (!usedDotenv) {
|
|
210
|
-
wantE.environmentVariables =
|
|
218
|
+
wantE.environmentVariables = {
|
|
219
|
+
...haveE.environmentVariables,
|
|
220
|
+
...wantE.environmentVariables,
|
|
221
|
+
};
|
|
211
222
|
}
|
|
212
223
|
if (typeof wantE.availableMemoryMb === "undefined" && haveE.availableMemoryMb) {
|
|
213
224
|
wantE.availableMemoryMb = haveE.availableMemoryMb;
|
|
@@ -219,7 +230,6 @@ function inferDetailsFromExisting(want, have, usedDotenv) {
|
|
|
219
230
|
maybeCopyTriggerRegion(wantE, haveE);
|
|
220
231
|
}
|
|
221
232
|
}
|
|
222
|
-
exports.inferDetailsFromExisting = inferDetailsFromExisting;
|
|
223
233
|
function maybeCopyTriggerRegion(wantE, haveE) {
|
|
224
234
|
if (!backend.isEventTriggered(wantE) || !backend.isEventTriggered(haveE)) {
|
|
225
235
|
return;
|
|
@@ -240,9 +250,7 @@ function updateEndpointTargetedStatus(wantBackends, endpointFilters) {
|
|
|
240
250
|
}
|
|
241
251
|
}
|
|
242
252
|
}
|
|
243
|
-
exports.updateEndpointTargetedStatus = updateEndpointTargetedStatus;
|
|
244
253
|
function inferBlockingDetails(want) {
|
|
245
|
-
var _a, _b, _c;
|
|
246
254
|
const authBlockingEndpoints = backend
|
|
247
255
|
.allEndpoints(want)
|
|
248
256
|
.filter((ep) => backend.isBlockingTriggered(ep) &&
|
|
@@ -254,9 +262,9 @@ function inferBlockingDetails(want) {
|
|
|
254
262
|
let idToken = false;
|
|
255
263
|
let refreshToken = false;
|
|
256
264
|
for (const blockingEp of authBlockingEndpoints) {
|
|
257
|
-
accessToken || (accessToken = !!
|
|
258
|
-
idToken || (idToken = !!
|
|
259
|
-
refreshToken || (refreshToken = !!
|
|
265
|
+
accessToken || (accessToken = !!blockingEp.blockingTrigger.options?.accessToken);
|
|
266
|
+
idToken || (idToken = !!blockingEp.blockingTrigger.options?.idToken);
|
|
267
|
+
refreshToken || (refreshToken = !!blockingEp.blockingTrigger.options?.refreshToken);
|
|
260
268
|
}
|
|
261
269
|
for (const blockingEp of authBlockingEndpoints) {
|
|
262
270
|
if (!blockingEp.blockingTrigger.options) {
|
|
@@ -267,7 +275,6 @@ function inferBlockingDetails(want) {
|
|
|
267
275
|
blockingEp.blockingTrigger.options.refreshToken = refreshToken;
|
|
268
276
|
}
|
|
269
277
|
}
|
|
270
|
-
exports.inferBlockingDetails = inferBlockingDetails;
|
|
271
278
|
function resolveCpuAndConcurrency(want) {
|
|
272
279
|
for (const e of backend.allEndpoints(want)) {
|
|
273
280
|
if (e.platform === "gcfv1") {
|
|
@@ -284,7 +291,6 @@ function resolveCpuAndConcurrency(want) {
|
|
|
284
291
|
}
|
|
285
292
|
}
|
|
286
293
|
}
|
|
287
|
-
exports.resolveCpuAndConcurrency = resolveCpuAndConcurrency;
|
|
288
294
|
async function loadCodebases(config, options, firebaseConfig, runtimeConfig, filters) {
|
|
289
295
|
const codebases = (0, functionsDeployHelper_1.targetCodebases)(config, filters);
|
|
290
296
|
const projectId = (0, projectUtils_1.needProjectId)(options);
|
|
@@ -321,24 +327,25 @@ async function loadCodebases(config, options, firebaseConfig, runtimeConfig, fil
|
|
|
321
327
|
const codebaseRuntimeConfig = (0, projectConfig_1.shouldUseRuntimeConfig)(codebaseConfig)
|
|
322
328
|
? runtimeConfig
|
|
323
329
|
: { firebase: firebaseConfig };
|
|
324
|
-
const discoveredBuild = await runtimeDelegate.discoverBuild(codebaseRuntimeConfig,
|
|
330
|
+
const discoveredBuild = await runtimeDelegate.discoverBuild(codebaseRuntimeConfig, {
|
|
331
|
+
...firebaseEnvs,
|
|
332
|
+
GOOGLE_CLOUD_QUOTA_PROJECT: projectId,
|
|
333
|
+
});
|
|
325
334
|
discoveredBuild.runtime = codebaseConfig.runtime;
|
|
326
335
|
build.applyPrefix(discoveredBuild, codebaseConfig.prefix || "");
|
|
327
336
|
wantBuilds[codebase] = discoveredBuild;
|
|
328
337
|
}
|
|
329
338
|
return wantBuilds;
|
|
330
339
|
}
|
|
331
|
-
exports.loadCodebases = loadCodebases;
|
|
332
340
|
async function warnIfNewGenkitFunctionIsMissingSecrets(have, want, options) {
|
|
333
341
|
if (options.force) {
|
|
334
342
|
return;
|
|
335
343
|
}
|
|
336
344
|
const newAndMissingSecrets = backend.allEndpoints(backend.matchingBackend(want, (e) => {
|
|
337
|
-
var _a;
|
|
338
345
|
if (!backend.isCallableTriggered(e) || !e.callableTrigger.genkitAction) {
|
|
339
346
|
return false;
|
|
340
347
|
}
|
|
341
|
-
if (
|
|
348
|
+
if (e.secretEnvironmentVariables?.length) {
|
|
342
349
|
return false;
|
|
343
350
|
}
|
|
344
351
|
return !backend.hasEndpoint(have)(e);
|
|
@@ -352,7 +359,6 @@ async function warnIfNewGenkitFunctionIsMissingSecrets(have, want, options) {
|
|
|
352
359
|
}
|
|
353
360
|
}
|
|
354
361
|
}
|
|
355
|
-
exports.warnIfNewGenkitFunctionIsMissingSecrets = warnIfNewGenkitFunctionIsMissingSecrets;
|
|
356
362
|
async function ensureAllRequiredAPIsEnabled(projectNumber, wantBackend) {
|
|
357
363
|
await Promise.all(Object.values(wantBackend.requiredAPIs).map(({ api }) => {
|
|
358
364
|
return ensureApiEnabled.ensure(projectNumber, api, "functions", false);
|
|
@@ -373,4 +379,3 @@ async function ensureAllRequiredAPIsEnabled(projectNumber, wantBackend) {
|
|
|
373
379
|
await ensureApiEnabled.ensure(projectNumber, (0, api_1.secretManagerOrigin)(), "functions", false);
|
|
374
380
|
}
|
|
375
381
|
}
|
|
376
|
-
exports.ensureAllRequiredAPIsEnabled = ensureAllRequiredAPIsEnabled;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getFunctionsConfig = getFunctionsConfig;
|
|
4
|
+
exports.prepareFunctionsUpload = prepareFunctionsUpload;
|
|
5
|
+
exports.convertToSortedKeyValueArray = convertToSortedKeyValueArray;
|
|
4
6
|
const archiver = require("archiver");
|
|
5
7
|
const clc = require("colorette");
|
|
6
8
|
const filesize = require("filesize");
|
|
@@ -15,13 +17,12 @@ const utils = require("../../utils");
|
|
|
15
17
|
const fsAsync = require("../../fsAsync");
|
|
16
18
|
const CONFIG_DEST_FILE = ".runtimeconfig.json";
|
|
17
19
|
async function getFunctionsConfig(projectId) {
|
|
18
|
-
var _a, _b;
|
|
19
20
|
try {
|
|
20
21
|
return await functionsConfig.materializeAll(projectId);
|
|
21
22
|
}
|
|
22
23
|
catch (err) {
|
|
23
24
|
logger_1.logger.debug(err);
|
|
24
|
-
let errorCode =
|
|
25
|
+
let errorCode = err?.context?.response?.statusCode;
|
|
25
26
|
if (!errorCode) {
|
|
26
27
|
logger_1.logger.debug("Got unexpected error from Runtime Config; it has no status code:", err);
|
|
27
28
|
errorCode = 500;
|
|
@@ -35,16 +36,15 @@ async function getFunctionsConfig(projectId) {
|
|
|
35
36
|
}
|
|
36
37
|
return {};
|
|
37
38
|
}
|
|
38
|
-
exports.getFunctionsConfig = getFunctionsConfig;
|
|
39
39
|
async function pipeAsync(from, to) {
|
|
40
40
|
from.pipe(to);
|
|
41
41
|
await from.finalize();
|
|
42
42
|
return new Promise((resolve, reject) => {
|
|
43
|
-
to.on("finish", resolve);
|
|
43
|
+
to.on("finish", () => resolve());
|
|
44
44
|
to.on("error", reject);
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
|
-
async function packageSource(sourceDir, config, runtimeConfig) {
|
|
47
|
+
async function packageSource(projectDir, sourceDir, config, additionalSources, runtimeConfig) {
|
|
48
48
|
const tmpFile = tmp.fileSync({ prefix: "firebase-functions-", postfix: ".zip" }).name;
|
|
49
49
|
const fileStream = fs.createWriteStream(tmpFile, {
|
|
50
50
|
flags: "w",
|
|
@@ -65,6 +65,19 @@ async function packageSource(sourceDir, config, runtimeConfig) {
|
|
|
65
65
|
mode: file.mode,
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
|
+
for (const name of additionalSources) {
|
|
69
|
+
const absPath = utils.resolveWithin(projectDir, name);
|
|
70
|
+
if (!fs.existsSync(absPath)) {
|
|
71
|
+
throw new error_1.FirebaseError(clc.bold(absPath) + " does not exist.", { exit: 1 });
|
|
72
|
+
}
|
|
73
|
+
const mode = fs.statSync(absPath).mode;
|
|
74
|
+
const fileHash = await (0, hash_1.getSourceHash)(absPath);
|
|
75
|
+
hashes.push(fileHash);
|
|
76
|
+
archive.file(absPath, {
|
|
77
|
+
name,
|
|
78
|
+
mode,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
68
81
|
if (typeof runtimeConfig !== "undefined") {
|
|
69
82
|
const runtimeConfigHashString = JSON.stringify(convertToSortedKeyValueArray(runtimeConfig));
|
|
70
83
|
hashes.push(runtimeConfigHashString);
|
|
@@ -80,6 +93,9 @@ async function packageSource(sourceDir, config, runtimeConfig) {
|
|
|
80
93
|
await pipeAsync(archive, fileStream);
|
|
81
94
|
}
|
|
82
95
|
catch (err) {
|
|
96
|
+
if (err instanceof error_1.FirebaseError) {
|
|
97
|
+
throw err;
|
|
98
|
+
}
|
|
83
99
|
throw new error_1.FirebaseError("Could not read source directory. Remove links and shortcuts and try again.", {
|
|
84
100
|
original: err,
|
|
85
101
|
exit: 1,
|
|
@@ -94,10 +110,9 @@ async function packageSource(sourceDir, config, runtimeConfig) {
|
|
|
94
110
|
const hash = hashes.join(".");
|
|
95
111
|
return { pathToSource: tmpFile, hash };
|
|
96
112
|
}
|
|
97
|
-
async function prepareFunctionsUpload(sourceDir, config, runtimeConfig) {
|
|
98
|
-
return packageSource(sourceDir, config, runtimeConfig);
|
|
113
|
+
async function prepareFunctionsUpload(projectDir, sourceDir, config, additionalSources, runtimeConfig) {
|
|
114
|
+
return packageSource(projectDir, sourceDir, config, additionalSources, runtimeConfig);
|
|
99
115
|
}
|
|
100
|
-
exports.prepareFunctionsUpload = prepareFunctionsUpload;
|
|
101
116
|
function convertToSortedKeyValueArray(config) {
|
|
102
117
|
if (typeof config !== "object" || config === null)
|
|
103
118
|
return config;
|
|
@@ -107,4 +122,3 @@ function convertToSortedKeyValueArray(config) {
|
|
|
107
122
|
return { key, value: convertToSortedKeyValueArray(config[key]) };
|
|
108
123
|
});
|
|
109
124
|
}
|
|
110
|
-
exports.convertToSortedKeyValueArray = convertToSortedKeyValueArray;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.V2_FREE_TIER = exports.V1_FREE_TIER = exports.V2_RATES = exports.V1_RATES = void 0;
|
|
4
|
+
exports.canCalculateMinInstanceCost = canCalculateMinInstanceCost;
|
|
5
|
+
exports.monthlyMinInstanceCost = monthlyMinInstanceCost;
|
|
4
6
|
const backend = require("./backend");
|
|
5
7
|
const V1_REGION_TO_TIER = {
|
|
6
8
|
"us-central1": 1,
|
|
@@ -124,7 +126,6 @@ function canCalculateMinInstanceCost(endpoint) {
|
|
|
124
126
|
}
|
|
125
127
|
return true;
|
|
126
128
|
}
|
|
127
|
-
exports.canCalculateMinInstanceCost = canCalculateMinInstanceCost;
|
|
128
129
|
const SECONDS_PER_MONTH = 30 * 24 * 60 * 60;
|
|
129
130
|
function monthlyMinInstanceCost(endpoints) {
|
|
130
131
|
const usage = {
|
|
@@ -175,4 +176,3 @@ function monthlyMinInstanceCost(endpoints) {
|
|
|
175
176
|
runCpuBill = Math.max(runCpuBill, 0);
|
|
176
177
|
return v1MemoryBill + v1CpuBill + v2MemoryBill + v2CpuBill + runMemoryBill + runCpuBill;
|
|
177
178
|
}
|
|
178
|
-
exports.monthlyMinInstanceCost = monthlyMinInstanceCost;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.promptForFailurePolicies = promptForFailurePolicies;
|
|
4
|
+
exports.promptForFunctionDeletion = promptForFunctionDeletion;
|
|
5
|
+
exports.promptForUnsafeMigration = promptForUnsafeMigration;
|
|
6
|
+
exports.promptForMinInstances = promptForMinInstances;
|
|
7
|
+
exports.promptForCleanupPolicyDays = promptForCleanupPolicyDays;
|
|
4
8
|
const clc = require("colorette");
|
|
5
9
|
const functionsDeployHelper_1 = require("./functionsDeployHelper");
|
|
6
10
|
const error_1 = require("../../error");
|
|
@@ -18,8 +22,7 @@ async function promptForFailurePolicies(options, want, have) {
|
|
|
18
22
|
return;
|
|
19
23
|
}
|
|
20
24
|
const newRetryEndpoints = retryEndpoints.filter((endpoint) => {
|
|
21
|
-
|
|
22
|
-
const existing = (_a = have.endpoints[endpoint.region]) === null || _a === void 0 ? void 0 : _a[endpoint.id];
|
|
25
|
+
const existing = have.endpoints[endpoint.region]?.[endpoint.id];
|
|
23
26
|
return !(existing && backend.isEventTriggered(existing) && existing.eventTrigger.retry);
|
|
24
27
|
});
|
|
25
28
|
if (newRetryEndpoints.length === 0) {
|
|
@@ -44,7 +47,6 @@ async function promptForFailurePolicies(options, want, have) {
|
|
|
44
47
|
throw new error_1.FirebaseError("Deployment canceled.", { exit: 1 });
|
|
45
48
|
}
|
|
46
49
|
}
|
|
47
|
-
exports.promptForFailurePolicies = promptForFailurePolicies;
|
|
48
50
|
async function promptForFunctionDeletion(functionsToDelete, options) {
|
|
49
51
|
let shouldDeleteFns = true;
|
|
50
52
|
if (functionsToDelete.length === 0 || options.force) {
|
|
@@ -78,7 +80,6 @@ async function promptForFunctionDeletion(functionsToDelete, options) {
|
|
|
78
80
|
}
|
|
79
81
|
return shouldDeleteFns;
|
|
80
82
|
}
|
|
81
|
-
exports.promptForFunctionDeletion = promptForFunctionDeletion;
|
|
82
83
|
async function promptForUnsafeMigration(fnsToUpdate, options) {
|
|
83
84
|
const unsafeUpdates = fnsToUpdate.filter((eu) => eu.unsafe);
|
|
84
85
|
if (unsafeUpdates.length === 0 || options.force) {
|
|
@@ -109,18 +110,16 @@ async function promptForUnsafeMigration(fnsToUpdate, options) {
|
|
|
109
110
|
}
|
|
110
111
|
return safeUpdates;
|
|
111
112
|
}
|
|
112
|
-
exports.promptForUnsafeMigration = promptForUnsafeMigration;
|
|
113
113
|
async function promptForMinInstances(options, want, have) {
|
|
114
114
|
if (options.force) {
|
|
115
115
|
return;
|
|
116
116
|
}
|
|
117
117
|
const increasesCost = backend.someEndpoint(want, (wantE) => {
|
|
118
|
-
var _a;
|
|
119
118
|
if (!pricing.canCalculateMinInstanceCost(wantE)) {
|
|
120
119
|
return true;
|
|
121
120
|
}
|
|
122
121
|
const wantCost = pricing.monthlyMinInstanceCost([wantE]);
|
|
123
|
-
const haveE =
|
|
122
|
+
const haveE = have.endpoints[wantE.region]?.[wantE.id];
|
|
124
123
|
let haveCost;
|
|
125
124
|
if (!haveE) {
|
|
126
125
|
haveCost = 0;
|
|
@@ -174,7 +173,6 @@ async function promptForMinInstances(options, want, have) {
|
|
|
174
173
|
throw new error_1.FirebaseError("Deployment canceled.", { exit: 1 });
|
|
175
174
|
}
|
|
176
175
|
}
|
|
177
|
-
exports.promptForMinInstances = promptForMinInstances;
|
|
178
176
|
async function promptForCleanupPolicyDays(options, locations) {
|
|
179
177
|
utils.logLabeledWarning("functions", `No cleanup policy detected for repositories in ${locations.join(", ")}. ` +
|
|
180
178
|
"This may result in a small monthly bill as container images accumulate over time.");
|
|
@@ -193,4 +191,3 @@ async function promptForCleanupPolicyDays(options, locations) {
|
|
|
193
191
|
validate: (days) => !days || isNaN(days) || days < 0 ? "Please enter a non-negative number" : true,
|
|
194
192
|
});
|
|
195
193
|
}
|
|
196
|
-
exports.promptForCleanupPolicyDays = promptForCleanupPolicyDays;
|
|
@@ -4,12 +4,11 @@ exports.InlineExecutor = exports.QueueExecutor = exports.DEFAULT_RETRY_CODES = v
|
|
|
4
4
|
const queue_1 = require("../../../throttler/queue");
|
|
5
5
|
exports.DEFAULT_RETRY_CODES = [429, 409, 503];
|
|
6
6
|
function parseErrorCode(err) {
|
|
7
|
-
var _a, _b, _c, _d, _e, _f;
|
|
8
7
|
return (err.status ||
|
|
9
8
|
err.code ||
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
err.context?.response?.statusCode ||
|
|
10
|
+
err.original?.code ||
|
|
11
|
+
err.original?.context?.response?.statusCode);
|
|
13
12
|
}
|
|
14
13
|
async function handler(op) {
|
|
15
14
|
try {
|
|
@@ -27,10 +26,10 @@ async function handler(op) {
|
|
|
27
26
|
}
|
|
28
27
|
class QueueExecutor {
|
|
29
28
|
constructor(options) {
|
|
30
|
-
this.queue = new queue_1.Queue(
|
|
29
|
+
this.queue = new queue_1.Queue({ ...options, handler });
|
|
31
30
|
}
|
|
32
31
|
async run(func, opts) {
|
|
33
|
-
const retryCodes =
|
|
32
|
+
const retryCodes = opts?.retryCodes || exports.DEFAULT_RETRY_CODES;
|
|
34
33
|
const op = {
|
|
35
34
|
func,
|
|
36
35
|
retryCodes,
|