firebase-tools 15.0.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 +33 -36
- 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 +47 -10
- 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 +31 -31
- 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 +19 -21
- 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 +47 -45
- 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 +7 -4
- 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 +67 -50
- 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,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.AbortedDeploymentError = exports.DeploymentError = void 0;
|
|
4
|
+
exports.logAndTrackDeployStats = logAndTrackDeployStats;
|
|
5
|
+
exports.printErrors = printErrors;
|
|
6
|
+
exports.printAbortedErrors = printAbortedErrors;
|
|
7
|
+
exports.triggerTag = triggerTag;
|
|
4
8
|
const backend = require("../backend");
|
|
5
9
|
const clc = require("colorette");
|
|
6
10
|
const logger_1 = require("../../../logger");
|
|
@@ -24,7 +28,6 @@ class AbortedDeploymentError extends DeploymentError {
|
|
|
24
28
|
}
|
|
25
29
|
exports.AbortedDeploymentError = AbortedDeploymentError;
|
|
26
30
|
async function logAndTrackDeployStats(summary, context) {
|
|
27
|
-
var _a, _b, _c;
|
|
28
31
|
let totalTime = 0;
|
|
29
32
|
let totalErrors = 0;
|
|
30
33
|
let totalSuccesses = 0;
|
|
@@ -51,29 +54,29 @@ async function logAndTrackDeployStats(summary, context) {
|
|
|
51
54
|
totalTime += result.durationMs;
|
|
52
55
|
if (!result.error) {
|
|
53
56
|
totalSuccesses++;
|
|
54
|
-
if (
|
|
57
|
+
if (context?.codebaseDeployEvents?.[result.endpoint.codebase || "default"] !== undefined) {
|
|
55
58
|
context.codebaseDeployEvents[result.endpoint.codebase || "default"]
|
|
56
59
|
.fn_deploy_num_successes++;
|
|
57
60
|
}
|
|
58
61
|
}
|
|
59
62
|
else if (result.error instanceof AbortedDeploymentError) {
|
|
60
63
|
totalAborts++;
|
|
61
|
-
if (
|
|
64
|
+
if (context?.codebaseDeployEvents?.[result.endpoint.codebase || "default"] !== undefined) {
|
|
62
65
|
context.codebaseDeployEvents[result.endpoint.codebase || "default"]
|
|
63
66
|
.fn_deploy_num_canceled++;
|
|
64
67
|
}
|
|
65
68
|
}
|
|
66
69
|
else {
|
|
67
70
|
totalErrors++;
|
|
68
|
-
if (
|
|
71
|
+
if (context?.codebaseDeployEvents?.[result.endpoint.codebase || "default"] !== undefined) {
|
|
69
72
|
context.codebaseDeployEvents[result.endpoint.codebase || "default"]
|
|
70
73
|
.fn_deploy_num_failures++;
|
|
71
74
|
}
|
|
72
75
|
}
|
|
73
76
|
}
|
|
74
77
|
for (const codebase of codebases) {
|
|
75
|
-
if (context
|
|
76
|
-
reports.push((0, track_1.trackGA4)("codebase_deploy",
|
|
78
|
+
if (context?.codebaseDeployEvents) {
|
|
79
|
+
reports.push((0, track_1.trackGA4)("codebase_deploy", { ...context.codebaseDeployEvents[codebase] }));
|
|
77
80
|
}
|
|
78
81
|
}
|
|
79
82
|
const fnDeployGroupEvent = {
|
|
@@ -81,7 +84,7 @@ async function logAndTrackDeployStats(summary, context) {
|
|
|
81
84
|
fn_deploy_num_successes: totalSuccesses,
|
|
82
85
|
fn_deploy_num_canceled: totalAborts,
|
|
83
86
|
fn_deploy_num_failures: totalErrors,
|
|
84
|
-
has_runtime_config: String(!!
|
|
87
|
+
has_runtime_config: String(!!context?.hasRuntimeConfig),
|
|
85
88
|
};
|
|
86
89
|
reports.push((0, track_1.trackGA4)("function_deploy_group", fnDeployGroupEvent));
|
|
87
90
|
const avgTime = totalTime / (totalSuccesses + totalErrors);
|
|
@@ -92,7 +95,6 @@ async function logAndTrackDeployStats(summary, context) {
|
|
|
92
95
|
logger_1.logger.debug(`Average Function Deployment time: ${avgTime}`);
|
|
93
96
|
await utils.allSettled(reports);
|
|
94
97
|
}
|
|
95
|
-
exports.logAndTrackDeployStats = logAndTrackDeployStats;
|
|
96
98
|
function printErrors(summary) {
|
|
97
99
|
const errored = summary.results.filter((r) => r.error);
|
|
98
100
|
if (errored.length === 0) {
|
|
@@ -109,7 +111,6 @@ function printErrors(summary) {
|
|
|
109
111
|
printQuotaErrors(errored);
|
|
110
112
|
printAbortedErrors(errored);
|
|
111
113
|
}
|
|
112
|
-
exports.printErrors = printErrors;
|
|
113
114
|
function printIamErrors(results) {
|
|
114
115
|
const iamFailures = results.filter((r) => r.error instanceof DeploymentError && r.error.op === "set invoker");
|
|
115
116
|
if (!iamFailures.length) {
|
|
@@ -137,16 +138,15 @@ function printIamErrors(results) {
|
|
|
137
138
|
}
|
|
138
139
|
function printQuotaErrors(results) {
|
|
139
140
|
const hadQuotaError = results.find((r) => {
|
|
140
|
-
var _a, _b, _c, _d, _e, _f;
|
|
141
141
|
if (!(r.error instanceof DeploymentError)) {
|
|
142
142
|
return false;
|
|
143
143
|
}
|
|
144
144
|
const original = r.error.original;
|
|
145
|
-
const code =
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
145
|
+
const code = original?.status ||
|
|
146
|
+
original?.code ||
|
|
147
|
+
original?.context?.response?.statusCode ||
|
|
148
|
+
original?.original?.code ||
|
|
149
|
+
original?.original?.context?.response?.statusCode;
|
|
150
150
|
return code === 429 || code === 409;
|
|
151
151
|
});
|
|
152
152
|
if (!hadQuotaError) {
|
|
@@ -170,9 +170,7 @@ function printAbortedErrors(results) {
|
|
|
170
170
|
aborted.map((result) => `\n\t${(0, functionsDeployHelper_1.getFunctionLabel)(result.endpoint)}`).join(""));
|
|
171
171
|
logger_1.logger.info(`To delete these, use ${clc.bold("firebase functions:delete")}`);
|
|
172
172
|
}
|
|
173
|
-
exports.printAbortedErrors = printAbortedErrors;
|
|
174
173
|
function triggerTag(endpoint) {
|
|
175
|
-
var _a;
|
|
176
174
|
const prefix = endpoint.platform === "gcfv1" ? "v1" : "v2";
|
|
177
175
|
if (backend.isScheduleTriggered(endpoint)) {
|
|
178
176
|
return `${prefix}.scheduled`;
|
|
@@ -184,14 +182,16 @@ function triggerTag(endpoint) {
|
|
|
184
182
|
return `${prefix}.callable`;
|
|
185
183
|
}
|
|
186
184
|
if (backend.isHttpsTriggered(endpoint)) {
|
|
187
|
-
if (
|
|
185
|
+
if (endpoint.labels?.["deployment-callable"]) {
|
|
188
186
|
return `${prefix}.callable`;
|
|
189
187
|
}
|
|
190
188
|
return `${prefix}.https`;
|
|
191
189
|
}
|
|
190
|
+
if (backend.isDataConnectGraphqlTriggered(endpoint)) {
|
|
191
|
+
return `${prefix}.dataConnectGraphql`;
|
|
192
|
+
}
|
|
192
193
|
if (backend.isBlockingTriggered(endpoint)) {
|
|
193
194
|
return `${prefix}.blocking`;
|
|
194
195
|
}
|
|
195
196
|
return endpoint.eventTrigger.eventType;
|
|
196
197
|
}
|
|
197
|
-
exports.triggerTag = triggerTag;
|
|
@@ -50,12 +50,11 @@ class SourceTokenScraper {
|
|
|
50
50
|
}
|
|
51
51
|
get poller() {
|
|
52
52
|
return (op) => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
logger_1.logger.debug(`Got source token ${(_d = op.metadata) === null || _d === void 0 ? void 0 : _d.sourceToken} for region ${region}`);
|
|
53
|
+
if (op.metadata?.sourceToken || op.done) {
|
|
54
|
+
const [, , , region] = op.metadata?.target?.split("/") || [];
|
|
55
|
+
logger_1.logger.debug(`Got source token ${op.metadata?.sourceToken} for region ${region}`);
|
|
57
56
|
this.resolve({
|
|
58
|
-
token:
|
|
57
|
+
token: op.metadata?.sourceToken,
|
|
59
58
|
aborted: false,
|
|
60
59
|
});
|
|
61
60
|
this.fetchState = "VALID";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getRemoteSource = getRemoteSource;
|
|
4
|
+
exports.requireFunctionsYaml = requireFunctionsYaml;
|
|
4
5
|
const fs = require("fs");
|
|
5
6
|
const path = require("path");
|
|
6
7
|
const url_1 = require("url");
|
|
@@ -45,7 +46,6 @@ async function getRemoteSource(repository, ref, destDir, subDir) {
|
|
|
45
46
|
(0, utils_1.logLabeledBullet)("functions", `downloaded remote source (${origin})`);
|
|
46
47
|
return sourceDir;
|
|
47
48
|
}
|
|
48
|
-
exports.getRemoteSource = getRemoteSource;
|
|
49
49
|
function parseGitHubUrl(url) {
|
|
50
50
|
const shorthandMatch = /^[a-zA-Z0-9-]+\/[a-zA-Z0-9-_.]+$/.exec(url);
|
|
51
51
|
if (shorthandMatch) {
|
|
@@ -68,7 +68,7 @@ function parseGitHubUrl(url) {
|
|
|
68
68
|
}
|
|
69
69
|
return { owner, repo };
|
|
70
70
|
}
|
|
71
|
-
catch
|
|
71
|
+
catch {
|
|
72
72
|
return undefined;
|
|
73
73
|
}
|
|
74
74
|
}
|
|
@@ -81,4 +81,3 @@ function requireFunctionsYaml(codeDir) {
|
|
|
81
81
|
`If you trust this repository and want to use it anyway, clone the repository locally, inspect the code for safety, and deploy it as a local source.`);
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
|
-
exports.requireFunctionsYaml = requireFunctionsYaml;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getFunctionDiscoveryTimeout = getFunctionDiscoveryTimeout;
|
|
4
|
+
exports.yamlToBuild = yamlToBuild;
|
|
5
|
+
exports.detectFromYaml = detectFromYaml;
|
|
6
|
+
exports.detectFromPort = detectFromPort;
|
|
7
|
+
exports.detectFromOutputPath = detectFromOutputPath;
|
|
4
8
|
const node_fetch_1 = require("node-fetch");
|
|
5
9
|
const fs = require("fs");
|
|
6
10
|
const path = require("path");
|
|
@@ -13,7 +17,6 @@ const TIMEOUT_OVERRIDE_ENV_VAR = "FUNCTIONS_DISCOVERY_TIMEOUT";
|
|
|
13
17
|
function getFunctionDiscoveryTimeout() {
|
|
14
18
|
return +(process.env[TIMEOUT_OVERRIDE_ENV_VAR] || 0) * 1000;
|
|
15
19
|
}
|
|
16
|
-
exports.getFunctionDiscoveryTimeout = getFunctionDiscoveryTimeout;
|
|
17
20
|
function yamlToBuild(yaml, project, region, runtime) {
|
|
18
21
|
try {
|
|
19
22
|
if (!yaml.specVersion) {
|
|
@@ -28,7 +31,6 @@ function yamlToBuild(yaml, project, region, runtime) {
|
|
|
28
31
|
throw new error_1.FirebaseError("Failed to parse build specification", { children: [err] });
|
|
29
32
|
}
|
|
30
33
|
}
|
|
31
|
-
exports.yamlToBuild = yamlToBuild;
|
|
32
34
|
async function detectFromYaml(directory, project, runtime) {
|
|
33
35
|
let text;
|
|
34
36
|
try {
|
|
@@ -47,7 +49,6 @@ async function detectFromYaml(directory, project, runtime) {
|
|
|
47
49
|
const parsed = yaml.parse(text);
|
|
48
50
|
return yamlToBuild(parsed, project, api.functionsDefaultRegion(), runtime);
|
|
49
51
|
}
|
|
50
|
-
exports.detectFromYaml = detectFromYaml;
|
|
51
52
|
async function detectFromPort(port, project, runtime, initialDelay = 0, timeout = 10000) {
|
|
52
53
|
let res;
|
|
53
54
|
const discoveryTimeout = getFunctionDiscoveryTimeout() || timeout;
|
|
@@ -68,8 +69,8 @@ async function detectFromPort(port, project, runtime, initialDelay = 0, timeout
|
|
|
68
69
|
break;
|
|
69
70
|
}
|
|
70
71
|
catch (err) {
|
|
71
|
-
if (
|
|
72
|
-
["ECONNREFUSED", "ECONNRESET", "ETIMEDOUT"].includes(err
|
|
72
|
+
if (err?.name === "FetchError" ||
|
|
73
|
+
["ECONNREFUSED", "ECONNRESET", "ETIMEDOUT"].includes(err?.code)) {
|
|
73
74
|
continue;
|
|
74
75
|
}
|
|
75
76
|
throw err;
|
|
@@ -93,10 +94,8 @@ async function detectFromPort(port, project, runtime, initialDelay = 0, timeout
|
|
|
93
94
|
}
|
|
94
95
|
return yamlToBuild(parsed, project, api.functionsDefaultRegion(), runtime);
|
|
95
96
|
}
|
|
96
|
-
exports.detectFromPort = detectFromPort;
|
|
97
97
|
async function detectFromOutputPath(childProcess, manifestPath, project, runtime, timeout = 10000) {
|
|
98
98
|
return new Promise((resolve, reject) => {
|
|
99
|
-
var _a;
|
|
100
99
|
let stderrBuffer = "";
|
|
101
100
|
let resolved = false;
|
|
102
101
|
const discoveryTimeout = getFunctionDiscoveryTimeout() || timeout;
|
|
@@ -106,16 +105,15 @@ async function detectFromOutputPath(childProcess, manifestPath, project, runtime
|
|
|
106
105
|
reject(new error_1.FirebaseError(`User code failed to load. Cannot determine backend specification. Timeout after ${discoveryTimeout}ms`));
|
|
107
106
|
}
|
|
108
107
|
}, discoveryTimeout);
|
|
109
|
-
|
|
108
|
+
childProcess.stderr?.on("data", (chunk) => {
|
|
110
109
|
stderrBuffer += chunk.toString();
|
|
111
110
|
});
|
|
112
111
|
childProcess.on("exit", async (code) => {
|
|
113
|
-
var _a;
|
|
114
112
|
if (!resolved) {
|
|
115
113
|
clearTimeout(timer);
|
|
116
114
|
resolved = true;
|
|
117
115
|
if (code !== 0 && code !== null) {
|
|
118
|
-
const errorMessage =
|
|
116
|
+
const errorMessage = stderrBuffer.trim() ?? `Discovery process exited with code ${code}`;
|
|
119
117
|
reject(new error_1.FirebaseError(`User code failed to load. Cannot determine backend specification.\n${errorMessage}`));
|
|
120
118
|
}
|
|
121
119
|
else {
|
|
@@ -144,4 +142,3 @@ async function detectFromOutputPath(childProcess, manifestPath, project, runtime
|
|
|
144
142
|
});
|
|
145
143
|
});
|
|
146
144
|
}
|
|
147
|
-
exports.detectFromOutputPath = detectFromOutputPath;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.requireKeys = requireKeys;
|
|
4
|
+
exports.assertKeyTypes = assertKeyTypes;
|
|
4
5
|
const error_1 = require("../../../../error");
|
|
5
6
|
function requireKeys(prefix, yaml, ...keys) {
|
|
6
7
|
if (prefix) {
|
|
@@ -12,7 +13,6 @@ function requireKeys(prefix, yaml, ...keys) {
|
|
|
12
13
|
}
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
|
-
exports.requireKeys = requireKeys;
|
|
16
16
|
function assertKeyTypes(prefix, yaml, schema) {
|
|
17
17
|
if (!yaml) {
|
|
18
18
|
return;
|
|
@@ -92,4 +92,3 @@ function assertKeyTypes(prefix, yaml, schema) {
|
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
|
-
exports.assertKeyTypes = assertKeyTypes;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.buildFromV1Alpha1 =
|
|
3
|
+
exports.buildFromV1Alpha1 = buildFromV1Alpha1;
|
|
4
4
|
const build = require("../../build");
|
|
5
5
|
const backend = require("../../backend");
|
|
6
6
|
const proto_1 = require("../../../../gcp/proto");
|
|
@@ -43,7 +43,6 @@ function buildFromV1Alpha1(yaml, project, region, runtime) {
|
|
|
43
43
|
}
|
|
44
44
|
return bd;
|
|
45
45
|
}
|
|
46
|
-
exports.buildFromV1Alpha1 = buildFromV1Alpha1;
|
|
47
46
|
function parseRequiredAPIs(manifest) {
|
|
48
47
|
const requiredAPIs = manifest.requiredAPIs || [];
|
|
49
48
|
for (const { api, reason } of requiredAPIs) {
|
|
@@ -76,6 +75,7 @@ function assertBuildEndpoint(ep, id) {
|
|
|
76
75
|
environmentVariables: "object?",
|
|
77
76
|
secretEnvironmentVariables: "array?",
|
|
78
77
|
httpsTrigger: "object",
|
|
78
|
+
dataConnectGraphqlTrigger: "object",
|
|
79
79
|
callableTrigger: "object",
|
|
80
80
|
eventTrigger: "object",
|
|
81
81
|
scheduleTrigger: "object",
|
|
@@ -94,6 +94,9 @@ function assertBuildEndpoint(ep, id) {
|
|
|
94
94
|
if (ep.httpsTrigger) {
|
|
95
95
|
triggerCount++;
|
|
96
96
|
}
|
|
97
|
+
if (ep.dataConnectGraphqlTrigger) {
|
|
98
|
+
triggerCount++;
|
|
99
|
+
}
|
|
97
100
|
if (ep.callableTrigger) {
|
|
98
101
|
triggerCount++;
|
|
99
102
|
}
|
|
@@ -133,6 +136,12 @@ function assertBuildEndpoint(ep, id) {
|
|
|
133
136
|
invoker: "array?",
|
|
134
137
|
});
|
|
135
138
|
}
|
|
139
|
+
else if (build.isDataConnectGraphqlTriggered(ep)) {
|
|
140
|
+
(0, parsing_1.assertKeyTypes)(prefix + ".dataConnectGraphqlTrigger", ep.dataConnectGraphqlTrigger, {
|
|
141
|
+
invoker: "array?",
|
|
142
|
+
schemaFilePath: "string?",
|
|
143
|
+
});
|
|
144
|
+
}
|
|
136
145
|
else if (build.isCallableTriggered(ep)) {
|
|
137
146
|
(0, parsing_1.assertKeyTypes)(prefix + ".callableTrigger", ep.callableTrigger, {
|
|
138
147
|
genkitAction: "string?",
|
|
@@ -192,7 +201,6 @@ function assertBuildEndpoint(ep, id) {
|
|
|
192
201
|
}
|
|
193
202
|
}
|
|
194
203
|
function parseEndpointForBuild(id, ep, project, defaultRegion, runtime) {
|
|
195
|
-
var _a;
|
|
196
204
|
let triggered;
|
|
197
205
|
if (build.isEventTriggered(ep)) {
|
|
198
206
|
const eventTrigger = {
|
|
@@ -205,7 +213,7 @@ function parseEndpointForBuild(id, ep, project, defaultRegion, runtime) {
|
|
|
205
213
|
(0, proto_1.copyIfPresent)(eventTrigger, ep.eventTrigger, "serviceAccount", "eventFilterPathPatterns", "region");
|
|
206
214
|
(0, proto_1.convertIfPresent)(eventTrigger, ep.eventTrigger, "channel", (c) => resolveChannelName(project, c, defaultRegion));
|
|
207
215
|
(0, proto_1.convertIfPresent)(eventTrigger, ep.eventTrigger, "eventFilters", (filters) => {
|
|
208
|
-
const copy =
|
|
216
|
+
const copy = { ...filters };
|
|
209
217
|
if (copy["topic"] && !copy["topic"].startsWith("projects/")) {
|
|
210
218
|
copy["topic"] = `projects/${project}/topics/${copy["topic"]}`;
|
|
211
219
|
}
|
|
@@ -217,6 +225,11 @@ function parseEndpointForBuild(id, ep, project, defaultRegion, runtime) {
|
|
|
217
225
|
triggered = { httpsTrigger: {} };
|
|
218
226
|
(0, proto_1.copyIfPresent)(triggered.httpsTrigger, ep.httpsTrigger, "invoker");
|
|
219
227
|
}
|
|
228
|
+
else if (build.isDataConnectGraphqlTriggered(ep)) {
|
|
229
|
+
triggered = { dataConnectGraphqlTrigger: {} };
|
|
230
|
+
(0, proto_1.copyIfPresent)(triggered.dataConnectGraphqlTrigger, ep.dataConnectGraphqlTrigger, "invoker");
|
|
231
|
+
(0, proto_1.copyIfPresent)(triggered.dataConnectGraphqlTrigger, ep.dataConnectGraphqlTrigger, "schemaFilePath");
|
|
232
|
+
}
|
|
220
233
|
else if (build.isCallableTriggered(ep)) {
|
|
221
234
|
triggered = { callableTrigger: {} };
|
|
222
235
|
(0, proto_1.copyIfPresent)(triggered.callableTrigger, ep.callableTrigger, "genkitAction");
|
|
@@ -224,7 +237,7 @@ function parseEndpointForBuild(id, ep, project, defaultRegion, runtime) {
|
|
|
224
237
|
else if (build.isScheduleTriggered(ep)) {
|
|
225
238
|
const st = {
|
|
226
239
|
schedule: ep.scheduleTrigger.schedule || "",
|
|
227
|
-
timeZone:
|
|
240
|
+
timeZone: ep.scheduleTrigger.timeZone ?? null,
|
|
228
241
|
};
|
|
229
242
|
if (ep.scheduleTrigger.retryConfig) {
|
|
230
243
|
st.retryConfig = {};
|
|
@@ -250,13 +263,13 @@ function parseEndpointForBuild(id, ep, project, defaultRegion, runtime) {
|
|
|
250
263
|
tq.invoker = null;
|
|
251
264
|
}
|
|
252
265
|
if (ep.taskQueueTrigger.retryConfig) {
|
|
253
|
-
tq.retryConfig =
|
|
266
|
+
tq.retryConfig = { ...ep.taskQueueTrigger.retryConfig };
|
|
254
267
|
}
|
|
255
268
|
else if (ep.taskQueueTrigger.retryConfig === null) {
|
|
256
269
|
tq.retryConfig = null;
|
|
257
270
|
}
|
|
258
271
|
if (ep.taskQueueTrigger.rateLimits) {
|
|
259
|
-
tq.rateLimits =
|
|
272
|
+
tq.rateLimits = { ...ep.taskQueueTrigger.rateLimits };
|
|
260
273
|
}
|
|
261
274
|
else if (ep.taskQueueTrigger.rateLimits === null) {
|
|
262
275
|
tq.rateLimits = null;
|
|
@@ -270,8 +283,14 @@ function parseEndpointForBuild(id, ep, project, defaultRegion, runtime) {
|
|
|
270
283
|
throw new error_1.FirebaseError(`Do not recognize trigger type for endpoint ${id}. Try upgrading ` +
|
|
271
284
|
"firebase-tools with npm install -g firebase-tools@latest");
|
|
272
285
|
}
|
|
273
|
-
const parsed =
|
|
274
|
-
|
|
286
|
+
const parsed = {
|
|
287
|
+
platform: ep.platform || "gcfv2",
|
|
288
|
+
region: ep.region || [defaultRegion],
|
|
289
|
+
project,
|
|
290
|
+
runtime,
|
|
291
|
+
entryPoint: ep.entryPoint,
|
|
292
|
+
...triggered,
|
|
293
|
+
};
|
|
275
294
|
if ("serviceAccountEmail" in ep) {
|
|
276
295
|
parsed.serviceAccount = ep.serviceAccountEmail;
|
|
277
296
|
}
|
|
@@ -329,7 +348,7 @@ function resolveChannelName(projectId, channel, defaultRegion) {
|
|
|
329
348
|
return "projects/" + projectId + "/locations/" + location + "/channels/" + channelId;
|
|
330
349
|
}
|
|
331
350
|
const match = CHANNEL_NAME_REGEX.exec(channel);
|
|
332
|
-
if (!
|
|
351
|
+
if (!match?.groups) {
|
|
333
352
|
throw new error_1.FirebaseError("Invalid channel name format.");
|
|
334
353
|
}
|
|
335
354
|
const matchedProjectId = match.groups.project;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getRuntimeDelegate =
|
|
3
|
+
exports.getRuntimeDelegate = getRuntimeDelegate;
|
|
4
4
|
const node = require("./node");
|
|
5
5
|
const python = require("./python");
|
|
6
6
|
const validate = require("../validate");
|
|
@@ -21,4 +21,3 @@ async function getRuntimeDelegate(context) {
|
|
|
21
21
|
}
|
|
22
22
|
throw new error_1.FirebaseError(`Could not detect runtime for functions at ${sourceDir}`);
|
|
23
23
|
}
|
|
24
|
-
exports.getRuntimeDelegate = getRuntimeDelegate;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Delegate =
|
|
3
|
+
exports.Delegate = void 0;
|
|
4
|
+
exports.tryCreateDelegate = tryCreateDelegate;
|
|
4
5
|
const os = require("os");
|
|
5
6
|
const fs = require("fs");
|
|
6
7
|
const path = require("path");
|
|
@@ -24,7 +25,7 @@ async function tryCreateDelegate(context) {
|
|
|
24
25
|
try {
|
|
25
26
|
await fs.promises.access(packageJsonPath);
|
|
26
27
|
}
|
|
27
|
-
catch
|
|
28
|
+
catch {
|
|
28
29
|
logger_1.logger.debug("Customer code is not Node");
|
|
29
30
|
return undefined;
|
|
30
31
|
}
|
|
@@ -35,7 +36,6 @@ async function tryCreateDelegate(context) {
|
|
|
35
36
|
}
|
|
36
37
|
return new Delegate(context.projectId, context.projectDir, context.sourceDir, runtime);
|
|
37
38
|
}
|
|
38
|
-
exports.tryCreateDelegate = tryCreateDelegate;
|
|
39
39
|
class Delegate {
|
|
40
40
|
constructor(projectId, projectDir, sourceDir, runtime) {
|
|
41
41
|
this.projectId = projectId;
|
|
@@ -117,8 +117,14 @@ class Delegate {
|
|
|
117
117
|
"Please file a bug on Github (https://github.com/firebase/firebase-tools/).");
|
|
118
118
|
}
|
|
119
119
|
spawnFunctionsProcess(config, envs) {
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
const env = {
|
|
121
|
+
...envs,
|
|
122
|
+
FUNCTIONS_CONTROL_API: "true",
|
|
123
|
+
HOME: process.env.HOME,
|
|
124
|
+
PATH: process.env.PATH,
|
|
125
|
+
NODE_ENV: process.env.NODE_ENV,
|
|
126
|
+
__FIREBASE_FRAMEWORKS_ENTRY__: process.env.__FIREBASE_FRAMEWORKS_ENTRY__,
|
|
127
|
+
};
|
|
122
128
|
if (Object.keys(config || {}).length) {
|
|
123
129
|
env.CLOUD_RUNTIME_CONFIG = JSON.stringify(config);
|
|
124
130
|
}
|
|
@@ -128,19 +134,22 @@ class Delegate {
|
|
|
128
134
|
cwd: this.sourceDir,
|
|
129
135
|
stdio: ["ignore", "pipe", "pipe"],
|
|
130
136
|
});
|
|
131
|
-
|
|
137
|
+
childProcess.stdout?.on("data", (chunk) => {
|
|
132
138
|
logger_1.logger.info(chunk.toString("utf8"));
|
|
133
139
|
});
|
|
134
|
-
|
|
140
|
+
childProcess.stderr?.on("data", (chunk) => {
|
|
135
141
|
logger_1.logger.error(chunk.toString("utf8"));
|
|
136
142
|
});
|
|
137
143
|
return childProcess;
|
|
138
144
|
}
|
|
139
145
|
execAdmin(config, envs, manifestPath) {
|
|
140
|
-
return this.spawnFunctionsProcess(config,
|
|
146
|
+
return this.spawnFunctionsProcess(config, {
|
|
147
|
+
...envs,
|
|
148
|
+
FUNCTIONS_MANIFEST_OUTPUT_PATH: manifestPath,
|
|
149
|
+
});
|
|
141
150
|
}
|
|
142
151
|
serveAdmin(config, envs, port) {
|
|
143
|
-
const childProcess = this.spawnFunctionsProcess(config,
|
|
152
|
+
const childProcess = this.spawnFunctionsProcess(config, { ...envs, PORT: port });
|
|
144
153
|
return Promise.resolve(async () => {
|
|
145
154
|
const p = new Promise((resolve, reject) => {
|
|
146
155
|
childProcess.once("exit", resolve);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.RUNTIME_NOT_SET = void 0;
|
|
4
|
+
exports.getRuntimeChoice = getRuntimeChoice;
|
|
4
5
|
const path = require("path");
|
|
5
6
|
const error_1 = require("../../../../error");
|
|
6
7
|
const supported = require("../supported");
|
|
@@ -35,4 +36,3 @@ function getRuntimeChoiceFromPackageJson(sourceDir) {
|
|
|
35
36
|
function getRuntimeChoice(sourceDir, runtimeFromConfig) {
|
|
36
37
|
return runtimeFromConfig || getRuntimeChoiceFromPackageJson(sourceDir);
|
|
37
38
|
}
|
|
38
|
-
exports.getRuntimeChoice = getRuntimeChoice;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.packageJsonIsValid =
|
|
3
|
+
exports.packageJsonIsValid = packageJsonIsValid;
|
|
4
4
|
const path = require("path");
|
|
5
5
|
const error_1 = require("../../../../error");
|
|
6
6
|
const logger_1 = require("../../../../logger");
|
|
@@ -31,4 +31,3 @@ function packageJsonIsValid(sourceDirName, sourceDir, projectDir) {
|
|
|
31
31
|
throw new error_1.FirebaseError(msg);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
exports.packageJsonIsValid = packageJsonIsValid;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.FUNCTIONS_SDK_VERSION_TOO_OLD_WARNING = void 0;
|
|
4
|
+
exports.findModuleVersion = findModuleVersion;
|
|
5
|
+
exports.getFunctionsSDKVersion = getFunctionsSDKVersion;
|
|
6
|
+
exports.getLatestSDKVersion = getLatestSDKVersion;
|
|
7
|
+
exports.checkFunctionsSDKVersion = checkFunctionsSDKVersion;
|
|
4
8
|
const fs = require("fs");
|
|
5
9
|
const path = require("path");
|
|
6
10
|
const clc = require("colorette");
|
|
@@ -35,7 +39,6 @@ function findModuleVersion(name, resolvedPath) {
|
|
|
35
39
|
searchPath = path.dirname(searchPath);
|
|
36
40
|
}
|
|
37
41
|
}
|
|
38
|
-
exports.findModuleVersion = findModuleVersion;
|
|
39
42
|
function getFunctionsSDKVersion(sourceDir) {
|
|
40
43
|
try {
|
|
41
44
|
return findModuleVersion("firebase-functions", require.resolve("firebase-functions", { paths: [sourceDir] }));
|
|
@@ -48,9 +51,7 @@ function getFunctionsSDKVersion(sourceDir) {
|
|
|
48
51
|
return;
|
|
49
52
|
}
|
|
50
53
|
}
|
|
51
|
-
exports.getFunctionsSDKVersion = getFunctionsSDKVersion;
|
|
52
54
|
function getLatestSDKVersion() {
|
|
53
|
-
var _a;
|
|
54
55
|
const child = spawn.sync("npm", ["show", "firebase-functions", "--json=true"], {
|
|
55
56
|
encoding: "utf8",
|
|
56
57
|
timeout: NPM_COMMAND_TIMEOUT_MILLIES,
|
|
@@ -63,9 +64,8 @@ function getLatestSDKVersion() {
|
|
|
63
64
|
if (Object.keys(output).length === 0) {
|
|
64
65
|
return;
|
|
65
66
|
}
|
|
66
|
-
return
|
|
67
|
+
return output["dist-tags"]?.["latest"];
|
|
67
68
|
}
|
|
68
|
-
exports.getLatestSDKVersion = getLatestSDKVersion;
|
|
69
69
|
function checkFunctionsSDKVersion(currentVersion) {
|
|
70
70
|
try {
|
|
71
71
|
if (semver.lt(currentVersion, MIN_SDK_VERSION)) {
|
|
@@ -92,4 +92,3 @@ function checkFunctionsSDKVersion(currentVersion) {
|
|
|
92
92
|
return;
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
|
-
exports.checkFunctionsSDKVersion = checkFunctionsSDKVersion;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Delegate =
|
|
3
|
+
exports.Delegate = void 0;
|
|
4
|
+
exports.tryCreateDelegate = tryCreateDelegate;
|
|
5
|
+
exports.getPythonBinary = getPythonBinary;
|
|
4
6
|
const fs = require("fs");
|
|
5
7
|
const path = require("path");
|
|
6
8
|
const node_fetch_1 = require("node-fetch");
|
|
@@ -13,13 +15,12 @@ const python_1 = require("../../../../functions/python");
|
|
|
13
15
|
const error_1 = require("../../../../error");
|
|
14
16
|
const functional_1 = require("../../../../functional");
|
|
15
17
|
async function tryCreateDelegate(context) {
|
|
16
|
-
var _a;
|
|
17
18
|
const requirementsTextPath = path.join(context.sourceDir, "requirements.txt");
|
|
18
19
|
if (!(await (0, util_1.promisify)(fs.exists)(requirementsTextPath))) {
|
|
19
20
|
logger_1.logger.debug("Customer code is not Python code.");
|
|
20
21
|
return;
|
|
21
22
|
}
|
|
22
|
-
const runtime =
|
|
23
|
+
const runtime = context.runtime ?? supported.latest("python");
|
|
23
24
|
if (!supported.isRuntime(runtime)) {
|
|
24
25
|
throw new error_1.FirebaseError(`Runtime ${runtime} is not a valid Python runtime`);
|
|
25
26
|
}
|
|
@@ -28,7 +29,6 @@ async function tryCreateDelegate(context) {
|
|
|
28
29
|
}
|
|
29
30
|
return Promise.resolve(new Delegate(context.projectId, context.sourceDir, runtime));
|
|
30
31
|
}
|
|
31
|
-
exports.tryCreateDelegate = tryCreateDelegate;
|
|
32
32
|
function getPythonBinary(runtime) {
|
|
33
33
|
if (process.platform === "win32") {
|
|
34
34
|
return "python.exe";
|
|
@@ -47,7 +47,6 @@ function getPythonBinary(runtime) {
|
|
|
47
47
|
}
|
|
48
48
|
(0, functional_1.assertExhaustive)(runtime, `Unhandled python runtime ${runtime}`);
|
|
49
49
|
}
|
|
50
|
-
exports.getPythonBinary = getPythonBinary;
|
|
51
50
|
class Delegate {
|
|
52
51
|
constructor(projectId, sourceDir, runtime) {
|
|
53
52
|
this.projectId = projectId;
|
|
@@ -64,7 +63,6 @@ class Delegate {
|
|
|
64
63
|
return this._bin;
|
|
65
64
|
}
|
|
66
65
|
async modulesDir() {
|
|
67
|
-
var _a, _b;
|
|
68
66
|
if (!this._modulesDir) {
|
|
69
67
|
let out = "";
|
|
70
68
|
let stderr = "";
|
|
@@ -73,12 +71,12 @@ class Delegate {
|
|
|
73
71
|
"-c",
|
|
74
72
|
'"import firebase_functions; import os; print(os.path.dirname(firebase_functions.__file__))"',
|
|
75
73
|
], this.sourceDir, {});
|
|
76
|
-
|
|
74
|
+
child.stderr?.on("data", (chunk) => {
|
|
77
75
|
const chunkString = chunk.toString();
|
|
78
76
|
stderr = stderr + chunkString;
|
|
79
77
|
logger_1.logger.debug(`stderr: ${chunkString}`);
|
|
80
78
|
});
|
|
81
|
-
|
|
79
|
+
child.stdout?.on("data", (chunk) => {
|
|
82
80
|
const chunkString = chunk.toString();
|
|
83
81
|
out = out + chunkString;
|
|
84
82
|
logger_1.logger.debug(`stdout: ${chunkString}`);
|
|
@@ -113,16 +111,18 @@ class Delegate {
|
|
|
113
111
|
return Promise.resolve();
|
|
114
112
|
}
|
|
115
113
|
async serveAdmin(port, envs) {
|
|
116
|
-
var _a, _b;
|
|
117
114
|
const modulesDir = await this.modulesDir();
|
|
118
|
-
const envWithAdminPort =
|
|
115
|
+
const envWithAdminPort = {
|
|
116
|
+
...envs,
|
|
117
|
+
ADMIN_PORT: port.toString(),
|
|
118
|
+
};
|
|
119
119
|
const args = [this.bin, `"${path.join(modulesDir, "private", "serving.py")}"`];
|
|
120
120
|
logger_1.logger.debug(`Running admin server with args: ${JSON.stringify(args)} and env: ${JSON.stringify(envWithAdminPort)} in ${this.sourceDir}`);
|
|
121
121
|
const childProcess = (0, python_1.runWithVirtualEnv)(args, this.sourceDir, envWithAdminPort);
|
|
122
|
-
|
|
122
|
+
childProcess.stdout?.on("data", (chunk) => {
|
|
123
123
|
logger_1.logger.info(chunk.toString("utf8"));
|
|
124
124
|
});
|
|
125
|
-
|
|
125
|
+
childProcess.stderr?.on("data", (chunk) => {
|
|
126
126
|
logger_1.logger.error(chunk.toString("utf8"));
|
|
127
127
|
});
|
|
128
128
|
return Promise.resolve(async () => {
|