firebase-tools 15.1.0 → 15.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/accountExporter.js +3 -5
- package/lib/accountImporter.js +4 -5
- package/lib/api.js +3 -3
- package/lib/apiv2.js +9 -13
- package/lib/appUtils.js +19 -21
- package/lib/appdistribution/client.js +4 -8
- package/lib/appdistribution/distribution.js +4 -4
- package/lib/appdistribution/options-parser-util.js +8 -9
- package/lib/appdistribution/types.js +2 -2
- package/lib/appdistribution/yaml_helper.js +33 -17
- package/lib/apphosting/app.js +8 -13
- package/lib/apphosting/backend.js +34 -24
- package/lib/apphosting/config.js +14 -14
- package/lib/apphosting/githubConnections.js +38 -35
- package/lib/apphosting/localbuilds.js +4 -6
- package/lib/apphosting/repo.js +24 -20
- package/lib/apphosting/rollout.js +12 -5
- package/lib/apphosting/secrets/dialogs.js +9 -9
- package/lib/apphosting/secrets/index.js +9 -11
- package/lib/apphosting/utils.js +2 -3
- package/lib/apphosting/yaml.js +12 -11
- package/lib/apptesting/ensureProjectConfigured.js +1 -2
- package/lib/apptesting/invokeTests.js +2 -3
- package/lib/apptesting/parseTestFiles.js +5 -6
- package/lib/apptesting/types.js +2 -2
- package/lib/archiveDirectory.js +1 -2
- package/lib/auth.js +36 -40
- package/lib/bin/cli.js +2 -3
- package/lib/bin/mcp.js +1 -2
- package/lib/checkMinRequiredVersion.js +1 -2
- package/lib/checkValidTargetFilters.js +1 -2
- package/lib/command.js +6 -9
- package/lib/commands/appdistribution-testers-list.js +2 -3
- package/lib/commands/apphosting-backends-list.js +4 -6
- package/lib/commands/apphosting-builds-create.js +2 -3
- package/lib/commands/apphosting-builds-get.js +1 -2
- package/lib/commands/apphosting-rollouts-list.js +1 -2
- package/lib/commands/apps-init.js +1 -1
- package/lib/commands/{apptesting-execute.js → apptesting-wata.js} +3 -4
- package/lib/commands/crashlytics-symbols-upload.js +2 -2
- package/lib/commands/dataconnect-execute.js +4 -4
- package/lib/commands/dataconnect-sdk-generate.js +5 -6
- package/lib/commands/dataconnect-services-list.js +7 -8
- package/lib/commands/dataconnect-sql-diff.js +1 -2
- package/lib/commands/dataconnect-sql-migrate.js +4 -3
- package/lib/commands/dataconnect-sql-setup.js +2 -2
- package/lib/commands/dataconnect-sql-shell.js +5 -1
- package/lib/commands/emulators-start.js +1 -2
- package/lib/commands/ext-configure.js +6 -4
- package/lib/commands/ext-dev-list.js +2 -3
- package/lib/commands/ext-dev-upload.js +2 -2
- package/lib/commands/ext-export.js +1 -1
- package/lib/commands/ext-info.js +2 -3
- package/lib/commands/ext-install.js +5 -7
- package/lib/commands/firestore-backups-list.js +1 -2
- package/lib/commands/firestore-backups-schedules-list.js +1 -2
- package/lib/commands/firestore-indexes-list.js +1 -2
- package/lib/commands/firestore-utils.js +1 -2
- package/lib/commands/functions-artifacts-setpolicy.js +1 -2
- package/lib/commands/functions-config-export.js +2 -3
- package/lib/commands/hosting-channel-deploy.js +2 -2
- package/lib/commands/hosting-clone.js +2 -3
- package/lib/commands/hosting-sites-create.js +1 -1
- package/lib/commands/index.js +2 -3
- package/lib/commands/init.js +4 -5
- package/lib/commands/internaltesting-functions-discover.js +1 -1
- package/lib/commands/login.js +4 -5
- package/lib/commands/logout.js +3 -3
- package/lib/commands/projects-create.js +1 -1
- package/lib/commands/remoteconfig-experiments-list.js +2 -3
- package/lib/commands/remoteconfig-get.js +1 -1
- package/lib/commands/remoteconfig-rollback.js +1 -2
- package/lib/commands/remoteconfig-rollouts-list.js +2 -3
- package/lib/commands/remoteconfig-versions-list.js +3 -4
- package/lib/commands/use.js +3 -3
- package/lib/config.js +4 -5
- package/lib/crashlytics/buildToolsJarHelper.js +3 -5
- package/lib/crashlytics/events.js +4 -7
- package/lib/crashlytics/filters.js +10 -12
- package/lib/crashlytics/issues.js +2 -3
- package/lib/crashlytics/notes.js +3 -4
- package/lib/crashlytics/reports.js +21 -15
- package/lib/crashlytics/types.js +7 -7
- package/lib/crashlytics/utils.js +4 -4
- package/lib/database/api.js +2 -3
- package/lib/database/import.js +4 -4
- package/lib/database/metadata.js +5 -6
- package/lib/database/rulesConfig.js +2 -3
- package/lib/dataconnect/build.js +10 -13
- package/lib/dataconnect/checkIam.js +1 -2
- package/lib/dataconnect/client.js +15 -18
- package/lib/dataconnect/dataplaneClient.js +6 -6
- package/lib/dataconnect/ensureApis.js +2 -3
- package/lib/dataconnect/errors.js +8 -11
- package/lib/dataconnect/filters.js +2 -3
- package/lib/dataconnect/freeTrial.js +3 -4
- package/lib/dataconnect/graphqlError.js +5 -8
- package/lib/dataconnect/load.js +10 -11
- package/lib/dataconnect/names.js +14 -18
- package/lib/dataconnect/prompts.js +1 -2
- package/lib/dataconnect/provisionCloudSql.js +13 -17
- package/lib/dataconnect/schemaMigration.js +60 -27
- package/lib/dataconnect/types.js +10 -12
- package/lib/dataconnect/webhook.js +3 -3
- package/lib/defaultCredentials.js +3 -4
- package/lib/deploy/apphosting/deploy.js +2 -3
- package/lib/deploy/apphosting/prepare.js +3 -5
- package/lib/deploy/apphosting/release.js +1 -1
- package/lib/deploy/apphosting/util.js +1 -2
- package/lib/deploy/database/deploy.js +1 -2
- package/lib/deploy/database/prepare.js +1 -2
- package/lib/deploy/database/release.js +1 -2
- package/lib/deploy/dataconnect/context.js +15 -4
- package/lib/deploy/dataconnect/deploy.js +5 -6
- package/lib/deploy/dataconnect/prepare.js +7 -9
- package/lib/deploy/dataconnect/release.js +7 -10
- package/lib/deploy/extensions/deploy.js +7 -9
- package/lib/deploy/extensions/deploymentSummary.js +6 -7
- package/lib/deploy/extensions/planner.js +15 -18
- package/lib/deploy/extensions/prepare.js +9 -11
- package/lib/deploy/extensions/release.js +10 -12
- package/lib/deploy/extensions/secrets.js +8 -11
- package/lib/deploy/extensions/tasks.js +6 -8
- package/lib/deploy/extensions/v2FunctionHelper.js +2 -3
- package/lib/deploy/extensions/validate.js +1 -2
- package/lib/deploy/firestore/deploy.js +3 -5
- package/lib/deploy/firestore/prepare.js +2 -3
- package/lib/deploy/firestore/release.js +3 -4
- package/lib/deploy/functions/backend.js +52 -42
- package/lib/deploy/functions/build.js +41 -15
- package/lib/deploy/functions/cache/applyHash.js +3 -5
- package/lib/deploy/functions/cache/hash.js +4 -5
- package/lib/deploy/functions/cel.js +3 -3
- package/lib/deploy/functions/checkIam.js +8 -8
- package/lib/deploy/functions/containerCleaner.js +10 -6
- package/lib/deploy/functions/deploy.js +6 -8
- package/lib/deploy/functions/ensure.js +6 -9
- package/lib/deploy/functions/functionsDeployHelper.js +10 -11
- package/lib/deploy/functions/params.js +10 -10
- package/lib/deploy/functions/prepare.js +41 -36
- package/lib/deploy/functions/prepareFunctionsUpload.js +24 -10
- package/lib/deploy/functions/pricing.js +3 -3
- package/lib/deploy/functions/prompts.js +7 -10
- package/lib/deploy/functions/release/executor.js +5 -6
- package/lib/deploy/functions/release/fabricator.js +76 -29
- package/lib/deploy/functions/release/index.js +23 -14
- package/lib/deploy/functions/release/planner.js +15 -14
- package/lib/deploy/functions/release/reporter.js +20 -20
- package/lib/deploy/functions/release/sourceTokenScraper.js +4 -5
- package/lib/deploy/functions/remoteSource.js +3 -4
- package/lib/deploy/functions/runtimes/discovery/index.js +9 -12
- package/lib/deploy/functions/runtimes/discovery/parsing.js +2 -3
- package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +29 -10
- package/lib/deploy/functions/runtimes/index.js +1 -2
- package/lib/deploy/functions/runtimes/node/index.js +18 -9
- package/lib/deploy/functions/runtimes/node/parseRuntimeAndValidateSDK.js +2 -2
- package/lib/deploy/functions/runtimes/node/validate.js +1 -2
- package/lib/deploy/functions/runtimes/node/versioning.js +6 -7
- package/lib/deploy/functions/runtimes/python/index.js +12 -12
- package/lib/deploy/functions/runtimes/supported/index.js +5 -6
- package/lib/deploy/functions/services/auth.js +49 -36
- package/lib/deploy/functions/services/database.js +1 -2
- package/lib/deploy/functions/services/dataconnect.js +16 -2
- package/lib/deploy/functions/services/firebaseAlerts.js +1 -2
- package/lib/deploy/functions/services/firestore.js +3 -5
- package/lib/deploy/functions/services/index.js +2 -2
- package/lib/deploy/functions/services/remoteConfig.js +1 -2
- package/lib/deploy/functions/services/storage.js +3 -5
- package/lib/deploy/functions/services/testLab.js +1 -2
- package/lib/deploy/functions/triggerRegionHelper.js +1 -2
- package/lib/deploy/functions/validate.js +12 -11
- package/lib/deploy/hosting/convertConfig.js +38 -22
- package/lib/deploy/hosting/deploy.js +4 -7
- package/lib/deploy/hosting/hashcache.js +2 -3
- package/lib/deploy/hosting/prepare.js +14 -14
- package/lib/deploy/hosting/release.js +1 -2
- package/lib/deploy/index.js +7 -8
- package/lib/deploy/lifecycleHooks.js +3 -5
- package/lib/deploy/remoteconfig/deploy.js +1 -1
- package/lib/deploy/remoteconfig/functions.js +5 -6
- package/lib/deploy/remoteconfig/prepare.js +2 -3
- package/lib/deploy/remoteconfig/release.js +2 -2
- package/lib/deploy/storage/deploy.js +1 -1
- package/lib/deploy/storage/prepare.js +1 -1
- package/lib/deploy/storage/release.js +1 -1
- package/lib/deploymentTool.js +5 -6
- package/lib/detectProjectRoot.js +1 -2
- package/lib/downloadUtils.js +2 -3
- package/lib/emulator/adminSdkConfig.js +2 -3
- package/lib/emulator/apphosting/config.js +1 -2
- package/lib/emulator/apphosting/developmentServer.js +3 -3
- package/lib/emulator/apphosting/serve.js +20 -14
- package/lib/emulator/auth/cloudFunctions.js +2 -3
- package/lib/emulator/auth/errors.js +2 -2
- package/lib/emulator/auth/handlers.js +3 -4
- package/lib/emulator/auth/index.js +6 -6
- package/lib/emulator/auth/operations.js +171 -129
- package/lib/emulator/auth/server.js +30 -22
- package/lib/emulator/auth/state.js +26 -36
- package/lib/emulator/auth/utils.js +12 -13
- package/lib/emulator/commandUtils.js +20 -20
- package/lib/emulator/controller.js +32 -29
- package/lib/emulator/databaseEmulator.js +1 -2
- package/lib/emulator/dataconnect/pgliteServer.js +48 -104
- package/lib/emulator/dataconnectEmulator.js +6 -9
- package/lib/emulator/download.js +2 -3
- package/lib/emulator/downloadableEmulatorInfo.json +7 -7
- package/lib/emulator/downloadableEmulators.js +49 -24
- package/lib/emulator/emulatorLogger.js +19 -4
- package/lib/emulator/env.js +6 -8
- package/lib/emulator/eventarcEmulator.js +2 -3
- package/lib/emulator/eventarcEmulatorUtils.js +3 -6
- package/lib/emulator/extensions/postinstall.js +1 -2
- package/lib/emulator/extensions/validation.js +4 -7
- package/lib/emulator/extensionsEmulator.js +6 -9
- package/lib/emulator/functionsEmulator.js +89 -46
- package/lib/emulator/functionsEmulatorRuntime.js +1 -1
- package/lib/emulator/functionsEmulatorShared.js +30 -30
- package/lib/emulator/functionsEmulatorShell.js +4 -6
- package/lib/emulator/functionsEmulatorUtils.js +8 -9
- package/lib/emulator/functionsRuntimeWorker.js +18 -9
- package/lib/emulator/hub.js +41 -34
- package/lib/emulator/hubClient.js +1 -1
- package/lib/emulator/initEmulators.js +2 -3
- package/lib/emulator/loggingEmulator.js +2 -2
- package/lib/emulator/portUtils.js +4 -5
- package/lib/emulator/registry.js +10 -4
- package/lib/emulator/shared/request.js +1 -2
- package/lib/emulator/storage/apis/firebase.js +16 -20
- package/lib/emulator/storage/apis/gcloud.js +6 -9
- package/lib/emulator/storage/apis/shared.js +1 -2
- package/lib/emulator/storage/crc.js +2 -3
- package/lib/emulator/storage/files.js +18 -41
- package/lib/emulator/storage/metadata.js +10 -4
- package/lib/emulator/storage/multipart.js +1 -2
- package/lib/emulator/storage/rfc.js +1 -2
- package/lib/emulator/storage/rules/config.js +1 -2
- package/lib/emulator/storage/rules/manager.js +3 -5
- package/lib/emulator/storage/rules/runtime.js +15 -13
- package/lib/emulator/storage/rules/types.js +2 -2
- package/lib/emulator/storage/rules/utils.js +5 -6
- package/lib/emulator/storage/server.js +1 -2
- package/lib/emulator/storage/upload.js +3 -4
- package/lib/emulator/taskQueue.js +11 -4
- package/lib/emulator/tasksEmulator.js +11 -12
- package/lib/emulator/types.js +6 -6
- package/lib/emulator/ui.js +6 -1
- package/lib/ensureApiEnabled.js +7 -9
- package/lib/env.js +2 -3
- package/lib/error.js +11 -13
- package/lib/errorOut.js +1 -2
- package/lib/experiments.js +15 -18
- package/lib/extensions/askUserForEventsConfig.js +12 -13
- package/lib/extensions/askUserForParam.js +11 -12
- package/lib/extensions/change-log.js +4 -5
- package/lib/extensions/checkProjectBilling.js +1 -2
- package/lib/extensions/diagnose.js +1 -2
- package/lib/extensions/displayExtensionInfo.js +25 -32
- package/lib/extensions/emulator/optionsHelper.js +6 -8
- package/lib/extensions/emulator/specHelper.js +15 -16
- package/lib/extensions/emulator/triggerHelper.js +3 -5
- package/lib/extensions/etags.js +2 -3
- package/lib/extensions/export.js +7 -9
- package/lib/extensions/extensionsApi.js +23 -29
- package/lib/extensions/extensionsHelper.js +52 -80
- package/lib/extensions/listExtensions.js +3 -5
- package/lib/extensions/localHelper.js +5 -5
- package/lib/extensions/manifest.js +15 -16
- package/lib/extensions/metricsUtils.js +3 -4
- package/lib/extensions/paramHelper.js +21 -18
- package/lib/extensions/provisioningHelper.js +17 -21
- package/lib/extensions/publishHelpers.js +1 -2
- package/lib/extensions/publisherApi.js +11 -13
- package/lib/extensions/refs.js +6 -7
- package/lib/extensions/runtimes/common.js +18 -19
- package/lib/extensions/runtimes/node.js +5 -6
- package/lib/extensions/secretsUtils.js +8 -8
- package/lib/extensions/tos.js +7 -8
- package/lib/extensions/types.js +3 -3
- package/lib/extensions/updateHelper.js +6 -7
- package/lib/extensions/utils.js +6 -8
- package/lib/extensions/versionHelper.js +1 -2
- package/lib/extensions/warnings.js +6 -8
- package/lib/fetchMOTD.js +1 -2
- package/lib/fetchWebSetup.js +3 -4
- package/lib/filterTargets.js +1 -2
- package/lib/firebaseConfigValidate.js +2 -3
- package/lib/firestore/api-sort.js +8 -9
- package/lib/firestore/api-types.js +15 -15
- package/lib/firestore/api.js +15 -13
- package/lib/firestore/backupUtils.js +3 -3
- package/lib/firestore/checkDatabaseType.js +1 -2
- package/lib/firestore/delete.js +1 -2
- package/lib/firestore/encodeFirestoreValue.js +1 -2
- package/lib/firestore/fsConfig.js +1 -2
- package/lib/firestore/options.js +1 -1
- package/lib/firestore/util.js +5 -6
- package/lib/firestore/validator.js +4 -5
- package/lib/frameworks/angular/index.js +14 -15
- package/lib/frameworks/angular/utils.js +21 -23
- package/lib/frameworks/astro/index.js +7 -7
- package/lib/frameworks/astro/utils.js +4 -6
- package/lib/frameworks/compose/discover/filesystem.js +3 -3
- package/lib/frameworks/compose/discover/frameworkMatcher.js +4 -5
- package/lib/frameworks/compose/discover/index.js +1 -2
- package/lib/frameworks/compose/discover/runtime/node.js +8 -11
- package/lib/frameworks/compose/driver/docker.js +3 -5
- package/lib/frameworks/compose/driver/hooks.js +2 -2
- package/lib/frameworks/compose/driver/index.js +2 -2
- package/lib/frameworks/compose/driver/local.js +2 -3
- package/lib/frameworks/compose/index.js +5 -7
- package/lib/frameworks/constants.js +3 -3
- package/lib/frameworks/express/index.js +7 -8
- package/lib/frameworks/flutter/index.js +6 -7
- package/lib/frameworks/flutter/utils.js +4 -5
- package/lib/frameworks/index.js +21 -22
- package/lib/frameworks/next/constants.js +5 -2
- package/lib/frameworks/next/index.js +34 -32
- package/lib/frameworks/next/utils.js +40 -39
- package/lib/frameworks/nuxt/index.js +9 -9
- package/lib/frameworks/nuxt/utils.js +4 -6
- package/lib/frameworks/nuxt2/index.js +7 -7
- package/lib/frameworks/sveltekit/index.js +6 -8
- package/lib/frameworks/utils.js +26 -24
- package/lib/frameworks/vite/index.js +8 -9
- package/lib/fsAsync.js +1 -2
- package/lib/fsutils.js +5 -6
- package/lib/functional.js +11 -11
- package/lib/functions/artifacts.js +25 -22
- package/lib/functions/ensureTargeted.js +1 -2
- package/lib/functions/env.js +13 -14
- package/lib/functions/functionslog.js +2 -3
- package/lib/functions/projectConfig.js +29 -33
- package/lib/functions/python.js +10 -4
- package/lib/functions/secrets.js +32 -18
- package/lib/functionsConfig.js +14 -14
- package/lib/functionsConfigClone.js +1 -2
- package/lib/functionsShellCommandAction.js +2 -3
- package/lib/gcp/apphosting.js +43 -28
- package/lib/gcp/apptesting.js +2 -2
- package/lib/gcp/artifactregistry.js +5 -5
- package/lib/gcp/auth.js +11 -13
- package/lib/gcp/cloudbilling.js +4 -5
- package/lib/gcp/cloudbuild.js +10 -11
- package/lib/gcp/cloudfunctions.js +61 -45
- package/lib/gcp/cloudfunctionsv2.js +81 -43
- package/lib/gcp/cloudlogging.js +2 -4
- package/lib/gcp/cloudmonitoring.js +7 -7
- package/lib/gcp/cloudscheduler.js +12 -14
- package/lib/gcp/cloudsql/cloudsqladmin.js +18 -20
- package/lib/gcp/cloudsql/connect.js +14 -9
- package/lib/gcp/cloudsql/fbToolsAuthClient.js +5 -3
- package/lib/gcp/cloudsql/interactive.js +2 -3
- package/lib/gcp/cloudsql/permissions.js +8 -8
- package/lib/gcp/cloudsql/permissionsSetup.js +9 -9
- package/lib/gcp/cloudtasks.js +19 -18
- package/lib/gcp/computeEngine.js +1 -2
- package/lib/gcp/devConnect.js +32 -29
- package/lib/gcp/docker.js +2 -4
- package/lib/gcp/eventarc.js +5 -5
- package/lib/gcp/firedata.js +4 -4
- package/lib/gcp/firestore.js +16 -16
- package/lib/gcp/iam.js +11 -12
- package/lib/gcp/identityPlatform.js +4 -5
- package/lib/gcp/k8s.js +1 -2
- package/lib/gcp/location.js +2 -2
- package/lib/gcp/proto.js +10 -11
- package/lib/gcp/pubsub.js +4 -5
- package/lib/gcp/resourceManager.js +5 -5
- package/lib/gcp/rules.js +13 -14
- package/lib/gcp/run.js +24 -31
- package/lib/gcp/runv2.js +39 -27
- package/lib/gcp/secretManager.js +60 -39
- package/lib/gcp/serviceusage.js +8 -4
- package/lib/gcp/storage.js +22 -20
- package/lib/gemini/fdcExperience.js +5 -5
- package/lib/getDefaultDatabaseInstance.js +2 -4
- package/lib/getDefaultHostingSite.js +3 -4
- package/lib/getProjectNumber.js +1 -2
- package/lib/hosting/api.js +32 -36
- package/lib/hosting/cloudRunProxy.js +2 -3
- package/lib/hosting/config.js +17 -17
- package/lib/hosting/expireUtils.js +3 -3
- package/lib/hosting/functionsProxy.js +1 -2
- package/lib/hosting/implicitInit.js +1 -2
- package/lib/hosting/initMiddleware.js +1 -2
- package/lib/hosting/interactive.js +1 -2
- package/lib/hosting/proxy.js +3 -5
- package/lib/hosting/runTags.js +8 -11
- package/lib/init/features/account.js +1 -2
- package/lib/init/features/ailogic/index.js +3 -5
- package/lib/init/features/ailogic/utils.js +6 -8
- package/lib/init/features/aitools/claude.js +1 -2
- package/lib/init/features/aitools/cursor.js +1 -2
- package/lib/init/features/aitools/gemini.js +1 -1
- package/lib/init/features/aitools/promptUpdater.js +10 -12
- package/lib/init/features/aitools.js +1 -2
- package/lib/init/features/apphosting.js +3 -4
- package/lib/init/features/apptesting/index.js +9 -9
- package/lib/init/features/database.js +4 -5
- package/lib/init/features/dataconnect/create_app.js +3 -4
- package/lib/init/features/dataconnect/index.js +25 -22
- package/lib/init/features/dataconnect/resolver.js +6 -10
- package/lib/init/features/dataconnect/sdk.js +31 -24
- package/lib/init/features/emulators.js +7 -6
- package/lib/init/features/extensions/index.js +3 -5
- package/lib/init/features/firestore/index.js +7 -9
- package/lib/init/features/firestore/indexes.js +2 -2
- package/lib/init/features/firestore/rules.js +3 -3
- package/lib/init/features/functions/index.js +3 -5
- package/lib/init/features/functions/javascript.js +1 -2
- package/lib/init/features/functions/npm-dependencies.js +1 -2
- package/lib/init/features/functions/python.js +1 -2
- package/lib/init/features/functions/typescript.js +1 -2
- package/lib/init/features/genkit/index.js +44 -18
- package/lib/init/features/hosting/github.js +6 -8
- package/lib/init/features/hosting/index.js +10 -13
- package/lib/init/features/project.js +4 -7
- package/lib/init/features/remoteconfig.js +1 -2
- package/lib/init/features/storage.js +3 -5
- package/lib/init/index.js +4 -7
- package/lib/init/spawn.js +7 -9
- package/lib/listFiles.js +1 -2
- package/lib/loadCJSON.js +1 -2
- package/lib/localFunction.js +14 -15
- package/lib/logError.js +1 -2
- package/lib/logger.js +7 -7
- package/lib/management/apps.js +22 -22
- package/lib/management/database.js +11 -12
- package/lib/management/projects.js +57 -56
- package/lib/management/provisioning/errorHandler.js +3 -5
- package/lib/management/provisioning/provision.js +15 -9
- package/lib/management/studio.js +2 -3
- package/lib/mcp/errors.js +4 -4
- package/lib/mcp/index.js +16 -23
- package/lib/mcp/prompt.js +1 -2
- package/lib/mcp/prompts/core/consult.js +2 -3
- package/lib/mcp/prompts/crashlytics/connect.js +15 -122
- package/lib/mcp/prompts/dataconnect/schema.js +3 -3
- package/lib/mcp/prompts/index.js +8 -10
- package/lib/mcp/resource.js +3 -15
- package/lib/mcp/resources/guides/app_id.js +39 -0
- package/lib/mcp/resources/guides/crashlytics_connect.js +51 -0
- package/lib/mcp/resources/guides/crashlytics_investigations.js +51 -0
- package/lib/mcp/resources/guides/crashlytics_issues.js +42 -0
- package/lib/mcp/resources/guides/crashlytics_reports.js +112 -0
- package/lib/mcp/resources/index.js +11 -3
- package/lib/mcp/tool.js +3 -15
- package/lib/mcp/tools/apphosting/fetch_logs.js +3 -4
- package/lib/mcp/tools/apphosting/list_backends.js +1 -1
- package/lib/mcp/tools/auth/get_users.js +5 -16
- package/lib/mcp/tools/core/create_android_sha.js +4 -1
- package/lib/mcp/tools/core/get_environment.js +3 -3
- package/lib/mcp/tools/core/get_sdk_config.js +4 -5
- package/lib/mcp/tools/core/get_security_rules.js +1 -2
- package/lib/mcp/tools/core/init.js +2 -2
- package/lib/mcp/tools/core/logout.js +1 -1
- package/lib/mcp/tools/core/read_resources.js +2 -2
- package/lib/mcp/tools/core/validate_security_rules.js +1 -2
- package/lib/mcp/tools/crashlytics/events.js +43 -19
- package/lib/mcp/tools/crashlytics/index.js +1 -6
- package/lib/mcp/tools/crashlytics/issues.js +33 -12
- package/lib/mcp/tools/crashlytics/reports.js +66 -117
- package/lib/mcp/tools/dataconnect/list_services.js +2 -3
- package/lib/mcp/tools/firestore/converter.js +3 -5
- package/lib/mcp/tools/firestore/delete_document.js +1 -1
- package/lib/mcp/tools/functions/get_logs.js +14 -12
- package/lib/mcp/tools/functions/list_functions.js +1 -1
- package/lib/mcp/tools/index.js +17 -9
- package/lib/mcp/util/apptesting/availability.js +1 -2
- package/lib/mcp/util/availability.js +1 -2
- package/lib/mcp/util/crashlytics/availability.js +1 -2
- package/lib/mcp/util/dataconnect/compile.js +7 -6
- package/lib/mcp/util/dataconnect/converter.js +7 -10
- package/lib/mcp/util/dataconnect/emulator.js +1 -2
- package/lib/mcp/util.js +9 -11
- package/lib/messaging/sendMessage.js +1 -2
- package/lib/metaprogramming.js +1 -2
- package/lib/operation-poller.js +2 -2
- package/lib/profileReport.js +6 -6
- package/lib/profiler.js +1 -2
- package/lib/projectPath.js +1 -2
- package/lib/projectUtils.js +5 -6
- package/lib/prompt.js +22 -13
- package/lib/rc.js +5 -7
- package/lib/remoteconfig/deleteExperiment.js +1 -2
- package/lib/remoteconfig/deleteRollout.js +1 -2
- package/lib/remoteconfig/get.js +2 -3
- package/lib/remoteconfig/getExperiment.js +2 -2
- package/lib/remoteconfig/getRollout.js +2 -2
- package/lib/remoteconfig/interfaces.js +1 -1
- package/lib/remoteconfig/listExperiments.js +2 -2
- package/lib/remoteconfig/listRollouts.js +2 -2
- package/lib/remoteconfig/publish.js +1 -2
- package/lib/remoteconfig/rollback.js +1 -2
- package/lib/remoteconfig/versionslist.js +1 -2
- package/lib/requireAuth.js +4 -6
- package/lib/requireConfig.js +5 -8
- package/lib/requireDatabaseInstance.js +2 -2
- package/lib/requireHostingSite.js +1 -2
- package/lib/requireInteractive.js +1 -1
- package/lib/requirePermissions.js +1 -2
- package/lib/requireTosAcceptance.js +1 -2
- package/lib/responseToError.js +1 -2
- package/lib/rtdb.js +2 -3
- package/lib/rulesDeploy.js +3 -4
- package/lib/serve/functions.js +9 -1
- package/lib/serve/hosting.js +4 -5
- package/lib/serve/index.js +1 -2
- package/lib/shortenUrl.js +1 -2
- package/lib/templates.js +3 -4
- package/lib/throttler/throttler.js +3 -3
- package/lib/timeout.js +2 -3
- package/lib/track.js +23 -14
- package/lib/tsconfig.publish.tsbuildinfo +1 -0
- package/lib/unzip.js +2 -3
- package/lib/utils.js +62 -63
- package/lib/vsCodeUtils.js +2 -3
- package/package.json +6 -6
- package/templates/extensions/typescript/index.ts +1 -1
- package/templates/extensions/typescript/package.lint.json +1 -1
- package/templates/extensions/typescript/package.nolint.json +1 -1
- package/templates/extensions/typescript/tsconfig.json +2 -1
package/lib/logger.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.logger = exports.vsceLogEmitter = void 0;
|
|
4
|
+
exports.findAvailableLogFile = findAvailableLogFile;
|
|
5
|
+
exports.tryStringify = tryStringify;
|
|
6
|
+
exports.useFileLogger = useFileLogger;
|
|
7
|
+
exports.useConsoleLoggers = useConsoleLoggers;
|
|
4
8
|
const winston = require("winston");
|
|
5
9
|
const events_1 = require("events");
|
|
6
10
|
const path = require("path");
|
|
@@ -69,7 +73,6 @@ function findAvailableLogFile() {
|
|
|
69
73
|
}
|
|
70
74
|
throw new Error("Unable to obtain permissions for firebase-debug.log");
|
|
71
75
|
}
|
|
72
|
-
exports.findAvailableLogFile = findAvailableLogFile;
|
|
73
76
|
function tryStringify(value) {
|
|
74
77
|
if (typeof value === "string") {
|
|
75
78
|
return value;
|
|
@@ -77,11 +80,10 @@ function tryStringify(value) {
|
|
|
77
80
|
try {
|
|
78
81
|
return JSON.stringify(value);
|
|
79
82
|
}
|
|
80
|
-
catch
|
|
83
|
+
catch {
|
|
81
84
|
return value;
|
|
82
85
|
}
|
|
83
86
|
}
|
|
84
|
-
exports.tryStringify = tryStringify;
|
|
85
87
|
const rawLogger = winston.createLogger();
|
|
86
88
|
rawLogger.add(new winston.transports.Console({
|
|
87
89
|
silent: true,
|
|
@@ -90,7 +92,7 @@ rawLogger.add(new winston.transports.Console({
|
|
|
90
92
|
rawLogger.exitOnError = false;
|
|
91
93
|
exports.logger = maybeUseVSCodeLogger(annotateDebugLines(expandErrors(rawLogger)));
|
|
92
94
|
function useFileLogger(logFile) {
|
|
93
|
-
const logFileName = logFile
|
|
95
|
+
const logFileName = logFile ?? findAvailableLogFile();
|
|
94
96
|
exports.logger.add(new winston.transports.File({
|
|
95
97
|
level: "debug",
|
|
96
98
|
filename: logFileName,
|
|
@@ -101,7 +103,6 @@ function useFileLogger(logFile) {
|
|
|
101
103
|
}));
|
|
102
104
|
return logFileName;
|
|
103
105
|
}
|
|
104
|
-
exports.useFileLogger = useFileLogger;
|
|
105
106
|
function useConsoleLoggers() {
|
|
106
107
|
if (process.env.DEBUG) {
|
|
107
108
|
exports.logger.add(new winston.transports.Console({
|
|
@@ -121,4 +122,3 @@ function useConsoleLoggers() {
|
|
|
121
122
|
}));
|
|
122
123
|
}
|
|
123
124
|
}
|
|
124
|
-
exports.useConsoleLoggers = useConsoleLoggers;
|
package/lib/management/apps.js
CHANGED
|
@@ -1,6 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.ShaCertificateType = exports.AppPlatform = exports.APP_LIST_PAGE_SIZE = void 0;
|
|
4
|
+
exports.getPlatform = getPlatform;
|
|
5
|
+
exports.sdkInit = sdkInit;
|
|
6
|
+
exports.getSdkOutputPath = getSdkOutputPath;
|
|
7
|
+
exports.checkForApps = checkForApps;
|
|
8
|
+
exports.getSdkConfig = getSdkConfig;
|
|
9
|
+
exports.getAppPlatform = getAppPlatform;
|
|
10
|
+
exports.createIosApp = createIosApp;
|
|
11
|
+
exports.createAndroidApp = createAndroidApp;
|
|
12
|
+
exports.createWebApp = createWebApp;
|
|
13
|
+
exports.listFirebaseApps = listFirebaseApps;
|
|
14
|
+
exports.getAppConfigFile = getAppConfigFile;
|
|
15
|
+
exports.writeConfigToFile = writeConfigToFile;
|
|
16
|
+
exports.getAppConfig = getAppConfig;
|
|
17
|
+
exports.listAppAndroidSha = listAppAndroidSha;
|
|
18
|
+
exports.createAppAndroidSha = createAppAndroidSha;
|
|
19
|
+
exports.deleteAppAndroidSha = deleteAppAndroidSha;
|
|
20
|
+
exports.findIntelligentPathForIOS = findIntelligentPathForIOS;
|
|
21
|
+
exports.findIntelligentPathForAndroid = findIntelligentPathForAndroid;
|
|
4
22
|
const fs = require("fs-extra");
|
|
5
23
|
const ora = require("ora");
|
|
6
24
|
const path = require("path");
|
|
@@ -63,7 +81,6 @@ https://firebase.google.com/docs/flutter/setup
|
|
|
63
81
|
}
|
|
64
82
|
return targetPlatform;
|
|
65
83
|
}
|
|
66
|
-
exports.getPlatform = getPlatform;
|
|
67
84
|
async function initiateIosAppCreation(options) {
|
|
68
85
|
if (!options.nonInteractive) {
|
|
69
86
|
options.displayName = options.displayName || (await getDisplayName());
|
|
@@ -147,7 +164,6 @@ async function sdkInit(appPlatform, options) {
|
|
|
147
164
|
}
|
|
148
165
|
return appData;
|
|
149
166
|
}
|
|
150
|
-
exports.sdkInit = sdkInit;
|
|
151
167
|
async function getSdkOutputPath(appDir, platform, config) {
|
|
152
168
|
switch (platform) {
|
|
153
169
|
case AppPlatform.ANDROID:
|
|
@@ -161,7 +177,6 @@ async function getSdkOutputPath(appDir, platform, config) {
|
|
|
161
177
|
}
|
|
162
178
|
throw new error_1.FirebaseError("Platform " + platform.toString() + " is not supported yet.");
|
|
163
179
|
}
|
|
164
|
-
exports.getSdkOutputPath = getSdkOutputPath;
|
|
165
180
|
function checkForApps(apps, appPlatform) {
|
|
166
181
|
if (!apps.length) {
|
|
167
182
|
throw new error_1.FirebaseError(`There are no ${appPlatform === AppPlatform.ANY ? "" : appPlatform + " "}apps ` +
|
|
@@ -169,7 +184,6 @@ function checkForApps(apps, appPlatform) {
|
|
|
169
184
|
"You can create an app for this project with 'firebase apps:create'");
|
|
170
185
|
}
|
|
171
186
|
}
|
|
172
|
-
exports.checkForApps = checkForApps;
|
|
173
187
|
async function selectAppInteractively(apps, appPlatform) {
|
|
174
188
|
checkForApps(apps, appPlatform);
|
|
175
189
|
const choices = apps.map((app) => {
|
|
@@ -222,7 +236,6 @@ async function getSdkConfig(options, appPlatform, appId) {
|
|
|
222
236
|
spinner.succeed();
|
|
223
237
|
return configData;
|
|
224
238
|
}
|
|
225
|
-
exports.getSdkConfig = getSdkConfig;
|
|
226
239
|
var AppPlatform;
|
|
227
240
|
(function (AppPlatform) {
|
|
228
241
|
AppPlatform["PLATFORM_UNSPECIFIED"] = "PLATFORM_UNSPECIFIED";
|
|
@@ -230,13 +243,13 @@ var AppPlatform;
|
|
|
230
243
|
AppPlatform["ANDROID"] = "ANDROID";
|
|
231
244
|
AppPlatform["WEB"] = "WEB";
|
|
232
245
|
AppPlatform["ANY"] = "ANY";
|
|
233
|
-
})(AppPlatform
|
|
246
|
+
})(AppPlatform || (exports.AppPlatform = AppPlatform = {}));
|
|
234
247
|
var ShaCertificateType;
|
|
235
248
|
(function (ShaCertificateType) {
|
|
236
249
|
ShaCertificateType["SHA_CERTIFICATE_TYPE_UNSPECIFIED"] = "SHA_CERTIFICATE_TYPE_UNSPECIFIED";
|
|
237
250
|
ShaCertificateType["SHA_1"] = "SHA_1";
|
|
238
251
|
ShaCertificateType["SHA_256"] = "SHA_256";
|
|
239
|
-
})(ShaCertificateType
|
|
252
|
+
})(ShaCertificateType || (exports.ShaCertificateType = ShaCertificateType = {}));
|
|
240
253
|
function getAppPlatform(platform) {
|
|
241
254
|
switch (platform.toUpperCase()) {
|
|
242
255
|
case "IOS":
|
|
@@ -251,7 +264,6 @@ function getAppPlatform(platform) {
|
|
|
251
264
|
throw new error_1.FirebaseError("Unexpected platform. Only iOS, Android, and Web apps are supported");
|
|
252
265
|
}
|
|
253
266
|
}
|
|
254
|
-
exports.getAppPlatform = getAppPlatform;
|
|
255
267
|
const apiClient = new apiv2_1.Client({ urlPrefix: (0, api_1.firebaseApiOrigin)(), apiVersion: "v1beta1" });
|
|
256
268
|
async function createIosApp(projectId, options) {
|
|
257
269
|
try {
|
|
@@ -274,7 +286,6 @@ async function createIosApp(projectId, options) {
|
|
|
274
286
|
throw new error_1.FirebaseError(`Failed to create iOS app for project ${projectId}. See firebase-debug.log for more info.`, { exit: 2, original: err });
|
|
275
287
|
}
|
|
276
288
|
}
|
|
277
|
-
exports.createIosApp = createIosApp;
|
|
278
289
|
async function createAndroidApp(projectId, options) {
|
|
279
290
|
try {
|
|
280
291
|
const response = await apiClient.request({
|
|
@@ -299,7 +310,6 @@ async function createAndroidApp(projectId, options) {
|
|
|
299
310
|
});
|
|
300
311
|
}
|
|
301
312
|
}
|
|
302
|
-
exports.createAndroidApp = createAndroidApp;
|
|
303
313
|
async function createWebApp(projectId, options) {
|
|
304
314
|
try {
|
|
305
315
|
const response = await apiClient.request({
|
|
@@ -321,7 +331,6 @@ async function createWebApp(projectId, options) {
|
|
|
321
331
|
throw new error_1.FirebaseError(`Failed to create Web app for project ${projectId}. See firebase-debug.log for more info.`, { exit: 2, original: err });
|
|
322
332
|
}
|
|
323
333
|
}
|
|
324
|
-
exports.createWebApp = createWebApp;
|
|
325
334
|
function getListAppsResourceString(projectId, platform) {
|
|
326
335
|
let resourceSuffix;
|
|
327
336
|
switch (platform) {
|
|
@@ -358,7 +367,7 @@ async function listFirebaseApps(projectId, platform, pageSize = exports.APP_LIST
|
|
|
358
367
|
timeout: TIMEOUT_MILLIS,
|
|
359
368
|
});
|
|
360
369
|
if (response.body.apps) {
|
|
361
|
-
const appsOnPage = response.body.apps.map((app) => (app.platform ? app :
|
|
370
|
+
const appsOnPage = response.body.apps.map((app) => (app.platform ? app : { ...app, platform }));
|
|
362
371
|
apps.push(...appsOnPage);
|
|
363
372
|
}
|
|
364
373
|
nextPageToken = response.body.nextPageToken;
|
|
@@ -374,7 +383,6 @@ async function listFirebaseApps(projectId, platform, pageSize = exports.APP_LIST
|
|
|
374
383
|
});
|
|
375
384
|
}
|
|
376
385
|
}
|
|
377
|
-
exports.listFirebaseApps = listFirebaseApps;
|
|
378
386
|
function getAppConfigResourceString(appId, platform) {
|
|
379
387
|
let platformResource;
|
|
380
388
|
switch (platform) {
|
|
@@ -410,7 +418,6 @@ function parseConfigFromResponse(responseBody, platform) {
|
|
|
410
418
|
function getAppConfigFile(config, platform) {
|
|
411
419
|
return parseConfigFromResponse(config, platform);
|
|
412
420
|
}
|
|
413
|
-
exports.getAppConfigFile = getAppConfigFile;
|
|
414
421
|
async function writeConfigToFile(filename, nonInteractive, fileContents) {
|
|
415
422
|
if (fs.existsSync(filename)) {
|
|
416
423
|
if (nonInteractive) {
|
|
@@ -424,7 +431,6 @@ async function writeConfigToFile(filename, nonInteractive, fileContents) {
|
|
|
424
431
|
await fs.writeFile(filename, fileContents);
|
|
425
432
|
return true;
|
|
426
433
|
}
|
|
427
|
-
exports.writeConfigToFile = writeConfigToFile;
|
|
428
434
|
async function getAppConfig(appId, platform) {
|
|
429
435
|
try {
|
|
430
436
|
const response = await apiClient.request({
|
|
@@ -442,7 +448,6 @@ async function getAppConfig(appId, platform) {
|
|
|
442
448
|
});
|
|
443
449
|
}
|
|
444
450
|
}
|
|
445
|
-
exports.getAppConfig = getAppConfig;
|
|
446
451
|
async function listAppAndroidSha(projectId, appId) {
|
|
447
452
|
const shaCertificates = [];
|
|
448
453
|
try {
|
|
@@ -465,7 +470,6 @@ async function listAppAndroidSha(projectId, appId) {
|
|
|
465
470
|
});
|
|
466
471
|
}
|
|
467
472
|
}
|
|
468
|
-
exports.listAppAndroidSha = listAppAndroidSha;
|
|
469
473
|
async function createAppAndroidSha(projectId, appId, options) {
|
|
470
474
|
try {
|
|
471
475
|
const response = await apiClient.request({
|
|
@@ -485,7 +489,6 @@ async function createAppAndroidSha(projectId, appId, options) {
|
|
|
485
489
|
});
|
|
486
490
|
}
|
|
487
491
|
}
|
|
488
|
-
exports.createAppAndroidSha = createAppAndroidSha;
|
|
489
492
|
async function deleteAppAndroidSha(projectId, appId, shaId) {
|
|
490
493
|
try {
|
|
491
494
|
await apiClient.request({
|
|
@@ -502,7 +505,6 @@ async function deleteAppAndroidSha(projectId, appId, shaId) {
|
|
|
502
505
|
});
|
|
503
506
|
}
|
|
504
507
|
}
|
|
505
|
-
exports.deleteAppAndroidSha = deleteAppAndroidSha;
|
|
506
508
|
async function findIntelligentPathForIOS(appDir, options) {
|
|
507
509
|
const currentFiles = await fs.readdir(appDir, { withFileTypes: true });
|
|
508
510
|
for (let i = 0; i < currentFiles.length; i++) {
|
|
@@ -531,7 +533,6 @@ async function findIntelligentPathForIOS(appDir, options) {
|
|
|
531
533
|
}
|
|
532
534
|
return outputPath;
|
|
533
535
|
}
|
|
534
|
-
exports.findIntelligentPathForIOS = findIntelligentPathForIOS;
|
|
535
536
|
async function findIntelligentPathForAndroid(appDir, options) {
|
|
536
537
|
const paths = appDir.split("/");
|
|
537
538
|
if (paths[0] === "app") {
|
|
@@ -563,4 +564,3 @@ async function findIntelligentPathForAndroid(appDir, options) {
|
|
|
563
564
|
return module;
|
|
564
565
|
}
|
|
565
566
|
}
|
|
566
|
-
exports.findIntelligentPathForAndroid = findIntelligentPathForAndroid;
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.DatabaseLocation = exports.DatabaseInstanceState = exports.DatabaseInstanceType = exports.APP_LIST_PAGE_SIZE = exports.MGMT_API_VERSION = void 0;
|
|
4
|
+
exports.populateInstanceDetails = populateInstanceDetails;
|
|
5
|
+
exports.getDatabaseInstanceDetails = getDatabaseInstanceDetails;
|
|
6
|
+
exports.createInstance = createInstance;
|
|
7
|
+
exports.checkInstanceNameAvailable = checkInstanceNameAvailable;
|
|
8
|
+
exports.parseDatabaseLocation = parseDatabaseLocation;
|
|
9
|
+
exports.listDatabaseInstances = listDatabaseInstances;
|
|
4
10
|
const apiv2_1 = require("../apiv2");
|
|
5
11
|
const constants_1 = require("../emulator/constants");
|
|
6
12
|
const error_1 = require("../error");
|
|
@@ -16,27 +22,26 @@ var DatabaseInstanceType;
|
|
|
16
22
|
DatabaseInstanceType["DATABASE_INSTANCE_TYPE_UNSPECIFIED"] = "unspecified";
|
|
17
23
|
DatabaseInstanceType["DEFAULT_DATABASE"] = "default_database";
|
|
18
24
|
DatabaseInstanceType["USER_DATABASE"] = "user_database";
|
|
19
|
-
})(DatabaseInstanceType
|
|
25
|
+
})(DatabaseInstanceType || (exports.DatabaseInstanceType = DatabaseInstanceType = {}));
|
|
20
26
|
var DatabaseInstanceState;
|
|
21
27
|
(function (DatabaseInstanceState) {
|
|
22
28
|
DatabaseInstanceState["LIFECYCLE_STATE_UNSPECIFIED"] = "unspecified";
|
|
23
29
|
DatabaseInstanceState["ACTIVE"] = "active";
|
|
24
30
|
DatabaseInstanceState["DISABLED"] = "disabled";
|
|
25
31
|
DatabaseInstanceState["DELETED"] = "deleted";
|
|
26
|
-
})(DatabaseInstanceState
|
|
32
|
+
})(DatabaseInstanceState || (exports.DatabaseInstanceState = DatabaseInstanceState = {}));
|
|
27
33
|
var DatabaseLocation;
|
|
28
34
|
(function (DatabaseLocation) {
|
|
29
35
|
DatabaseLocation["US_CENTRAL1"] = "us-central1";
|
|
30
36
|
DatabaseLocation["EUROPE_WEST1"] = "europe-west1";
|
|
31
37
|
DatabaseLocation["ASIA_SOUTHEAST1"] = "asia-southeast1";
|
|
32
38
|
DatabaseLocation["ANY"] = "-";
|
|
33
|
-
})(DatabaseLocation
|
|
39
|
+
})(DatabaseLocation || (exports.DatabaseLocation = DatabaseLocation = {}));
|
|
34
40
|
const apiClient = new apiv2_1.Client({ urlPrefix: (0, api_1.rtdbManagementOrigin)(), apiVersion: exports.MGMT_API_VERSION });
|
|
35
41
|
async function populateInstanceDetails(options) {
|
|
36
42
|
options.instanceDetails = await getDatabaseInstanceDetails(options.project, options.instance);
|
|
37
43
|
return Promise.resolve();
|
|
38
44
|
}
|
|
39
|
-
exports.populateInstanceDetails = populateInstanceDetails;
|
|
40
45
|
async function getDatabaseInstanceDetails(projectId, instanceName) {
|
|
41
46
|
try {
|
|
42
47
|
const response = await apiClient.request({
|
|
@@ -65,7 +70,6 @@ async function getDatabaseInstanceDetails(projectId, instanceName) {
|
|
|
65
70
|
});
|
|
66
71
|
}
|
|
67
72
|
}
|
|
68
|
-
exports.getDatabaseInstanceDetails = getDatabaseInstanceDetails;
|
|
69
73
|
async function createInstance(projectId, instanceName, location, databaseType) {
|
|
70
74
|
try {
|
|
71
75
|
const response = await apiClient.request({
|
|
@@ -85,9 +89,7 @@ async function createInstance(projectId, instanceName, location, databaseType) {
|
|
|
85
89
|
});
|
|
86
90
|
}
|
|
87
91
|
}
|
|
88
|
-
exports.createInstance = createInstance;
|
|
89
92
|
async function checkInstanceNameAvailable(projectId, instanceName, databaseType, location) {
|
|
90
|
-
var _a, _b, _c;
|
|
91
93
|
if (!location) {
|
|
92
94
|
location = DatabaseLocation.US_CENTRAL1;
|
|
93
95
|
}
|
|
@@ -104,7 +106,7 @@ async function checkInstanceNameAvailable(projectId, instanceName, databaseType,
|
|
|
104
106
|
catch (err) {
|
|
105
107
|
logger_1.logger.debug(`Invalid Realtime Database instance name: ${instanceName}.${err.message ? " " + err.message : ""}`);
|
|
106
108
|
const errBody = err.context.body.error;
|
|
107
|
-
if (
|
|
109
|
+
if (errBody?.details?.[0]?.metadata?.suggested_database_ids) {
|
|
108
110
|
return {
|
|
109
111
|
available: false,
|
|
110
112
|
suggestedIds: errBody.details[0].metadata.suggested_database_ids.split(","),
|
|
@@ -115,7 +117,6 @@ async function checkInstanceNameAvailable(projectId, instanceName, databaseType,
|
|
|
115
117
|
});
|
|
116
118
|
}
|
|
117
119
|
}
|
|
118
|
-
exports.checkInstanceNameAvailable = checkInstanceNameAvailable;
|
|
119
120
|
function parseDatabaseLocation(location, defaultLocation) {
|
|
120
121
|
if (!location) {
|
|
121
122
|
return defaultLocation;
|
|
@@ -133,7 +134,6 @@ function parseDatabaseLocation(location, defaultLocation) {
|
|
|
133
134
|
throw new error_1.FirebaseError(`Unexpected location value: ${location}. Only us-central1, europe-west1, and asia-southeast1 locations are supported`);
|
|
134
135
|
}
|
|
135
136
|
}
|
|
136
|
-
exports.parseDatabaseLocation = parseDatabaseLocation;
|
|
137
137
|
async function listDatabaseInstances(projectId, location, pageSize = exports.APP_LIST_PAGE_SIZE) {
|
|
138
138
|
const instances = [];
|
|
139
139
|
try {
|
|
@@ -164,7 +164,6 @@ async function listDatabaseInstances(projectId, location, pageSize = exports.APP
|
|
|
164
164
|
});
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
|
-
exports.listDatabaseInstances = listDatabaseInstances;
|
|
168
167
|
function convertDatabaseInstance(serverInstance) {
|
|
169
168
|
if (!serverInstance.name) {
|
|
170
169
|
throw new error_1.FirebaseError(`DatabaseInstance response is missing field "name"`);
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.ProjectParentResourceType = void 0;
|
|
4
|
+
exports.promptProjectCreation = promptProjectCreation;
|
|
5
|
+
exports.createFirebaseProjectAndLog = createFirebaseProjectAndLog;
|
|
6
|
+
exports.addFirebaseToCloudProjectAndLog = addFirebaseToCloudProjectAndLog;
|
|
7
|
+
exports.getOrPromptProject = getOrPromptProject;
|
|
8
|
+
exports.selectProjectInteractively = selectProjectInteractively;
|
|
9
|
+
exports.promptAvailableProjectId = promptAvailableProjectId;
|
|
10
|
+
exports.createCloudProject = createCloudProject;
|
|
11
|
+
exports.addFirebaseToCloudProject = addFirebaseToCloudProject;
|
|
12
|
+
exports.getFirebaseProjectPage = getFirebaseProjectPage;
|
|
13
|
+
exports.getAvailableCloudProjectPage = getAvailableCloudProjectPage;
|
|
14
|
+
exports.listFirebaseProjects = listFirebaseProjects;
|
|
15
|
+
exports.checkAndRecommendProjectId = checkAndRecommendProjectId;
|
|
16
|
+
exports.getFirebaseProject = getFirebaseProject;
|
|
17
|
+
exports.getProject = getProject;
|
|
18
|
+
exports.checkFirebaseEnabledForCloudProject = checkFirebaseEnabledForCloudProject;
|
|
4
19
|
const clc = require("colorette");
|
|
5
20
|
const ora = require("ora");
|
|
6
21
|
const apiv2_1 = require("../apiv2");
|
|
@@ -21,52 +36,52 @@ var ProjectParentResourceType;
|
|
|
21
36
|
(function (ProjectParentResourceType) {
|
|
22
37
|
ProjectParentResourceType["ORGANIZATION"] = "organization";
|
|
23
38
|
ProjectParentResourceType["FOLDER"] = "folder";
|
|
24
|
-
})(ProjectParentResourceType
|
|
39
|
+
})(ProjectParentResourceType || (exports.ProjectParentResourceType = ProjectParentResourceType = {}));
|
|
25
40
|
async function promptProjectCreation(options) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
const projectId = options.projectId ??
|
|
42
|
+
(await prompt.input({
|
|
43
|
+
message: "Please specify a unique project id " +
|
|
44
|
+
`(${clc.yellow("warning")}: cannot be modified afterward) [6-30 characters]:\n`,
|
|
45
|
+
validate: async (projectId) => {
|
|
46
|
+
if (projectId.length < 6) {
|
|
47
|
+
return "Project ID must be at least 6 characters long";
|
|
48
|
+
}
|
|
49
|
+
else if (projectId.length > 30) {
|
|
50
|
+
return "Project ID cannot be longer than 30 characters";
|
|
51
|
+
}
|
|
52
|
+
if (constants_1.Constants.isDemoProject(projectId)) {
|
|
53
|
+
return "Project ID cannot starts with demo-";
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
const { isAvailable, suggestedProjectId } = await checkAndRecommendProjectId(projectId);
|
|
57
|
+
if (!isAvailable && suggestedProjectId) {
|
|
58
|
+
return `Project ID is taken or unavailable. Try ${clc.bold(suggestedProjectId)}.`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
logger_1.logger.debug(`Couldn't check if project ID ${projectId} is available. Original error: ${error}`);
|
|
44
63
|
}
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
logger_1.logger.debug(`Couldn't check if project ID ${projectId} is available. Original error: ${error}`);
|
|
48
|
-
}
|
|
49
|
-
return true;
|
|
50
|
-
},
|
|
51
|
-
}));
|
|
52
|
-
const displayName = (_b = options.displayName) !== null && _b !== void 0 ? _b : (await prompt.input({
|
|
53
|
-
default: projectId,
|
|
54
|
-
message: "What would you like to call your project? (defaults to your project ID)",
|
|
55
|
-
validate: (displayName) => {
|
|
56
|
-
if (displayName.length < 4) {
|
|
57
|
-
return "Project name must be at least 4 characters long";
|
|
58
|
-
}
|
|
59
|
-
else if (displayName.length > 30) {
|
|
60
|
-
return "Project name cannot be longer than 30 characters";
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
64
|
return true;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
65
|
+
},
|
|
66
|
+
}));
|
|
67
|
+
const displayName = options.displayName ??
|
|
68
|
+
(await prompt.input({
|
|
69
|
+
default: projectId,
|
|
70
|
+
message: "What would you like to call your project? (defaults to your project ID)",
|
|
71
|
+
validate: (displayName) => {
|
|
72
|
+
if (displayName.length < 4) {
|
|
73
|
+
return "Project name must be at least 4 characters long";
|
|
74
|
+
}
|
|
75
|
+
else if (displayName.length > 30) {
|
|
76
|
+
return "Project name cannot be longer than 30 characters";
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
}));
|
|
67
83
|
return { projectId, displayName };
|
|
68
84
|
}
|
|
69
|
-
exports.promptProjectCreation = promptProjectCreation;
|
|
70
85
|
const firebaseAPIClient = new apiv2_1.Client({
|
|
71
86
|
urlPrefix: api.firebaseApiOrigin(),
|
|
72
87
|
auth: true,
|
|
@@ -93,7 +108,6 @@ async function createFirebaseProjectAndLog(projectId, options) {
|
|
|
93
108
|
}
|
|
94
109
|
return addFirebaseToCloudProjectAndLog(projectId);
|
|
95
110
|
}
|
|
96
|
-
exports.createFirebaseProjectAndLog = createFirebaseProjectAndLog;
|
|
97
111
|
async function addFirebaseToCloudProjectAndLog(projectId) {
|
|
98
112
|
let projectInfo;
|
|
99
113
|
const spinner = ora("Adding Firebase resources to Google Cloud Platform project").start();
|
|
@@ -108,7 +122,6 @@ async function addFirebaseToCloudProjectAndLog(projectId) {
|
|
|
108
122
|
logNewFirebaseProjectInfo(projectInfo);
|
|
109
123
|
return projectInfo;
|
|
110
124
|
}
|
|
111
|
-
exports.addFirebaseToCloudProjectAndLog = addFirebaseToCloudProjectAndLog;
|
|
112
125
|
function logNewFirebaseProjectInfo(projectInfo) {
|
|
113
126
|
logger_1.logger.info("");
|
|
114
127
|
if (process.platform === "win32") {
|
|
@@ -133,7 +146,6 @@ async function getOrPromptProject(options) {
|
|
|
133
146
|
}
|
|
134
147
|
return selectProjectInteractively();
|
|
135
148
|
}
|
|
136
|
-
exports.getOrPromptProject = getOrPromptProject;
|
|
137
149
|
async function selectProjectInteractively(pageSize = MAXIMUM_PROMPT_LIST) {
|
|
138
150
|
const { projects, nextPageToken } = await getFirebaseProjectPage(pageSize);
|
|
139
151
|
if (projects.length === 0) {
|
|
@@ -145,7 +157,6 @@ async function selectProjectInteractively(pageSize = MAXIMUM_PROMPT_LIST) {
|
|
|
145
157
|
}
|
|
146
158
|
return selectProjectFromList(projects);
|
|
147
159
|
}
|
|
148
|
-
exports.selectProjectInteractively = selectProjectInteractively;
|
|
149
160
|
async function selectProjectByPrompting() {
|
|
150
161
|
const projectId = await prompt.input("Please input the project ID you would like to use:");
|
|
151
162
|
if (!projectId) {
|
|
@@ -210,7 +221,6 @@ async function promptAvailableProjectId() {
|
|
|
210
221
|
});
|
|
211
222
|
}
|
|
212
223
|
}
|
|
213
|
-
exports.promptAvailableProjectId = promptAvailableProjectId;
|
|
214
224
|
async function createCloudProject(projectId, options) {
|
|
215
225
|
try {
|
|
216
226
|
const data = {
|
|
@@ -247,7 +257,6 @@ async function createCloudProject(projectId, options) {
|
|
|
247
257
|
}
|
|
248
258
|
}
|
|
249
259
|
}
|
|
250
|
-
exports.createCloudProject = createCloudProject;
|
|
251
260
|
async function addFirebaseToCloudProject(projectId) {
|
|
252
261
|
try {
|
|
253
262
|
const response = await firebaseAPIClient.request({
|
|
@@ -268,7 +277,6 @@ async function addFirebaseToCloudProject(projectId) {
|
|
|
268
277
|
throw new error_1.FirebaseError("Failed to add Firebase to Google Cloud Platform project. See firebase-debug.log for more info.", { exit: 2, original: err });
|
|
269
278
|
}
|
|
270
279
|
}
|
|
271
|
-
exports.addFirebaseToCloudProject = addFirebaseToCloudProject;
|
|
272
280
|
async function getProjectPage(apiResource, options) {
|
|
273
281
|
const queryParams = {
|
|
274
282
|
pageSize: `${options.pageSize}`,
|
|
@@ -305,7 +313,6 @@ async function getFirebaseProjectPage(pageSize = PROJECT_LIST_PAGE_SIZE, pageTok
|
|
|
305
313
|
}
|
|
306
314
|
return projectPage;
|
|
307
315
|
}
|
|
308
|
-
exports.getFirebaseProjectPage = getFirebaseProjectPage;
|
|
309
316
|
async function getAvailableCloudProjectPage(pageSize = PROJECT_LIST_PAGE_SIZE, pageToken) {
|
|
310
317
|
try {
|
|
311
318
|
return await getProjectPage("/availableProjects", {
|
|
@@ -319,7 +326,6 @@ async function getAvailableCloudProjectPage(pageSize = PROJECT_LIST_PAGE_SIZE, p
|
|
|
319
326
|
throw new error_1.FirebaseError("Failed to list available Google Cloud Platform projects. See firebase-debug.log for more info.", { exit: 2, original: err });
|
|
320
327
|
}
|
|
321
328
|
}
|
|
322
|
-
exports.getAvailableCloudProjectPage = getAvailableCloudProjectPage;
|
|
323
329
|
async function listFirebaseProjects(pageSize) {
|
|
324
330
|
const projects = [];
|
|
325
331
|
let nextPageToken;
|
|
@@ -330,7 +336,6 @@ async function listFirebaseProjects(pageSize) {
|
|
|
330
336
|
} while (nextPageToken);
|
|
331
337
|
return projects;
|
|
332
338
|
}
|
|
333
|
-
exports.listFirebaseProjects = listFirebaseProjects;
|
|
334
339
|
async function checkAndRecommendProjectId(projectId) {
|
|
335
340
|
try {
|
|
336
341
|
const res = await firebaseV1APIClient.request({
|
|
@@ -351,7 +356,6 @@ async function checkAndRecommendProjectId(projectId) {
|
|
|
351
356
|
throw new error_1.FirebaseError("Failed to check if project ID is available. See firebase-debug.log for more info.", { exit: 2, original: err });
|
|
352
357
|
}
|
|
353
358
|
}
|
|
354
|
-
exports.checkAndRecommendProjectId = checkAndRecommendProjectId;
|
|
355
359
|
async function getFirebaseProject(projectId) {
|
|
356
360
|
try {
|
|
357
361
|
const res = await firebaseAPIClient.request({
|
|
@@ -381,13 +385,11 @@ async function getFirebaseProject(projectId) {
|
|
|
381
385
|
"Please make sure the project exists and your account has permission to access it.", { exit: 2, original: err });
|
|
382
386
|
}
|
|
383
387
|
}
|
|
384
|
-
exports.getFirebaseProject = getFirebaseProject;
|
|
385
388
|
async function getProject(projectId) {
|
|
386
389
|
await (0, ensureApiEnabled_1.bestEffortEnsure)(projectId, api.resourceManagerOrigin(), "firebase", true);
|
|
387
390
|
const response = await resourceManagerClient.get(`/projects/${projectId}`);
|
|
388
391
|
return response.body;
|
|
389
392
|
}
|
|
390
|
-
exports.getProject = getProject;
|
|
391
393
|
async function checkFirebaseEnabledForCloudProject(projectId) {
|
|
392
394
|
try {
|
|
393
395
|
const res = await firebaseAPIClient.request({
|
|
@@ -410,4 +412,3 @@ async function checkFirebaseEnabledForCloudProject(projectId) {
|
|
|
410
412
|
"Please make sure the project exists and your account has permission to access it.", { exit: 2, original: err });
|
|
411
413
|
}
|
|
412
414
|
}
|
|
413
|
-
exports.checkFirebaseEnabledForCloudProject = checkFirebaseEnabledForCloudProject;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.enhanceProvisioningError =
|
|
3
|
+
exports.enhanceProvisioningError = enhanceProvisioningError;
|
|
4
4
|
const error_1 = require("../../error");
|
|
5
5
|
function isErrorInfo(detail) {
|
|
6
6
|
return detail["@type"] === "type.googleapis.com/google.rpc.ErrorInfo";
|
|
@@ -9,14 +9,13 @@ function isHelpLinks(detail) {
|
|
|
9
9
|
return detail["@type"] === "type.googleapis.com/google.rpc.Help";
|
|
10
10
|
}
|
|
11
11
|
function extractErrorDetails(err) {
|
|
12
|
-
var _a;
|
|
13
12
|
if (!(err instanceof Error)) {
|
|
14
13
|
return "";
|
|
15
14
|
}
|
|
16
15
|
if (err instanceof error_1.FirebaseError && err.context) {
|
|
17
16
|
const context = err.context;
|
|
18
|
-
const errorBody =
|
|
19
|
-
if (
|
|
17
|
+
const errorBody = context.body?.error;
|
|
18
|
+
if (errorBody?.details && Array.isArray(errorBody.details)) {
|
|
20
19
|
const parts = [];
|
|
21
20
|
for (const detail of errorBody.details) {
|
|
22
21
|
if (isErrorInfo(detail)) {
|
|
@@ -51,4 +50,3 @@ function enhanceProvisioningError(err, contextMessage) {
|
|
|
51
50
|
original: originalError,
|
|
52
51
|
});
|
|
53
52
|
}
|
|
54
|
-
exports.enhanceProvisioningError = enhanceProvisioningError;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.buildAppNamespace = buildAppNamespace;
|
|
4
|
+
exports.buildParentString = buildParentString;
|
|
5
|
+
exports.buildProvisionRequest = buildProvisionRequest;
|
|
6
|
+
exports.provisionFirebaseApp = provisionFirebaseApp;
|
|
4
7
|
const apiv2_1 = require("../../apiv2");
|
|
5
8
|
const api_1 = require("../../api");
|
|
6
9
|
const error_1 = require("../../error");
|
|
@@ -35,7 +38,6 @@ function buildAppNamespace(app) {
|
|
|
35
38
|
}
|
|
36
39
|
return namespace;
|
|
37
40
|
}
|
|
38
|
-
exports.buildAppNamespace = buildAppNamespace;
|
|
39
41
|
function buildParentString(parent) {
|
|
40
42
|
switch (parent.type) {
|
|
41
43
|
case "existing_project":
|
|
@@ -48,9 +50,7 @@ function buildParentString(parent) {
|
|
|
48
50
|
throw new error_1.FirebaseError("Unsupported parent type", { exit: 2 });
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
|
-
exports.buildParentString = buildParentString;
|
|
52
53
|
function buildProvisionRequest(options) {
|
|
53
|
-
var _a, _b;
|
|
54
54
|
const platformInput = (() => {
|
|
55
55
|
switch (options.app.platform) {
|
|
56
56
|
case apps_1.AppPlatform.IOS:
|
|
@@ -71,11 +71,18 @@ function buildProvisionRequest(options) {
|
|
|
71
71
|
return { webInput: {} };
|
|
72
72
|
}
|
|
73
73
|
})();
|
|
74
|
-
return
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
return {
|
|
75
|
+
appNamespace: buildAppNamespace(options.app),
|
|
76
|
+
displayName: options.app.displayName,
|
|
77
|
+
...(options.project.parent && { parent: buildParentString(options.project.parent) }),
|
|
78
|
+
...(options.features?.location && { location: options.features.location }),
|
|
79
|
+
...(options.requestId && { requestId: options.requestId }),
|
|
80
|
+
...(options.features?.firebaseAiLogicInput && {
|
|
81
|
+
firebaseAiLogicInput: options.features.firebaseAiLogicInput,
|
|
82
|
+
}),
|
|
83
|
+
...platformInput,
|
|
84
|
+
};
|
|
77
85
|
}
|
|
78
|
-
exports.buildProvisionRequest = buildProvisionRequest;
|
|
79
86
|
async function provisionFirebaseApp(options) {
|
|
80
87
|
try {
|
|
81
88
|
const request = buildProvisionRequest(options);
|
|
@@ -104,4 +111,3 @@ async function provisionFirebaseApp(options) {
|
|
|
104
111
|
throw (0, errorHandler_1.enhanceProvisioningError)(err, "Failed to provision Firebase app");
|
|
105
112
|
}
|
|
106
113
|
}
|
|
107
|
-
exports.provisionFirebaseApp = provisionFirebaseApp;
|
package/lib/management/studio.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.reconcileStudioFirebaseProject = reconcileStudioFirebaseProject;
|
|
4
|
+
exports.updateStudioFirebaseProject = updateStudioFirebaseProject;
|
|
4
5
|
const apiv2_1 = require("../apiv2");
|
|
5
6
|
const prompt = require("../prompt");
|
|
6
7
|
const api = require("../api");
|
|
@@ -53,7 +54,6 @@ async function reconcileStudioFirebaseProject(options, activeProjectFromConfig)
|
|
|
53
54
|
}
|
|
54
55
|
return studioWorkspace.firebaseProjectId;
|
|
55
56
|
}
|
|
56
|
-
exports.reconcileStudioFirebaseProject = reconcileStudioFirebaseProject;
|
|
57
57
|
async function getStudioWorkspace() {
|
|
58
58
|
const workspaceId = process.env.WORKSPACE_SLUG;
|
|
59
59
|
if (!workspaceId) {
|
|
@@ -114,7 +114,6 @@ async function updateStudioFirebaseProject(projectId) {
|
|
|
114
114
|
}
|
|
115
115
|
recordStudioProjectSyncTime();
|
|
116
116
|
}
|
|
117
|
-
exports.updateStudioFirebaseProject = updateStudioFirebaseProject;
|
|
118
117
|
function recordStudioProjectSyncTime() {
|
|
119
118
|
configstore_1.configstore.set("firebaseStudioProjectLastSynced", Date.now());
|
|
120
119
|
}
|