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,129 +1,78 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const
|
|
5
|
-
const util_1 = require("../../util");
|
|
6
|
-
const reports_1 = require("../../../crashlytics/reports");
|
|
3
|
+
exports.get_report = void 0;
|
|
4
|
+
const js_yaml_1 = require("js-yaml");
|
|
7
5
|
const filters_1 = require("../../../crashlytics/filters");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
if (additionalPrompt) {
|
|
26
|
-
reportResponse.usage = (reportResponse.usage || "").concat("\n", additionalPrompt);
|
|
27
|
-
}
|
|
28
|
-
return (0, util_1.toContent)(reportResponse);
|
|
6
|
+
const reports_1 = require("../../../crashlytics/reports");
|
|
7
|
+
const tool_1 = require("../../tool");
|
|
8
|
+
const app_id_1 = require("../../resources/guides/app_id");
|
|
9
|
+
const DUMP_OPTIONS = { lineWidth: 200 };
|
|
10
|
+
const REPORT_ERROR_CONTENT = `
|
|
11
|
+
Must specify the desired report:
|
|
12
|
+
* TOP_ISSUES - metrics grouped by *issue*.
|
|
13
|
+
* TOP_VARIANTS - metrics grouped by issue *variant*
|
|
14
|
+
* TOP_VERSIONS - metrics grouped by *version*
|
|
15
|
+
* TOP_OPERATING_SYSTEMS - metrics grouped by *operating system*
|
|
16
|
+
* TOP_ANDROID_DEVICES - metrics grouped by *device*
|
|
17
|
+
* TOP_APPLE_DEVICES - metrics grouped by *device*
|
|
18
|
+
`.trim();
|
|
19
|
+
function toText(response, filters) {
|
|
20
|
+
const result = {
|
|
21
|
+
name: response.name || "",
|
|
22
|
+
filters: (0, js_yaml_1.dump)(filters, DUMP_OPTIONS),
|
|
29
23
|
};
|
|
24
|
+
for (const [key, value] of Object.entries(response)) {
|
|
25
|
+
if (key === "name") {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
result[key] = (0, js_yaml_1.dump)(value, DUMP_OPTIONS);
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
30
31
|
}
|
|
31
|
-
exports.
|
|
32
|
-
name: "
|
|
33
|
-
description: `Use this to
|
|
34
|
-
|
|
35
|
-
Only counts events matching the given filters.`,
|
|
36
|
-
inputSchema: reports_1.ReportInputSchema,
|
|
37
|
-
annotations: {
|
|
38
|
-
title: "Get Crashlytics Top Issues Report",
|
|
39
|
-
readOnlyHint: true,
|
|
40
|
-
},
|
|
41
|
-
_meta: {
|
|
42
|
-
requiresAuth: true,
|
|
43
|
-
},
|
|
44
|
-
}, getReportContent(reports_1.CrashlyticsReport.TopIssues, `The crashlytics_batch_get_event tool can retrieve the sample events in this response.
|
|
45
|
-
Pass the sampleEvent in the names field.
|
|
46
|
-
The crashlytics_list_events tool can retrieve a list of events for an issue in this response.
|
|
47
|
-
Pass the issue.id in the filter.issueId field.`));
|
|
48
|
-
exports.get_top_variants = (0, tool_1.tool)("crashlytics", {
|
|
49
|
-
name: "get_top_variants",
|
|
50
|
-
description: `Counts events and distinct impacted users, grouped by issue *variant*.
|
|
51
|
-
Groups are sorted by event count, in descending order.
|
|
52
|
-
Only counts events matching the given filters.`,
|
|
53
|
-
inputSchema: reports_1.ReportInputSchema,
|
|
54
|
-
annotations: {
|
|
55
|
-
title: "Get Crashlytics Top Variants Report",
|
|
56
|
-
readOnlyHint: true,
|
|
57
|
-
},
|
|
58
|
-
_meta: {
|
|
59
|
-
requiresAuth: true,
|
|
60
|
-
},
|
|
61
|
-
}, getReportContent(reports_1.CrashlyticsReport.TopVariants, `The crashlytics_get_top_issues tool can report the top issues for the variants in this response.
|
|
62
|
-
Pass the variant.displayName in the filter.variantDisplayNames field.
|
|
63
|
-
The crashlytics_list_events tool can retrieve a list of events for a variant in this response.`));
|
|
64
|
-
exports.get_top_versions = (0, tool_1.tool)("crashlytics", {
|
|
65
|
-
name: "get_top_versions",
|
|
66
|
-
description: `Counts events and distinct impacted users, grouped by *version*.
|
|
67
|
-
Groups are sorted by event count, in descending order.
|
|
68
|
-
Only counts events matching the given filters.`,
|
|
32
|
+
exports.get_report = (0, tool_1.tool)("crashlytics", {
|
|
33
|
+
name: "get_report",
|
|
34
|
+
description: `Use this to request numerical reports from Crashlytics. The result aggregates the sum of events and impacted users, grouped by a dimension appropriate for that report. Agents must read the [Firebase Crashlytics Reports Guide](firebase://guides/crashlytics/reports) using the \`firebase_read_resources\` tool before calling to understand criticial prerequisites for requesting reports and how to interpret the results.
|
|
35
|
+
`.trim(),
|
|
69
36
|
inputSchema: reports_1.ReportInputSchema,
|
|
70
37
|
annotations: {
|
|
71
|
-
title: "Get Crashlytics
|
|
38
|
+
title: "Get Crashlytics Report",
|
|
72
39
|
readOnlyHint: true,
|
|
73
40
|
},
|
|
74
41
|
_meta: {
|
|
75
42
|
requiresAuth: true,
|
|
76
43
|
},
|
|
77
|
-
},
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
Pass the device.displayName in the filter.deviceDisplayNames field.
|
|
113
|
-
The crashlytics_list_events tool can retrieve a list of events for a device in this response.`));
|
|
114
|
-
exports.get_top_operating_systems = (0, tool_1.tool)("crashlytics", {
|
|
115
|
-
name: "get_top_operating_systems",
|
|
116
|
-
description: `Counts events and distinct impacted users, grouped by *operating system*.
|
|
117
|
-
Groups are sorted by event count, in descending order.
|
|
118
|
-
Only counts events matching the given filters.`,
|
|
119
|
-
inputSchema: reports_1.ReportInputSchema,
|
|
120
|
-
annotations: {
|
|
121
|
-
title: "Get Crashlytics Top Operating Systems Report",
|
|
122
|
-
readOnlyHint: true,
|
|
123
|
-
},
|
|
124
|
-
_meta: {
|
|
125
|
-
requiresAuth: true,
|
|
126
|
-
},
|
|
127
|
-
}, getReportContent(reports_1.CrashlyticsReport.TopOperatingSystems, `The crashlytics_get_top_issues tool can report the top issues for the operating systems in this response.
|
|
128
|
-
Pass the operatingSystem.displayName in the filter.operatingSystemDisplayNames field.
|
|
129
|
-
The crashlytics_list_events tool can retrieve a list of events for an operating system in this response.`));
|
|
44
|
+
}, async ({ appId, report, pageSize, filter }) => {
|
|
45
|
+
const result = { content: [] };
|
|
46
|
+
if (!report) {
|
|
47
|
+
result.isError = true;
|
|
48
|
+
result.content.push({ type: "text", text: `Error: ${REPORT_ERROR_CONTENT}` });
|
|
49
|
+
}
|
|
50
|
+
if (!appId) {
|
|
51
|
+
result.isError = true;
|
|
52
|
+
result.content.push({ type: "text", text: "Must specify 'appId' parameter" });
|
|
53
|
+
result.content.push({ type: "text", text: app_id_1.RESOURCE_CONTENT });
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
filter = (0, filters_1.validateEventFilters)(filter || {});
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
result.isError = true;
|
|
60
|
+
result.content.push({ type: "text", text: `Error: ${error.message}` });
|
|
61
|
+
}
|
|
62
|
+
if (result.content.length > 0) {
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
const reportResponse = (0, reports_1.simplifyReport)(await (0, reports_1.getReport)(report, appId, filter, pageSize));
|
|
66
|
+
reportResponse.usage =
|
|
67
|
+
reportResponse.groups && reportResponse.groups.length
|
|
68
|
+
? reportResponse.usage || ""
|
|
69
|
+
: "This report response contains no results.";
|
|
70
|
+
return {
|
|
71
|
+
content: [
|
|
72
|
+
{
|
|
73
|
+
type: "text",
|
|
74
|
+
text: (0, js_yaml_1.dump)(toText(reportResponse, filter), DUMP_OPTIONS),
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
};
|
|
78
|
+
});
|
|
@@ -68,15 +68,14 @@ exports.list_services = (0, tool_1.tool)("dataconnect", {
|
|
|
68
68
|
const remoteOnlyServices = Array.from(serviceInfos.values()).filter((s) => !s.local);
|
|
69
69
|
const output = [];
|
|
70
70
|
function includeDeployedServiceInfo(deployed) {
|
|
71
|
-
|
|
72
|
-
if ((_a = deployed.schemas) === null || _a === void 0 ? void 0 : _a.length) {
|
|
71
|
+
if (deployed.schemas?.length) {
|
|
73
72
|
output.push(`### Schemas`);
|
|
74
73
|
for (const s of deployed.schemas) {
|
|
75
74
|
clearCCFEFields(s);
|
|
76
75
|
output.push((0, js_yaml_1.dump)(s));
|
|
77
76
|
}
|
|
78
77
|
}
|
|
79
|
-
if (
|
|
78
|
+
if (deployed.connectors?.length) {
|
|
80
79
|
output.push(`### Connectors`);
|
|
81
80
|
for (const c of deployed.connectors) {
|
|
82
81
|
clearCCFEFields(c);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.convertInputToValue = convertInputToValue;
|
|
4
|
+
exports.firestoreDocumentToJson = firestoreDocumentToJson;
|
|
4
5
|
const logger_1 = require("../../../logger");
|
|
5
6
|
function convertInputToValue(inputValue) {
|
|
6
7
|
if (inputValue === null) {
|
|
@@ -47,9 +48,7 @@ function convertInputToValue(inputValue) {
|
|
|
47
48
|
}
|
|
48
49
|
return { nullValue: null };
|
|
49
50
|
}
|
|
50
|
-
exports.convertInputToValue = convertInputToValue;
|
|
51
51
|
function firestoreValueToJson(firestoreValue) {
|
|
52
|
-
var _a, _b;
|
|
53
52
|
if ("nullValue" in firestoreValue)
|
|
54
53
|
return null;
|
|
55
54
|
if ("booleanValue" in firestoreValue)
|
|
@@ -77,7 +76,7 @@ function firestoreValueToJson(firestoreValue) {
|
|
|
77
76
|
value: [firestoreValue.geoPointValue.latitude, firestoreValue.geoPointValue.longitude],
|
|
78
77
|
};
|
|
79
78
|
if ("arrayValue" in firestoreValue)
|
|
80
|
-
return
|
|
79
|
+
return firestoreValue.arrayValue.values?.map((v) => firestoreValueToJson(v)) ?? [];
|
|
81
80
|
if ("mapValue" in firestoreValue) {
|
|
82
81
|
const map = firestoreValue.mapValue.fields || {};
|
|
83
82
|
const obj = {};
|
|
@@ -100,4 +99,3 @@ function firestoreDocumentToJson(firestoreDoc) {
|
|
|
100
99
|
}
|
|
101
100
|
return result;
|
|
102
101
|
}
|
|
103
|
-
exports.firestoreDocumentToJson = firestoreDocumentToJson;
|
|
@@ -38,7 +38,7 @@ exports.delete_document = (0, tool_1.tool)("firestore", {
|
|
|
38
38
|
return (0, util_1.mcpError)(`None of the specified documents were found in project '${projectId}'`);
|
|
39
39
|
}
|
|
40
40
|
const firestoreDelete = new delete_1.FirestoreDelete(projectId, path, {
|
|
41
|
-
databaseId: database
|
|
41
|
+
databaseId: database ?? "(default)",
|
|
42
42
|
urlPrefix: emulatorUrl,
|
|
43
43
|
});
|
|
44
44
|
await firestoreDelete.execute();
|
|
@@ -86,8 +86,8 @@ exports.get_logs = (0, tool_1.tool)("functions", {
|
|
|
86
86
|
requiresProject: true,
|
|
87
87
|
},
|
|
88
88
|
}, async ({ function_names, page_size, order, page_token, min_severity, start_time, end_time, filter }, { projectId }) => {
|
|
89
|
-
const resolvedOrder =
|
|
90
|
-
const resolvedPageSize = page_size
|
|
89
|
+
const resolvedOrder = order?.toLowerCase() === "asc" ? "asc" : "desc";
|
|
90
|
+
const resolvedPageSize = page_size ?? 50;
|
|
91
91
|
const normalizedSelectors = normalizeFunctionSelectors(function_names);
|
|
92
92
|
const filterParts = [(0, functionslog_1.getApiFilter)(normalizedSelectors)];
|
|
93
93
|
if (min_severity) {
|
|
@@ -115,18 +115,20 @@ exports.get_logs = (0, tool_1.tool)("functions", {
|
|
|
115
115
|
try {
|
|
116
116
|
const { entries, nextPageToken } = await (0, cloudlogging_1.listEntries)(projectId, combinedFilter, resolvedPageSize, resolvedOrder, page_token);
|
|
117
117
|
const formattedEntries = entries.map((entry) => {
|
|
118
|
-
|
|
119
|
-
const
|
|
120
|
-
const payload = (_k = (_j = (_h = (_g = entry.textPayload) !== null && _g !== void 0 ? _g : entry.jsonPayload) !== null && _h !== void 0 ? _h : entry.protoPayload) !== null && _j !== void 0 ? _j : entry.labels) !== null && _k !== void 0 ? _k : null;
|
|
118
|
+
const functionName = entry.resource?.labels?.function_name ?? entry.resource?.labels?.service_name ?? null;
|
|
119
|
+
const payload = entry.textPayload ?? entry.jsonPayload ?? entry.protoPayload ?? entry.labels ?? null;
|
|
121
120
|
return {
|
|
122
|
-
timestamp:
|
|
123
|
-
severity:
|
|
121
|
+
timestamp: entry.timestamp ?? entry.receiveTimestamp ?? null,
|
|
122
|
+
severity: entry.severity ?? "DEFAULT",
|
|
124
123
|
function: functionName,
|
|
125
|
-
message:
|
|
124
|
+
message: entry.textPayload ??
|
|
125
|
+
(entry.jsonPayload ? JSON.stringify(entry.jsonPayload) : undefined) ??
|
|
126
|
+
(entry.protoPayload ? JSON.stringify(entry.protoPayload) : undefined) ??
|
|
127
|
+
"",
|
|
126
128
|
payload,
|
|
127
129
|
log_name: entry.logName,
|
|
128
|
-
trace:
|
|
129
|
-
span_id:
|
|
130
|
+
trace: entry.trace ?? null,
|
|
131
|
+
span_id: entry.spanId ?? null,
|
|
130
132
|
};
|
|
131
133
|
});
|
|
132
134
|
const response = {
|
|
@@ -134,7 +136,7 @@ exports.get_logs = (0, tool_1.tool)("functions", {
|
|
|
134
136
|
order: resolvedOrder,
|
|
135
137
|
page_size: resolvedPageSize,
|
|
136
138
|
entries: resolvedOrder === "asc" ? formattedEntries : formattedEntries.reverse(),
|
|
137
|
-
next_page_token: nextPageToken
|
|
139
|
+
next_page_token: nextPageToken ?? null,
|
|
138
140
|
has_more: Boolean(nextPageToken),
|
|
139
141
|
};
|
|
140
142
|
if (!entries.length) {
|
|
@@ -145,7 +147,7 @@ exports.get_logs = (0, tool_1.tool)("functions", {
|
|
|
145
147
|
return (0, util_1.toContent)(response);
|
|
146
148
|
}
|
|
147
149
|
catch (err) {
|
|
148
|
-
const errMsg = (0, error_1.getErrMsg)(
|
|
150
|
+
const errMsg = (0, error_1.getErrMsg)(err?.original || err, "Failed to retrieve Cloud Logging entries.");
|
|
149
151
|
return (0, util_1.mcpError)(errMsg);
|
|
150
152
|
}
|
|
151
153
|
});
|
|
@@ -42,7 +42,7 @@ exports.list_functions = (0, tool_1.tool)("functions", {
|
|
|
42
42
|
return (0, util_1.toContent)(formattedList);
|
|
43
43
|
}
|
|
44
44
|
catch (err) {
|
|
45
|
-
const errMsg = (0, error_1.getErrMsg)(
|
|
45
|
+
const errMsg = (0, error_1.getErrMsg)(err?.original || err, "Failed to list functions.");
|
|
46
46
|
return (0, util_1.mcpError)(errMsg);
|
|
47
47
|
}
|
|
48
48
|
});
|
package/lib/mcp/tools/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.availableTools = availableTools;
|
|
4
|
+
exports.markdownDocsOfTools = markdownDocsOfTools;
|
|
4
5
|
const index_1 = require("./apphosting/index");
|
|
5
6
|
const index_2 = require("./apptesting/index");
|
|
6
7
|
const index_3 = require("./auth/index");
|
|
@@ -14,7 +15,17 @@ const index_10 = require("./realtime_database/index");
|
|
|
14
15
|
const index_11 = require("./remoteconfig/index");
|
|
15
16
|
const index_12 = require("./storage/index");
|
|
16
17
|
function addFeaturePrefix(feature, tools) {
|
|
17
|
-
return tools.map((tool) => (
|
|
18
|
+
return tools.map((tool) => ({
|
|
19
|
+
...tool,
|
|
20
|
+
mcp: {
|
|
21
|
+
...tool.mcp,
|
|
22
|
+
name: `${feature}_${tool.mcp.name}`,
|
|
23
|
+
_meta: {
|
|
24
|
+
...tool.mcp._meta,
|
|
25
|
+
feature,
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
}));
|
|
18
29
|
}
|
|
19
30
|
const tools = {
|
|
20
31
|
apphosting: addFeaturePrefix("apphosting", index_1.appHostingTools),
|
|
@@ -45,12 +56,12 @@ function getToolsByName(names) {
|
|
|
45
56
|
return Array.from(selectedTools);
|
|
46
57
|
}
|
|
47
58
|
function getToolsByFeature(serverFeatures) {
|
|
48
|
-
const features = new Set(
|
|
59
|
+
const features = new Set(serverFeatures?.length ? serverFeatures : Object.keys(tools));
|
|
49
60
|
features.add("core");
|
|
50
61
|
return Array.from(features).flatMap((feature) => tools[feature] || []);
|
|
51
62
|
}
|
|
52
63
|
async function availableTools(ctx, activeFeatures, enabledTools) {
|
|
53
|
-
if (enabledTools
|
|
64
|
+
if (enabledTools?.length) {
|
|
54
65
|
return getToolsByName(enabledTools);
|
|
55
66
|
}
|
|
56
67
|
const allTools = getToolsByFeature(activeFeatures);
|
|
@@ -62,22 +73,19 @@ async function availableTools(ctx, activeFeatures, enabledTools) {
|
|
|
62
73
|
}));
|
|
63
74
|
return allTools.filter((_, i) => availabilities[i]);
|
|
64
75
|
}
|
|
65
|
-
exports.availableTools = availableTools;
|
|
66
76
|
function markdownDocsOfTools() {
|
|
67
|
-
var _a, _b, _c;
|
|
68
77
|
const allTools = getToolsByFeature([]);
|
|
69
78
|
let doc = `
|
|
70
79
|
| Tool Name | Feature Group | Description |
|
|
71
80
|
| --------- | ------------- | ----------- |`;
|
|
72
81
|
for (const tool of allTools) {
|
|
73
|
-
let feature =
|
|
82
|
+
let feature = tool.mcp?._meta?.feature || "";
|
|
74
83
|
if (feature === "firebase") {
|
|
75
84
|
feature = "core";
|
|
76
85
|
}
|
|
77
|
-
const description = (
|
|
86
|
+
const description = (tool.mcp?.description || "").replaceAll("\n", "<br>");
|
|
78
87
|
doc += `
|
|
79
88
|
| ${tool.mcp.name} | ${feature} | ${description} |`;
|
|
80
89
|
}
|
|
81
90
|
return doc;
|
|
82
91
|
}
|
|
83
|
-
exports.markdownDocsOfTools = markdownDocsOfTools;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isAppTestingAvailable =
|
|
3
|
+
exports.isAppTestingAvailable = isAppTestingAvailable;
|
|
4
4
|
const api_1 = require("../../../api");
|
|
5
5
|
const appUtils_1 = require("../../../appUtils");
|
|
6
6
|
const ensureApiEnabled_1 = require("../../../ensureApiEnabled");
|
|
@@ -21,4 +21,3 @@ async function isAppTestingAvailable(ctx) {
|
|
|
21
21
|
return true;
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
-
exports.isAppTestingAvailable = isAppTestingAvailable;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getDefaultFeatureAvailabilityCheck =
|
|
3
|
+
exports.getDefaultFeatureAvailabilityCheck = getDefaultFeatureAvailabilityCheck;
|
|
4
4
|
const util_1 = require("../util");
|
|
5
5
|
const availability_1 = require("./crashlytics/availability");
|
|
6
6
|
const availability_2 = require("./apptesting/availability");
|
|
@@ -21,4 +21,3 @@ const DEFAULT_AVAILABILITY_CHECKS = {
|
|
|
21
21
|
function getDefaultFeatureAvailabilityCheck(feature) {
|
|
22
22
|
return DEFAULT_AVAILABILITY_CHECKS[feature];
|
|
23
23
|
}
|
|
24
|
-
exports.getDefaultFeatureAvailabilityCheck = getDefaultFeatureAvailabilityCheck;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isCrashlyticsAvailable =
|
|
3
|
+
exports.isCrashlyticsAvailable = isCrashlyticsAvailable;
|
|
4
4
|
const appUtils_1 = require("../../../appUtils");
|
|
5
5
|
const fs = require("fs-extra");
|
|
6
6
|
const path = require("path");
|
|
@@ -8,7 +8,6 @@ async function isCrashlyticsAvailable(ctx) {
|
|
|
8
8
|
ctx.host.logger.debug("Looking for whether crashlytics is installed...");
|
|
9
9
|
return await isCrashlyticsInstalled(ctx);
|
|
10
10
|
}
|
|
11
|
-
exports.isCrashlyticsAvailable = isCrashlyticsAvailable;
|
|
12
11
|
async function isCrashlyticsInstalled(ctx) {
|
|
13
12
|
const host = ctx.host;
|
|
14
13
|
const projectDir = ctx.config.projectDir;
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.compileErrors =
|
|
3
|
+
exports.compileErrors = compileErrors;
|
|
4
4
|
const graphqlError_1 = require("../../../dataconnect/graphqlError");
|
|
5
5
|
const dataconnectEmulator_1 = require("../../../emulator/dataconnectEmulator");
|
|
6
6
|
async function compileErrors(configDir, errorFilter) {
|
|
7
7
|
const errors = (await dataconnectEmulator_1.DataConnectEmulator.build({ configDir })).errors;
|
|
8
|
-
return (
|
|
9
|
-
|
|
10
|
-
const isOperationError = ["query", "mutation"].includes(
|
|
8
|
+
return (errors
|
|
9
|
+
?.filter((e) => {
|
|
10
|
+
const isOperationError = ["query", "mutation"].includes(e.path?.[0]);
|
|
11
11
|
if (errorFilter === "operations")
|
|
12
12
|
return isOperationError;
|
|
13
13
|
if (errorFilter === "schema")
|
|
14
14
|
return !isOperationError;
|
|
15
15
|
return true;
|
|
16
|
-
})
|
|
16
|
+
})
|
|
17
|
+
.map(graphqlError_1.prettify)
|
|
18
|
+
.join("\n") || "");
|
|
17
19
|
}
|
|
18
|
-
exports.compileErrors = compileErrors;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.schemaToText = schemaToText;
|
|
4
|
+
exports.connectorToText = connectorToText;
|
|
5
|
+
exports.sourceToText = sourceToText;
|
|
6
|
+
exports.graphqlResponseToToolResponse = graphqlResponseToToolResponse;
|
|
7
|
+
exports.parseVariables = parseVariables;
|
|
4
8
|
const js_yaml_1 = require("js-yaml");
|
|
5
9
|
const types_1 = require("../../../dataconnect/types");
|
|
6
10
|
const util_1 = require("../../util");
|
|
@@ -12,7 +16,6 @@ function schemaToText(s) {
|
|
|
12
16
|
"\n\n" +
|
|
13
17
|
sourceToText(s.source));
|
|
14
18
|
}
|
|
15
|
-
exports.schemaToText = schemaToText;
|
|
16
19
|
function connectorToText(s) {
|
|
17
20
|
return ((0, js_yaml_1.dump)({
|
|
18
21
|
name: s.name,
|
|
@@ -20,11 +23,9 @@ function connectorToText(s) {
|
|
|
20
23
|
"\n\n" +
|
|
21
24
|
sourceToText(s.source));
|
|
22
25
|
}
|
|
23
|
-
exports.connectorToText = connectorToText;
|
|
24
26
|
function sourceToText(s) {
|
|
25
|
-
var _a;
|
|
26
27
|
let output = "";
|
|
27
|
-
|
|
28
|
+
s.files?.forEach((f) => {
|
|
28
29
|
output += `\n# ${f.path}`;
|
|
29
30
|
output += "\n```graphql\n";
|
|
30
31
|
output += `${f.content.trim()}\n`;
|
|
@@ -32,11 +33,9 @@ function sourceToText(s) {
|
|
|
32
33
|
});
|
|
33
34
|
return output;
|
|
34
35
|
}
|
|
35
|
-
exports.sourceToText = sourceToText;
|
|
36
36
|
function graphqlResponseToToolResponse(g) {
|
|
37
|
-
var _a;
|
|
38
37
|
if ((0, types_1.isGraphQLResponse)(g)) {
|
|
39
|
-
const isError =
|
|
38
|
+
const isError = g.errors?.length > 0;
|
|
40
39
|
const contentString = `${isError ? "A GraphQL error occurred while executing the operation:" : ""}${JSON.stringify(g, null, 2)}`;
|
|
41
40
|
return {
|
|
42
41
|
isError,
|
|
@@ -47,7 +46,6 @@ function graphqlResponseToToolResponse(g) {
|
|
|
47
46
|
return (0, util_1.mcpError)(JSON.stringify(g, null, 2));
|
|
48
47
|
}
|
|
49
48
|
}
|
|
50
|
-
exports.graphqlResponseToToolResponse = graphqlResponseToToolResponse;
|
|
51
49
|
function parseVariables(unparsedVariables) {
|
|
52
50
|
let obj;
|
|
53
51
|
try {
|
|
@@ -60,4 +58,3 @@ function parseVariables(unparsedVariables) {
|
|
|
60
58
|
throw new Error("not an object");
|
|
61
59
|
return obj;
|
|
62
60
|
}
|
|
63
|
-
exports.parseVariables = parseVariables;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getDataConnectEmulatorClient =
|
|
3
|
+
exports.getDataConnectEmulatorClient = getDataConnectEmulatorClient;
|
|
4
4
|
const types_1 = require("../../../emulator/types");
|
|
5
5
|
const apiv2_1 = require("../../../apiv2");
|
|
6
6
|
const dataplaneClient_1 = require("../../../dataconnect/dataplaneClient");
|
|
@@ -12,4 +12,3 @@ async function getDataConnectEmulatorClient(host) {
|
|
|
12
12
|
});
|
|
13
13
|
return apiClient;
|
|
14
14
|
}
|
|
15
|
-
exports.getDataConnectEmulatorClient = getDataConnectEmulatorClient;
|
package/lib/mcp/util.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.toContent = toContent;
|
|
4
|
+
exports.mcpError = mcpError;
|
|
5
|
+
exports.checkFeatureActive = checkFeatureActive;
|
|
6
|
+
exports.cleanSchema = cleanSchema;
|
|
4
7
|
const js_yaml_1 = require("js-yaml");
|
|
5
8
|
const api_1 = require("../api");
|
|
6
9
|
const ensureApiEnabled_1 = require("../ensureApiEnabled");
|
|
@@ -9,7 +12,7 @@ function toContent(data, options) {
|
|
|
9
12
|
if (typeof data === "string")
|
|
10
13
|
return { content: [{ type: "text", text: data }] };
|
|
11
14
|
let text = "";
|
|
12
|
-
const format =
|
|
15
|
+
const format = options?.format || "yaml";
|
|
13
16
|
switch (format) {
|
|
14
17
|
case "json":
|
|
15
18
|
text = JSON.stringify(data);
|
|
@@ -18,13 +21,12 @@ function toContent(data, options) {
|
|
|
18
21
|
text = (0, js_yaml_1.dump)(data);
|
|
19
22
|
break;
|
|
20
23
|
}
|
|
21
|
-
const prefix =
|
|
22
|
-
const suffix =
|
|
24
|
+
const prefix = options?.contentPrefix || "";
|
|
25
|
+
const suffix = options?.contentSuffix || "";
|
|
23
26
|
return {
|
|
24
27
|
content: [{ type: "text", text: `${prefix}${text}${suffix}` }],
|
|
25
28
|
};
|
|
26
29
|
}
|
|
27
|
-
exports.toContent = toContent;
|
|
28
30
|
function mcpError(message, code) {
|
|
29
31
|
let errorMessage = "unknown error";
|
|
30
32
|
if (message instanceof Error) {
|
|
@@ -38,7 +40,6 @@ function mcpError(message, code) {
|
|
|
38
40
|
content: [{ type: "text", text: `Error: ${code ? `${code}: ` : ""}${errorMessage}` }],
|
|
39
41
|
};
|
|
40
42
|
}
|
|
41
|
-
exports.mcpError = mcpError;
|
|
42
43
|
const SERVER_FEATURE_APIS = {
|
|
43
44
|
core: "",
|
|
44
45
|
firestore: (0, api_1.firestoreOrigin)(),
|
|
@@ -68,8 +69,7 @@ const DETECTED_API_FEATURES = {
|
|
|
68
69
|
database: undefined,
|
|
69
70
|
};
|
|
70
71
|
async function checkFeatureActive(feature, projectId, options) {
|
|
71
|
-
|
|
72
|
-
if (feature in (((_a = options === null || options === void 0 ? void 0 : options.config) === null || _a === void 0 ? void 0 : _a.data) || {}))
|
|
72
|
+
if (feature in (options?.config?.data || {}))
|
|
73
73
|
return true;
|
|
74
74
|
if (DETECTED_API_FEATURES[feature] !== undefined)
|
|
75
75
|
return DETECTED_API_FEATURES[feature];
|
|
@@ -87,12 +87,11 @@ async function checkFeatureActive(feature, projectId, options) {
|
|
|
87
87
|
DETECTED_API_FEATURES[feature] = false;
|
|
88
88
|
return false;
|
|
89
89
|
}
|
|
90
|
-
exports.checkFeatureActive = checkFeatureActive;
|
|
91
90
|
function deepClean(obj, isRootLevel = false) {
|
|
92
91
|
if (typeof obj !== "object" || obj === null) {
|
|
93
92
|
return obj;
|
|
94
93
|
}
|
|
95
|
-
const cleanedObj =
|
|
94
|
+
const cleanedObj = { ...obj };
|
|
96
95
|
if (cleanedObj.hasOwnProperty("$schema")) {
|
|
97
96
|
delete cleanedObj.$schema;
|
|
98
97
|
}
|
|
@@ -222,4 +221,3 @@ function cleanSchema(schema) {
|
|
|
222
221
|
const result = deepClean(schema, true);
|
|
223
222
|
return result === null ? {} : result;
|
|
224
223
|
}
|
|
225
|
-
exports.cleanSchema = cleanSchema;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sendFcmMessage =
|
|
3
|
+
exports.sendFcmMessage = sendFcmMessage;
|
|
4
4
|
const api_1 = require("../api");
|
|
5
5
|
const apiv2_1 = require("../apiv2");
|
|
6
6
|
const logger_1 = require("../logger");
|
|
@@ -45,4 +45,3 @@ async function sendFcmMessage(projectId, options) {
|
|
|
45
45
|
throw new error_1.FirebaseError(`Failed to send message to '${options.token || options.topic}' for the project '${projectId}'. `, { original: err });
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
exports.sendFcmMessage = sendFcmMessage;
|