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,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 () => {
|
|
@@ -14,7 +14,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
17
|
+
exports.isRuntime = isRuntime;
|
|
18
|
+
exports.runtimeIsLanguage = runtimeIsLanguage;
|
|
19
|
+
exports.latest = latest;
|
|
20
|
+
exports.isDecommissioned = isDecommissioned;
|
|
21
|
+
exports.guardVersionSupport = guardVersionSupport;
|
|
18
22
|
const error_1 = require("../../../../error");
|
|
19
23
|
const utils = require("../../../../utils");
|
|
20
24
|
const types_1 = require("./types");
|
|
@@ -22,11 +26,9 @@ __exportStar(require("./types"), exports);
|
|
|
22
26
|
function isRuntime(maybe) {
|
|
23
27
|
return maybe in types_1.RUNTIMES;
|
|
24
28
|
}
|
|
25
|
-
exports.isRuntime = isRuntime;
|
|
26
29
|
function runtimeIsLanguage(runtime, language) {
|
|
27
30
|
return runtime.startsWith(language);
|
|
28
31
|
}
|
|
29
|
-
exports.runtimeIsLanguage = runtimeIsLanguage;
|
|
30
32
|
function latest(language, runtimes = Object.keys(types_1.RUNTIMES)) {
|
|
31
33
|
const sorted = runtimes
|
|
32
34
|
.filter((s) => runtimeIsLanguage(s, language))
|
|
@@ -46,12 +48,10 @@ function latest(language, runtimes = Object.keys(types_1.RUNTIMES)) {
|
|
|
46
48
|
}
|
|
47
49
|
return latest;
|
|
48
50
|
}
|
|
49
|
-
exports.latest = latest;
|
|
50
51
|
function isDecommissioned(runtime, now = new Date()) {
|
|
51
52
|
const cutoff = new Date(types_1.RUNTIMES[runtime].decommissionDate);
|
|
52
53
|
return cutoff < now;
|
|
53
54
|
}
|
|
54
|
-
exports.isDecommissioned = isDecommissioned;
|
|
55
55
|
function guardVersionSupport(runtime, now = new Date()) {
|
|
56
56
|
const { deprecationDate, decommissionDate } = types_1.RUNTIMES[runtime];
|
|
57
57
|
const decommission = new Date(decommissionDate);
|
|
@@ -77,4 +77,3 @@ function guardVersionSupport(runtime, now = new Date()) {
|
|
|
77
77
|
"details on the lifecycle policy");
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
-
exports.guardVersionSupport = guardVersionSupport;
|
|
@@ -27,22 +27,21 @@ class AuthBlockingService {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
configChanged(newConfig, config) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
((_p = (_o = newConfig.triggers) === null || _o === void 0 ? void 0 : _o.beforeSendSms) === null || _p === void 0 ? void 0 : _p.functionUri) !== ((_r = (_q = config.triggers) === null || _q === void 0 ? void 0 : _q.beforeSendSms) === null || _r === void 0 ? void 0 : _r.functionUri)) {
|
|
30
|
+
if (newConfig.triggers?.beforeCreate?.functionUri !==
|
|
31
|
+
config.triggers?.beforeCreate?.functionUri ||
|
|
32
|
+
newConfig.triggers?.beforeSignIn?.functionUri !==
|
|
33
|
+
config.triggers?.beforeSignIn?.functionUri ||
|
|
34
|
+
newConfig.triggers?.beforeSendEmail?.functionUri !==
|
|
35
|
+
config.triggers?.beforeSendEmail?.functionUri ||
|
|
36
|
+
newConfig.triggers?.beforeSendSms?.functionUri !== config.triggers?.beforeSendSms?.functionUri) {
|
|
38
37
|
return true;
|
|
39
38
|
}
|
|
40
|
-
if (!!
|
|
41
|
-
!!
|
|
42
|
-
!!
|
|
43
|
-
!!
|
|
44
|
-
!!
|
|
45
|
-
!!
|
|
39
|
+
if (!!newConfig.forwardInboundCredentials?.accessToken !==
|
|
40
|
+
!!config.forwardInboundCredentials?.accessToken ||
|
|
41
|
+
!!newConfig.forwardInboundCredentials?.idToken !==
|
|
42
|
+
!!config.forwardInboundCredentials?.idToken ||
|
|
43
|
+
!!newConfig.forwardInboundCredentials?.refreshToken !==
|
|
44
|
+
!!config.forwardInboundCredentials?.refreshToken) {
|
|
46
45
|
return true;
|
|
47
46
|
}
|
|
48
47
|
return false;
|
|
@@ -51,29 +50,44 @@ class AuthBlockingService {
|
|
|
51
50
|
const newBlockingConfig = await identityPlatform.getBlockingFunctionsConfig(endpoint.project);
|
|
52
51
|
const oldBlockingConfig = (0, utils_1.cloneDeep)(newBlockingConfig);
|
|
53
52
|
if (endpoint.blockingTrigger.eventType === events.v1.BEFORE_CREATE_EVENT) {
|
|
54
|
-
newBlockingConfig.triggers =
|
|
53
|
+
newBlockingConfig.triggers = {
|
|
54
|
+
...newBlockingConfig.triggers,
|
|
55
|
+
beforeCreate: {
|
|
55
56
|
functionUri: endpoint.uri,
|
|
56
|
-
}
|
|
57
|
+
},
|
|
58
|
+
};
|
|
57
59
|
}
|
|
58
60
|
else if (endpoint.blockingTrigger.eventType === events.v1.BEFORE_SIGN_IN_EVENT) {
|
|
59
|
-
newBlockingConfig.triggers =
|
|
61
|
+
newBlockingConfig.triggers = {
|
|
62
|
+
...newBlockingConfig.triggers,
|
|
63
|
+
beforeSignIn: {
|
|
60
64
|
functionUri: endpoint.uri,
|
|
61
|
-
}
|
|
65
|
+
},
|
|
66
|
+
};
|
|
62
67
|
}
|
|
63
68
|
else if (endpoint.blockingTrigger.eventType === events.v1.BEFORE_SEND_EMAIL_EVENT) {
|
|
64
|
-
newBlockingConfig.triggers =
|
|
69
|
+
newBlockingConfig.triggers = {
|
|
70
|
+
...newBlockingConfig.triggers,
|
|
71
|
+
beforeSendEmail: {
|
|
65
72
|
functionUri: endpoint.uri,
|
|
66
|
-
}
|
|
73
|
+
},
|
|
74
|
+
};
|
|
67
75
|
}
|
|
68
76
|
else if (endpoint.blockingTrigger.eventType === events.v1.BEFORE_SEND_SMS_EVENT) {
|
|
69
|
-
newBlockingConfig.triggers =
|
|
77
|
+
newBlockingConfig.triggers = {
|
|
78
|
+
...newBlockingConfig.triggers,
|
|
79
|
+
beforeSendSms: {
|
|
70
80
|
functionUri: endpoint.uri,
|
|
71
|
-
}
|
|
81
|
+
},
|
|
82
|
+
};
|
|
72
83
|
}
|
|
73
84
|
else {
|
|
74
85
|
throw new error_1.FirebaseError(`Received invalid blocking trigger event type ${endpoint.blockingTrigger.eventType}`);
|
|
75
86
|
}
|
|
76
|
-
newBlockingConfig.forwardInboundCredentials =
|
|
87
|
+
newBlockingConfig.forwardInboundCredentials = {
|
|
88
|
+
...oldBlockingConfig.forwardInboundCredentials,
|
|
89
|
+
...endpoint.blockingTrigger.options,
|
|
90
|
+
};
|
|
77
91
|
if (!this.configChanged(newBlockingConfig, oldBlockingConfig)) {
|
|
78
92
|
return;
|
|
79
93
|
}
|
|
@@ -87,25 +101,24 @@ class AuthBlockingService {
|
|
|
87
101
|
return this.triggerQueue;
|
|
88
102
|
}
|
|
89
103
|
async unregisterTriggerLocked(endpoint) {
|
|
90
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
|
|
91
104
|
const blockingConfig = await identityPlatform.getBlockingFunctionsConfig(endpoint.project);
|
|
92
|
-
if (endpoint.uri !==
|
|
93
|
-
endpoint.uri !==
|
|
94
|
-
endpoint.uri !==
|
|
95
|
-
endpoint.uri !==
|
|
105
|
+
if (endpoint.uri !== blockingConfig.triggers?.beforeCreate?.functionUri &&
|
|
106
|
+
endpoint.uri !== blockingConfig.triggers?.beforeSignIn?.functionUri &&
|
|
107
|
+
endpoint.uri !== blockingConfig.triggers?.beforeSendEmail?.functionUri &&
|
|
108
|
+
endpoint.uri !== blockingConfig.triggers?.beforeSendSms?.functionUri) {
|
|
96
109
|
return;
|
|
97
110
|
}
|
|
98
|
-
if (endpoint.uri ===
|
|
99
|
-
|
|
111
|
+
if (endpoint.uri === blockingConfig.triggers?.beforeCreate?.functionUri) {
|
|
112
|
+
delete blockingConfig.triggers?.beforeCreate;
|
|
100
113
|
}
|
|
101
|
-
if (endpoint.uri ===
|
|
102
|
-
|
|
114
|
+
if (endpoint.uri === blockingConfig.triggers?.beforeSignIn?.functionUri) {
|
|
115
|
+
delete blockingConfig.triggers?.beforeSignIn;
|
|
103
116
|
}
|
|
104
|
-
if (endpoint.uri ===
|
|
105
|
-
|
|
117
|
+
if (endpoint.uri === blockingConfig.triggers?.beforeSendEmail?.functionUri) {
|
|
118
|
+
delete blockingConfig.triggers?.beforeSendEmail;
|
|
106
119
|
}
|
|
107
|
-
if (endpoint.uri ===
|
|
108
|
-
|
|
120
|
+
if (endpoint.uri === blockingConfig.triggers?.beforeSendSms?.functionUri) {
|
|
121
|
+
delete blockingConfig.triggers?.beforeSendSms;
|
|
109
122
|
}
|
|
110
123
|
await identityPlatform.setBlockingFunctionsConfig(endpoint.project, blockingConfig);
|
|
111
124
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ensureDatabaseTriggerRegion =
|
|
3
|
+
exports.ensureDatabaseTriggerRegion = ensureDatabaseTriggerRegion;
|
|
4
4
|
const error_1 = require("../../../error");
|
|
5
5
|
function ensureDatabaseTriggerRegion(endpoint) {
|
|
6
6
|
if (!endpoint.eventTrigger.region) {
|
|
@@ -11,4 +11,3 @@ function ensureDatabaseTriggerRegion(endpoint) {
|
|
|
11
11
|
}
|
|
12
12
|
return Promise.resolve();
|
|
13
13
|
}
|
|
14
|
-
exports.ensureDatabaseTriggerRegion = ensureDatabaseTriggerRegion;
|