firebase-tools 15.0.0 → 15.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/accountExporter.js +3 -5
- package/lib/accountImporter.js +4 -5
- package/lib/api.js +3 -3
- package/lib/apiv2.js +9 -13
- package/lib/appUtils.js +33 -36
- package/lib/appdistribution/client.js +4 -8
- package/lib/appdistribution/distribution.js +4 -4
- package/lib/appdistribution/options-parser-util.js +8 -9
- package/lib/appdistribution/types.js +2 -2
- package/lib/appdistribution/yaml_helper.js +33 -17
- package/lib/apphosting/app.js +8 -13
- package/lib/apphosting/backend.js +34 -24
- package/lib/apphosting/config.js +14 -14
- package/lib/apphosting/githubConnections.js +38 -35
- package/lib/apphosting/localbuilds.js +4 -6
- package/lib/apphosting/repo.js +24 -20
- package/lib/apphosting/rollout.js +12 -5
- package/lib/apphosting/secrets/dialogs.js +9 -9
- package/lib/apphosting/secrets/index.js +9 -11
- package/lib/apphosting/utils.js +2 -3
- package/lib/apphosting/yaml.js +12 -11
- package/lib/apptesting/ensureProjectConfigured.js +1 -2
- package/lib/apptesting/invokeTests.js +2 -3
- package/lib/apptesting/parseTestFiles.js +5 -6
- package/lib/apptesting/types.js +2 -2
- package/lib/archiveDirectory.js +1 -2
- package/lib/auth.js +36 -40
- package/lib/bin/cli.js +2 -3
- package/lib/bin/mcp.js +47 -10
- package/lib/checkMinRequiredVersion.js +1 -2
- package/lib/checkValidTargetFilters.js +1 -2
- package/lib/command.js +6 -9
- package/lib/commands/appdistribution-testers-list.js +2 -3
- package/lib/commands/apphosting-backends-list.js +4 -6
- package/lib/commands/apphosting-builds-create.js +2 -3
- package/lib/commands/apphosting-builds-get.js +1 -2
- package/lib/commands/apphosting-rollouts-list.js +1 -2
- package/lib/commands/apps-init.js +1 -1
- package/lib/commands/{apptesting-execute.js → apptesting-wata.js} +3 -4
- package/lib/commands/crashlytics-symbols-upload.js +2 -2
- package/lib/commands/dataconnect-execute.js +4 -4
- package/lib/commands/dataconnect-sdk-generate.js +5 -6
- package/lib/commands/dataconnect-services-list.js +7 -8
- package/lib/commands/dataconnect-sql-diff.js +1 -2
- package/lib/commands/dataconnect-sql-migrate.js +4 -3
- package/lib/commands/dataconnect-sql-setup.js +2 -2
- package/lib/commands/dataconnect-sql-shell.js +5 -1
- package/lib/commands/emulators-start.js +1 -2
- package/lib/commands/ext-configure.js +6 -4
- package/lib/commands/ext-dev-list.js +2 -3
- package/lib/commands/ext-dev-upload.js +2 -2
- package/lib/commands/ext-export.js +1 -1
- package/lib/commands/ext-info.js +2 -3
- package/lib/commands/ext-install.js +5 -7
- package/lib/commands/firestore-backups-list.js +1 -2
- package/lib/commands/firestore-backups-schedules-list.js +1 -2
- package/lib/commands/firestore-indexes-list.js +1 -2
- package/lib/commands/firestore-utils.js +1 -2
- package/lib/commands/functions-artifacts-setpolicy.js +1 -2
- package/lib/commands/functions-config-export.js +2 -3
- package/lib/commands/hosting-channel-deploy.js +2 -2
- package/lib/commands/hosting-clone.js +2 -3
- package/lib/commands/hosting-sites-create.js +1 -1
- package/lib/commands/index.js +2 -3
- package/lib/commands/init.js +4 -5
- package/lib/commands/internaltesting-functions-discover.js +1 -1
- package/lib/commands/login.js +4 -5
- package/lib/commands/logout.js +3 -3
- package/lib/commands/projects-create.js +1 -1
- package/lib/commands/remoteconfig-experiments-list.js +2 -3
- package/lib/commands/remoteconfig-get.js +1 -1
- package/lib/commands/remoteconfig-rollback.js +1 -2
- package/lib/commands/remoteconfig-rollouts-list.js +2 -3
- package/lib/commands/remoteconfig-versions-list.js +3 -4
- package/lib/commands/use.js +3 -3
- package/lib/config.js +4 -5
- package/lib/crashlytics/buildToolsJarHelper.js +3 -5
- package/lib/crashlytics/events.js +4 -7
- package/lib/crashlytics/filters.js +10 -12
- package/lib/crashlytics/issues.js +2 -3
- package/lib/crashlytics/notes.js +3 -4
- package/lib/crashlytics/reports.js +21 -15
- package/lib/crashlytics/types.js +7 -7
- package/lib/crashlytics/utils.js +4 -4
- package/lib/database/api.js +2 -3
- package/lib/database/import.js +4 -4
- package/lib/database/metadata.js +5 -6
- package/lib/database/rulesConfig.js +2 -3
- package/lib/dataconnect/build.js +10 -13
- package/lib/dataconnect/checkIam.js +1 -2
- package/lib/dataconnect/client.js +15 -18
- package/lib/dataconnect/dataplaneClient.js +6 -6
- package/lib/dataconnect/ensureApis.js +2 -3
- package/lib/dataconnect/errors.js +8 -11
- package/lib/dataconnect/filters.js +2 -3
- package/lib/dataconnect/freeTrial.js +3 -4
- package/lib/dataconnect/graphqlError.js +5 -8
- package/lib/dataconnect/load.js +10 -11
- package/lib/dataconnect/names.js +14 -18
- package/lib/dataconnect/prompts.js +1 -2
- package/lib/dataconnect/provisionCloudSql.js +13 -17
- package/lib/dataconnect/schemaMigration.js +60 -27
- package/lib/dataconnect/types.js +10 -12
- package/lib/dataconnect/webhook.js +3 -3
- package/lib/defaultCredentials.js +3 -4
- package/lib/deploy/apphosting/deploy.js +2 -3
- package/lib/deploy/apphosting/prepare.js +3 -5
- package/lib/deploy/apphosting/release.js +1 -1
- package/lib/deploy/apphosting/util.js +1 -2
- package/lib/deploy/database/deploy.js +1 -2
- package/lib/deploy/database/prepare.js +1 -2
- package/lib/deploy/database/release.js +1 -2
- package/lib/deploy/dataconnect/context.js +15 -4
- package/lib/deploy/dataconnect/deploy.js +5 -6
- package/lib/deploy/dataconnect/prepare.js +7 -9
- package/lib/deploy/dataconnect/release.js +7 -10
- package/lib/deploy/extensions/deploy.js +7 -9
- package/lib/deploy/extensions/deploymentSummary.js +6 -7
- package/lib/deploy/extensions/planner.js +15 -18
- package/lib/deploy/extensions/prepare.js +9 -11
- package/lib/deploy/extensions/release.js +10 -12
- package/lib/deploy/extensions/secrets.js +8 -11
- package/lib/deploy/extensions/tasks.js +6 -8
- package/lib/deploy/extensions/v2FunctionHelper.js +2 -3
- package/lib/deploy/extensions/validate.js +1 -2
- package/lib/deploy/firestore/deploy.js +3 -5
- package/lib/deploy/firestore/prepare.js +2 -3
- package/lib/deploy/firestore/release.js +3 -4
- package/lib/deploy/functions/backend.js +52 -42
- package/lib/deploy/functions/build.js +41 -15
- package/lib/deploy/functions/cache/applyHash.js +3 -5
- package/lib/deploy/functions/cache/hash.js +4 -5
- package/lib/deploy/functions/cel.js +3 -3
- package/lib/deploy/functions/checkIam.js +8 -8
- package/lib/deploy/functions/containerCleaner.js +10 -6
- package/lib/deploy/functions/deploy.js +6 -8
- package/lib/deploy/functions/ensure.js +6 -9
- package/lib/deploy/functions/functionsDeployHelper.js +10 -11
- package/lib/deploy/functions/params.js +10 -10
- package/lib/deploy/functions/prepare.js +41 -36
- package/lib/deploy/functions/prepareFunctionsUpload.js +24 -10
- package/lib/deploy/functions/pricing.js +3 -3
- package/lib/deploy/functions/prompts.js +7 -10
- package/lib/deploy/functions/release/executor.js +5 -6
- package/lib/deploy/functions/release/fabricator.js +76 -29
- package/lib/deploy/functions/release/index.js +23 -14
- package/lib/deploy/functions/release/planner.js +15 -14
- package/lib/deploy/functions/release/reporter.js +20 -20
- package/lib/deploy/functions/release/sourceTokenScraper.js +4 -5
- package/lib/deploy/functions/remoteSource.js +3 -4
- package/lib/deploy/functions/runtimes/discovery/index.js +9 -12
- package/lib/deploy/functions/runtimes/discovery/parsing.js +2 -3
- package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +29 -10
- package/lib/deploy/functions/runtimes/index.js +1 -2
- package/lib/deploy/functions/runtimes/node/index.js +18 -9
- package/lib/deploy/functions/runtimes/node/parseRuntimeAndValidateSDK.js +2 -2
- package/lib/deploy/functions/runtimes/node/validate.js +1 -2
- package/lib/deploy/functions/runtimes/node/versioning.js +6 -7
- package/lib/deploy/functions/runtimes/python/index.js +12 -12
- package/lib/deploy/functions/runtimes/supported/index.js +5 -6
- package/lib/deploy/functions/services/auth.js +49 -36
- package/lib/deploy/functions/services/database.js +1 -2
- package/lib/deploy/functions/services/dataconnect.js +16 -2
- package/lib/deploy/functions/services/firebaseAlerts.js +1 -2
- package/lib/deploy/functions/services/firestore.js +3 -5
- package/lib/deploy/functions/services/index.js +2 -2
- package/lib/deploy/functions/services/remoteConfig.js +1 -2
- package/lib/deploy/functions/services/storage.js +3 -5
- package/lib/deploy/functions/services/testLab.js +1 -2
- package/lib/deploy/functions/triggerRegionHelper.js +1 -2
- package/lib/deploy/functions/validate.js +12 -11
- package/lib/deploy/hosting/convertConfig.js +38 -22
- package/lib/deploy/hosting/deploy.js +4 -7
- package/lib/deploy/hosting/hashcache.js +2 -3
- package/lib/deploy/hosting/prepare.js +14 -14
- package/lib/deploy/hosting/release.js +1 -2
- package/lib/deploy/index.js +7 -8
- package/lib/deploy/lifecycleHooks.js +3 -5
- package/lib/deploy/remoteconfig/deploy.js +1 -1
- package/lib/deploy/remoteconfig/functions.js +5 -6
- package/lib/deploy/remoteconfig/prepare.js +2 -3
- package/lib/deploy/remoteconfig/release.js +2 -2
- package/lib/deploy/storage/deploy.js +1 -1
- package/lib/deploy/storage/prepare.js +1 -1
- package/lib/deploy/storage/release.js +1 -1
- package/lib/deploymentTool.js +5 -6
- package/lib/detectProjectRoot.js +1 -2
- package/lib/downloadUtils.js +2 -3
- package/lib/emulator/adminSdkConfig.js +2 -3
- package/lib/emulator/apphosting/config.js +1 -2
- package/lib/emulator/apphosting/developmentServer.js +3 -3
- package/lib/emulator/apphosting/serve.js +20 -14
- package/lib/emulator/auth/cloudFunctions.js +2 -3
- package/lib/emulator/auth/errors.js +2 -2
- package/lib/emulator/auth/handlers.js +3 -4
- package/lib/emulator/auth/index.js +6 -6
- package/lib/emulator/auth/operations.js +171 -129
- package/lib/emulator/auth/server.js +30 -22
- package/lib/emulator/auth/state.js +26 -36
- package/lib/emulator/auth/utils.js +12 -13
- package/lib/emulator/commandUtils.js +20 -20
- package/lib/emulator/controller.js +32 -29
- package/lib/emulator/databaseEmulator.js +1 -2
- package/lib/emulator/dataconnect/pgliteServer.js +48 -104
- package/lib/emulator/dataconnectEmulator.js +6 -9
- package/lib/emulator/download.js +2 -3
- package/lib/emulator/downloadableEmulatorInfo.json +31 -31
- package/lib/emulator/downloadableEmulators.js +49 -24
- package/lib/emulator/emulatorLogger.js +19 -4
- package/lib/emulator/env.js +6 -8
- package/lib/emulator/eventarcEmulator.js +2 -3
- package/lib/emulator/eventarcEmulatorUtils.js +3 -6
- package/lib/emulator/extensions/postinstall.js +1 -2
- package/lib/emulator/extensions/validation.js +4 -7
- package/lib/emulator/extensionsEmulator.js +6 -9
- package/lib/emulator/functionsEmulator.js +89 -46
- package/lib/emulator/functionsEmulatorRuntime.js +1 -1
- package/lib/emulator/functionsEmulatorShared.js +30 -30
- package/lib/emulator/functionsEmulatorShell.js +4 -6
- package/lib/emulator/functionsEmulatorUtils.js +8 -9
- package/lib/emulator/functionsRuntimeWorker.js +18 -9
- package/lib/emulator/hub.js +41 -34
- package/lib/emulator/hubClient.js +1 -1
- package/lib/emulator/initEmulators.js +2 -3
- package/lib/emulator/loggingEmulator.js +2 -2
- package/lib/emulator/portUtils.js +4 -5
- package/lib/emulator/registry.js +10 -4
- package/lib/emulator/shared/request.js +1 -2
- package/lib/emulator/storage/apis/firebase.js +16 -20
- package/lib/emulator/storage/apis/gcloud.js +6 -9
- package/lib/emulator/storage/apis/shared.js +1 -2
- package/lib/emulator/storage/crc.js +2 -3
- package/lib/emulator/storage/files.js +18 -41
- package/lib/emulator/storage/metadata.js +10 -4
- package/lib/emulator/storage/multipart.js +1 -2
- package/lib/emulator/storage/rfc.js +1 -2
- package/lib/emulator/storage/rules/config.js +1 -2
- package/lib/emulator/storage/rules/manager.js +3 -5
- package/lib/emulator/storage/rules/runtime.js +15 -13
- package/lib/emulator/storage/rules/types.js +2 -2
- package/lib/emulator/storage/rules/utils.js +5 -6
- package/lib/emulator/storage/server.js +1 -2
- package/lib/emulator/storage/upload.js +3 -4
- package/lib/emulator/taskQueue.js +11 -4
- package/lib/emulator/tasksEmulator.js +11 -12
- package/lib/emulator/types.js +6 -6
- package/lib/emulator/ui.js +6 -1
- package/lib/ensureApiEnabled.js +7 -9
- package/lib/env.js +2 -3
- package/lib/error.js +11 -13
- package/lib/errorOut.js +1 -2
- package/lib/experiments.js +15 -18
- package/lib/extensions/askUserForEventsConfig.js +12 -13
- package/lib/extensions/askUserForParam.js +11 -12
- package/lib/extensions/change-log.js +4 -5
- package/lib/extensions/checkProjectBilling.js +1 -2
- package/lib/extensions/diagnose.js +1 -2
- package/lib/extensions/displayExtensionInfo.js +25 -32
- package/lib/extensions/emulator/optionsHelper.js +6 -8
- package/lib/extensions/emulator/specHelper.js +15 -16
- package/lib/extensions/emulator/triggerHelper.js +3 -5
- package/lib/extensions/etags.js +2 -3
- package/lib/extensions/export.js +7 -9
- package/lib/extensions/extensionsApi.js +23 -29
- package/lib/extensions/extensionsHelper.js +52 -80
- package/lib/extensions/listExtensions.js +3 -5
- package/lib/extensions/localHelper.js +5 -5
- package/lib/extensions/manifest.js +15 -16
- package/lib/extensions/metricsUtils.js +3 -4
- package/lib/extensions/paramHelper.js +21 -18
- package/lib/extensions/provisioningHelper.js +17 -21
- package/lib/extensions/publishHelpers.js +1 -2
- package/lib/extensions/publisherApi.js +11 -13
- package/lib/extensions/refs.js +6 -7
- package/lib/extensions/runtimes/common.js +18 -19
- package/lib/extensions/runtimes/node.js +5 -6
- package/lib/extensions/secretsUtils.js +8 -8
- package/lib/extensions/tos.js +7 -8
- package/lib/extensions/types.js +3 -3
- package/lib/extensions/updateHelper.js +6 -7
- package/lib/extensions/utils.js +6 -8
- package/lib/extensions/versionHelper.js +1 -2
- package/lib/extensions/warnings.js +6 -8
- package/lib/fetchMOTD.js +1 -2
- package/lib/fetchWebSetup.js +3 -4
- package/lib/filterTargets.js +1 -2
- package/lib/firebaseConfigValidate.js +2 -3
- package/lib/firestore/api-sort.js +8 -9
- package/lib/firestore/api-types.js +15 -15
- package/lib/firestore/api.js +15 -13
- package/lib/firestore/backupUtils.js +3 -3
- package/lib/firestore/checkDatabaseType.js +1 -2
- package/lib/firestore/delete.js +1 -2
- package/lib/firestore/encodeFirestoreValue.js +1 -2
- package/lib/firestore/fsConfig.js +1 -2
- package/lib/firestore/options.js +1 -1
- package/lib/firestore/util.js +5 -6
- package/lib/firestore/validator.js +4 -5
- package/lib/frameworks/angular/index.js +14 -15
- package/lib/frameworks/angular/utils.js +21 -23
- package/lib/frameworks/astro/index.js +7 -7
- package/lib/frameworks/astro/utils.js +4 -6
- package/lib/frameworks/compose/discover/filesystem.js +3 -3
- package/lib/frameworks/compose/discover/frameworkMatcher.js +4 -5
- package/lib/frameworks/compose/discover/index.js +1 -2
- package/lib/frameworks/compose/discover/runtime/node.js +8 -11
- package/lib/frameworks/compose/driver/docker.js +3 -5
- package/lib/frameworks/compose/driver/hooks.js +2 -2
- package/lib/frameworks/compose/driver/index.js +2 -2
- package/lib/frameworks/compose/driver/local.js +2 -3
- package/lib/frameworks/compose/index.js +5 -7
- package/lib/frameworks/constants.js +3 -3
- package/lib/frameworks/express/index.js +7 -8
- package/lib/frameworks/flutter/index.js +6 -7
- package/lib/frameworks/flutter/utils.js +4 -5
- package/lib/frameworks/index.js +21 -22
- package/lib/frameworks/next/constants.js +5 -2
- package/lib/frameworks/next/index.js +34 -32
- package/lib/frameworks/next/utils.js +40 -39
- package/lib/frameworks/nuxt/index.js +9 -9
- package/lib/frameworks/nuxt/utils.js +4 -6
- package/lib/frameworks/nuxt2/index.js +7 -7
- package/lib/frameworks/sveltekit/index.js +6 -8
- package/lib/frameworks/utils.js +26 -24
- package/lib/frameworks/vite/index.js +8 -9
- package/lib/fsAsync.js +1 -2
- package/lib/fsutils.js +5 -6
- package/lib/functional.js +11 -11
- package/lib/functions/artifacts.js +25 -22
- package/lib/functions/ensureTargeted.js +1 -2
- package/lib/functions/env.js +13 -14
- package/lib/functions/functionslog.js +2 -3
- package/lib/functions/projectConfig.js +29 -33
- package/lib/functions/python.js +10 -4
- package/lib/functions/secrets.js +32 -18
- package/lib/functionsConfig.js +14 -14
- package/lib/functionsConfigClone.js +1 -2
- package/lib/functionsShellCommandAction.js +2 -3
- package/lib/gcp/apphosting.js +43 -28
- package/lib/gcp/apptesting.js +2 -2
- package/lib/gcp/artifactregistry.js +5 -5
- package/lib/gcp/auth.js +11 -13
- package/lib/gcp/cloudbilling.js +4 -5
- package/lib/gcp/cloudbuild.js +10 -11
- package/lib/gcp/cloudfunctions.js +61 -45
- package/lib/gcp/cloudfunctionsv2.js +81 -43
- package/lib/gcp/cloudlogging.js +2 -4
- package/lib/gcp/cloudmonitoring.js +7 -7
- package/lib/gcp/cloudscheduler.js +12 -14
- package/lib/gcp/cloudsql/cloudsqladmin.js +19 -21
- package/lib/gcp/cloudsql/connect.js +14 -9
- package/lib/gcp/cloudsql/fbToolsAuthClient.js +5 -3
- package/lib/gcp/cloudsql/interactive.js +2 -3
- package/lib/gcp/cloudsql/permissions.js +8 -8
- package/lib/gcp/cloudsql/permissionsSetup.js +9 -9
- package/lib/gcp/cloudtasks.js +19 -18
- package/lib/gcp/computeEngine.js +1 -2
- package/lib/gcp/devConnect.js +32 -29
- package/lib/gcp/docker.js +2 -4
- package/lib/gcp/eventarc.js +5 -5
- package/lib/gcp/firedata.js +4 -4
- package/lib/gcp/firestore.js +16 -16
- package/lib/gcp/iam.js +11 -12
- package/lib/gcp/identityPlatform.js +4 -5
- package/lib/gcp/k8s.js +1 -2
- package/lib/gcp/location.js +2 -2
- package/lib/gcp/proto.js +10 -11
- package/lib/gcp/pubsub.js +4 -5
- package/lib/gcp/resourceManager.js +5 -5
- package/lib/gcp/rules.js +13 -14
- package/lib/gcp/run.js +24 -31
- package/lib/gcp/runv2.js +39 -27
- package/lib/gcp/secretManager.js +60 -39
- package/lib/gcp/serviceusage.js +8 -4
- package/lib/gcp/storage.js +22 -20
- package/lib/gemini/fdcExperience.js +5 -5
- package/lib/getDefaultDatabaseInstance.js +2 -4
- package/lib/getDefaultHostingSite.js +3 -4
- package/lib/getProjectNumber.js +1 -2
- package/lib/hosting/api.js +32 -36
- package/lib/hosting/cloudRunProxy.js +2 -3
- package/lib/hosting/config.js +17 -17
- package/lib/hosting/expireUtils.js +3 -3
- package/lib/hosting/functionsProxy.js +1 -2
- package/lib/hosting/implicitInit.js +1 -2
- package/lib/hosting/initMiddleware.js +1 -2
- package/lib/hosting/interactive.js +1 -2
- package/lib/hosting/proxy.js +3 -5
- package/lib/hosting/runTags.js +8 -11
- package/lib/init/features/account.js +1 -2
- package/lib/init/features/ailogic/index.js +3 -5
- package/lib/init/features/ailogic/utils.js +6 -8
- package/lib/init/features/aitools/claude.js +1 -2
- package/lib/init/features/aitools/cursor.js +1 -2
- package/lib/init/features/aitools/gemini.js +1 -1
- package/lib/init/features/aitools/promptUpdater.js +10 -12
- package/lib/init/features/aitools.js +1 -2
- package/lib/init/features/apphosting.js +3 -4
- package/lib/init/features/apptesting/index.js +9 -9
- package/lib/init/features/database.js +4 -5
- package/lib/init/features/dataconnect/create_app.js +3 -4
- package/lib/init/features/dataconnect/index.js +25 -22
- package/lib/init/features/dataconnect/resolver.js +6 -10
- package/lib/init/features/dataconnect/sdk.js +31 -24
- package/lib/init/features/emulators.js +7 -6
- package/lib/init/features/extensions/index.js +3 -5
- package/lib/init/features/firestore/index.js +7 -9
- package/lib/init/features/firestore/indexes.js +2 -2
- package/lib/init/features/firestore/rules.js +3 -3
- package/lib/init/features/functions/index.js +3 -5
- package/lib/init/features/functions/javascript.js +1 -2
- package/lib/init/features/functions/npm-dependencies.js +1 -2
- package/lib/init/features/functions/python.js +1 -2
- package/lib/init/features/functions/typescript.js +1 -2
- package/lib/init/features/genkit/index.js +44 -18
- package/lib/init/features/hosting/github.js +6 -8
- package/lib/init/features/hosting/index.js +10 -13
- package/lib/init/features/project.js +4 -7
- package/lib/init/features/remoteconfig.js +1 -2
- package/lib/init/features/storage.js +3 -5
- package/lib/init/index.js +4 -7
- package/lib/init/spawn.js +7 -9
- package/lib/listFiles.js +1 -2
- package/lib/loadCJSON.js +1 -2
- package/lib/localFunction.js +14 -15
- package/lib/logError.js +1 -2
- package/lib/logger.js +7 -7
- package/lib/management/apps.js +22 -22
- package/lib/management/database.js +11 -12
- package/lib/management/projects.js +57 -56
- package/lib/management/provisioning/errorHandler.js +3 -5
- package/lib/management/provisioning/provision.js +15 -9
- package/lib/management/studio.js +2 -3
- package/lib/mcp/errors.js +4 -4
- package/lib/mcp/index.js +47 -45
- package/lib/mcp/prompt.js +1 -2
- package/lib/mcp/prompts/core/consult.js +2 -3
- package/lib/mcp/prompts/crashlytics/connect.js +15 -122
- package/lib/mcp/prompts/dataconnect/schema.js +3 -3
- package/lib/mcp/prompts/index.js +8 -10
- package/lib/mcp/resource.js +3 -15
- package/lib/mcp/resources/guides/app_id.js +39 -0
- package/lib/mcp/resources/guides/crashlytics_connect.js +51 -0
- package/lib/mcp/resources/guides/crashlytics_investigations.js +51 -0
- package/lib/mcp/resources/guides/crashlytics_issues.js +42 -0
- package/lib/mcp/resources/guides/crashlytics_reports.js +112 -0
- package/lib/mcp/resources/index.js +11 -3
- package/lib/mcp/tool.js +3 -15
- package/lib/mcp/tools/apphosting/fetch_logs.js +3 -4
- package/lib/mcp/tools/apphosting/list_backends.js +1 -1
- package/lib/mcp/tools/auth/get_users.js +5 -16
- package/lib/mcp/tools/core/create_android_sha.js +4 -1
- package/lib/mcp/tools/core/get_environment.js +7 -4
- package/lib/mcp/tools/core/get_sdk_config.js +4 -5
- package/lib/mcp/tools/core/get_security_rules.js +1 -2
- package/lib/mcp/tools/core/init.js +2 -2
- package/lib/mcp/tools/core/logout.js +1 -1
- package/lib/mcp/tools/core/read_resources.js +2 -2
- package/lib/mcp/tools/core/validate_security_rules.js +1 -2
- package/lib/mcp/tools/crashlytics/events.js +43 -19
- package/lib/mcp/tools/crashlytics/index.js +1 -6
- package/lib/mcp/tools/crashlytics/issues.js +33 -12
- package/lib/mcp/tools/crashlytics/reports.js +66 -117
- package/lib/mcp/tools/dataconnect/list_services.js +2 -3
- package/lib/mcp/tools/firestore/converter.js +3 -5
- package/lib/mcp/tools/firestore/delete_document.js +1 -1
- package/lib/mcp/tools/functions/get_logs.js +14 -12
- package/lib/mcp/tools/functions/list_functions.js +1 -1
- package/lib/mcp/tools/index.js +67 -50
- package/lib/mcp/util/apptesting/availability.js +1 -2
- package/lib/mcp/util/availability.js +1 -2
- package/lib/mcp/util/crashlytics/availability.js +1 -2
- package/lib/mcp/util/dataconnect/compile.js +7 -6
- package/lib/mcp/util/dataconnect/converter.js +7 -10
- package/lib/mcp/util/dataconnect/emulator.js +1 -2
- package/lib/mcp/util.js +9 -11
- package/lib/messaging/sendMessage.js +1 -2
- package/lib/metaprogramming.js +1 -2
- package/lib/operation-poller.js +2 -2
- package/lib/profileReport.js +6 -6
- package/lib/profiler.js +1 -2
- package/lib/projectPath.js +1 -2
- package/lib/projectUtils.js +5 -6
- package/lib/prompt.js +22 -13
- package/lib/rc.js +5 -7
- package/lib/remoteconfig/deleteExperiment.js +1 -2
- package/lib/remoteconfig/deleteRollout.js +1 -2
- package/lib/remoteconfig/get.js +2 -3
- package/lib/remoteconfig/getExperiment.js +2 -2
- package/lib/remoteconfig/getRollout.js +2 -2
- package/lib/remoteconfig/interfaces.js +1 -1
- package/lib/remoteconfig/listExperiments.js +2 -2
- package/lib/remoteconfig/listRollouts.js +2 -2
- package/lib/remoteconfig/publish.js +1 -2
- package/lib/remoteconfig/rollback.js +1 -2
- package/lib/remoteconfig/versionslist.js +1 -2
- package/lib/requireAuth.js +4 -6
- package/lib/requireConfig.js +5 -8
- package/lib/requireDatabaseInstance.js +2 -2
- package/lib/requireHostingSite.js +1 -2
- package/lib/requireInteractive.js +1 -1
- package/lib/requirePermissions.js +1 -2
- package/lib/requireTosAcceptance.js +1 -2
- package/lib/responseToError.js +1 -2
- package/lib/rtdb.js +2 -3
- package/lib/rulesDeploy.js +3 -4
- package/lib/serve/functions.js +9 -1
- package/lib/serve/hosting.js +4 -5
- package/lib/serve/index.js +1 -2
- package/lib/shortenUrl.js +1 -2
- package/lib/templates.js +3 -4
- package/lib/throttler/throttler.js +3 -3
- package/lib/timeout.js +2 -3
- package/lib/track.js +23 -14
- package/lib/tsconfig.publish.tsbuildinfo +1 -0
- package/lib/unzip.js +2 -3
- package/lib/utils.js +62 -63
- package/lib/vsCodeUtils.js +2 -3
- package/package.json +6 -6
- package/templates/extensions/typescript/index.ts +1 -1
- package/templates/extensions/typescript/package.lint.json +1 -1
- package/templates/extensions/typescript/package.nolint.json +1 -1
- package/templates/extensions/typescript/tsconfig.json +2 -1
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.newUniqueId = exports.
|
|
3
|
+
exports.newUniqueId = exports.FDC_DEFAULT_REGION = void 0;
|
|
4
|
+
exports.askQuestions = askQuestions;
|
|
5
|
+
exports.actuate = actuate;
|
|
6
|
+
exports.toDNSCompatibleId = toDNSCompatibleId;
|
|
4
7
|
const path_1 = require("path");
|
|
5
8
|
const clc = require("colorette");
|
|
6
9
|
const fs = require("fs-extra");
|
|
@@ -93,13 +96,11 @@ async function askQuestions(setup) {
|
|
|
93
96
|
setup.featureInfo.dataconnect = info;
|
|
94
97
|
await sdk.askQuestions(setup);
|
|
95
98
|
}
|
|
96
|
-
exports.askQuestions = askQuestions;
|
|
97
99
|
async function actuate(setup, config, options) {
|
|
98
|
-
var _a, _b, _c;
|
|
99
100
|
const dir = config.get("dataconnect.source", "dataconnect");
|
|
100
101
|
const dataDir = config.get("emulators.dataconnect.dataDir", `${dir}/.dataconnect/pgliteData`);
|
|
101
102
|
config.set("emulators.dataconnect.dataDir", dataDir);
|
|
102
|
-
const info =
|
|
103
|
+
const info = setup.featureInfo?.dataconnect;
|
|
103
104
|
if (!info) {
|
|
104
105
|
throw new Error("Data Connect feature RequiredInfo is not provided");
|
|
105
106
|
}
|
|
@@ -113,15 +114,20 @@ async function actuate(setup, config, options) {
|
|
|
113
114
|
await sdk.actuate(setup, config);
|
|
114
115
|
}
|
|
115
116
|
finally {
|
|
116
|
-
const sdkInfo =
|
|
117
|
-
const source =
|
|
118
|
-
void (0, track_1.trackGA4)("dataconnect_init",
|
|
117
|
+
const sdkInfo = setup.featureInfo?.dataconnectSdk;
|
|
118
|
+
const source = setup.featureInfo?.dataconnectSource || "init";
|
|
119
|
+
void (0, track_1.trackGA4)("dataconnect_init", {
|
|
120
|
+
source,
|
|
121
|
+
flow: info.flow.substring(1),
|
|
122
|
+
project_status: setup.projectId
|
|
119
123
|
? (await (0, cloudbilling_1.isBillingEnabled)(setup))
|
|
120
124
|
? info.shouldProvisionCSQL
|
|
121
125
|
? "blaze_provisioned_csql"
|
|
122
126
|
: "blaze"
|
|
123
127
|
: "spark"
|
|
124
|
-
: "missing"
|
|
128
|
+
: "missing",
|
|
129
|
+
...(sdkInfo ? sdk.initAppCounters(sdkInfo) : {}),
|
|
130
|
+
}, Date.now() - startTime);
|
|
125
131
|
}
|
|
126
132
|
if (info.appDescription) {
|
|
127
133
|
setup.instructions.push(`You can visualize the Data Connect Schema in Firebase Console:
|
|
@@ -130,9 +136,7 @@ async function actuate(setup, config, options) {
|
|
|
130
136
|
}
|
|
131
137
|
setup.instructions.push(`Install the Data Connect VS Code Extensions. You can explore Data Connect Query on local pgLite and Cloud SQL Postgres Instance.`);
|
|
132
138
|
}
|
|
133
|
-
exports.actuate = actuate;
|
|
134
139
|
async function actuateWithInfo(setup, config, info, options) {
|
|
135
|
-
var _a;
|
|
136
140
|
const projectId = setup.projectId;
|
|
137
141
|
if (!projectId) {
|
|
138
142
|
info.flow += "_save_template";
|
|
@@ -146,7 +150,7 @@ async function actuateWithInfo(setup, config, info, options) {
|
|
|
146
150
|
instanceId: info.cloudSqlInstanceId,
|
|
147
151
|
databaseId: info.cloudSqlDatabase,
|
|
148
152
|
requireGoogleMlIntegration: false,
|
|
149
|
-
source:
|
|
153
|
+
source: setup.featureInfo?.dataconnectSource || "init",
|
|
150
154
|
});
|
|
151
155
|
}
|
|
152
156
|
const serviceName = `projects/${projectId}/locations/${info.locationId}/services/${info.serviceId}`;
|
|
@@ -254,9 +258,11 @@ function schemasDeploySequence(projectId, info, schemaFiles, linkToCloudSql) {
|
|
|
254
258
|
];
|
|
255
259
|
}
|
|
256
260
|
async function writeFiles(config, info, serviceGql, options) {
|
|
257
|
-
var _a, _b;
|
|
258
261
|
const dir = config.get("dataconnect.source") || "dataconnect";
|
|
259
|
-
const subbedDataconnectYaml = subDataconnectYamlValues(
|
|
262
|
+
const subbedDataconnectYaml = subDataconnectYamlValues({
|
|
263
|
+
...info,
|
|
264
|
+
connectorDirs: serviceGql.connectors.map((c) => c.path),
|
|
265
|
+
}, serviceGql.secondarySchemaGqls?.map((sch) => ({ id: sch.id, uri: sch.uri })));
|
|
260
266
|
config.set("dataconnect", { source: dir });
|
|
261
267
|
await config.askWriteProjectFile((0, path_1.join)(dir, "dataconnect.yaml"), subbedDataconnectYaml, !!options.force, true);
|
|
262
268
|
if (serviceGql.seedDataGql) {
|
|
@@ -270,7 +276,7 @@ async function writeFiles(config, info, serviceGql, options) {
|
|
|
270
276
|
else {
|
|
271
277
|
fs.ensureFileSync((0, path_1.join)(dir, "schema", "schema.gql"));
|
|
272
278
|
}
|
|
273
|
-
if (
|
|
279
|
+
if (serviceGql.secondarySchemaGqls?.length) {
|
|
274
280
|
for (const sch of serviceGql.secondarySchemaGqls) {
|
|
275
281
|
for (const f of sch.files) {
|
|
276
282
|
await config.askWriteProjectFile((0, path_1.join)(dir, `schema_${sch.id}`, f.path), f.content, !!options.force);
|
|
@@ -353,7 +359,6 @@ async function promptForExistingServices(setup, info) {
|
|
|
353
359
|
await downloadService(info, choice.name);
|
|
354
360
|
}
|
|
355
361
|
async function downloadService(info, serviceName) {
|
|
356
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
357
362
|
let schemas = [];
|
|
358
363
|
try {
|
|
359
364
|
schemas = await (0, client_1.listSchemas)(serviceName, [
|
|
@@ -383,12 +388,12 @@ async function downloadService(info, serviceName) {
|
|
|
383
388
|
for (const sch of schemas) {
|
|
384
389
|
if ((0, types_1.isMainSchema)(sch)) {
|
|
385
390
|
const primaryDatasource = sch.datasources.find((d) => d.postgresql);
|
|
386
|
-
if (
|
|
391
|
+
if (primaryDatasource?.postgresql?.cloudSql?.instance) {
|
|
387
392
|
const instanceName = (0, names_1.parseCloudSQLInstanceName)(primaryDatasource.postgresql.cloudSql.instance);
|
|
388
393
|
info.cloudSqlInstanceId = instanceName.instanceId;
|
|
389
394
|
}
|
|
390
|
-
info.cloudSqlDatabase =
|
|
391
|
-
if (
|
|
395
|
+
info.cloudSqlDatabase = primaryDatasource?.postgresql?.database ?? "";
|
|
396
|
+
if (sch.source.files?.length) {
|
|
392
397
|
info.serviceGql.schemaGql = sch.source.files;
|
|
393
398
|
}
|
|
394
399
|
}
|
|
@@ -399,7 +404,7 @@ async function downloadService(info, serviceName) {
|
|
|
399
404
|
info.serviceGql.secondarySchemaGqls.push({
|
|
400
405
|
id: sch.name.split("/").pop(),
|
|
401
406
|
files: sch.source.files || [],
|
|
402
|
-
uri:
|
|
407
|
+
uri: sch.datasources[0].httpGraphql?.uri ?? "",
|
|
403
408
|
});
|
|
404
409
|
}
|
|
405
410
|
}
|
|
@@ -470,9 +475,8 @@ async function promptForCloudSQL(setup, info) {
|
|
|
470
475
|
if (info.cloudSqlInstanceId === "") {
|
|
471
476
|
const instances = await cloudsql.listInstances(setup.projectId);
|
|
472
477
|
let choices = instances.map((i) => {
|
|
473
|
-
var _a;
|
|
474
478
|
let display = `${i.name} (${i.region})`;
|
|
475
|
-
if (
|
|
479
|
+
if (i.settings.userLabels?.["firebase-data-connect"] === "ft") {
|
|
476
480
|
display += " (no cost trial)";
|
|
477
481
|
}
|
|
478
482
|
return { name: display, value: i.name, location: i.region };
|
|
@@ -600,4 +604,3 @@ function toDNSCompatibleId(id) {
|
|
|
600
604
|
}
|
|
601
605
|
return id || "app";
|
|
602
606
|
}
|
|
603
|
-
exports.toDNSCompatibleId = toDNSCompatibleId;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.askQuestions = askQuestions;
|
|
4
|
+
exports.actuate = actuate;
|
|
5
|
+
exports.addSchemaToDataConnectYaml = addSchemaToDataConnectYaml;
|
|
4
6
|
const clc = require("colorette");
|
|
5
7
|
const fs = require("fs-extra");
|
|
6
8
|
const path_1 = require("path");
|
|
@@ -13,7 +15,6 @@ const experiments = require("../../../experiments");
|
|
|
13
15
|
const cloudbilling_1 = require("../../../gcp/cloudbilling");
|
|
14
16
|
const track_1 = require("../../../track");
|
|
15
17
|
async function askQuestions(setup, config) {
|
|
16
|
-
var _a;
|
|
17
18
|
const resolverInfo = {
|
|
18
19
|
id: "",
|
|
19
20
|
uri: "",
|
|
@@ -41,7 +42,7 @@ async function askQuestions(setup, config) {
|
|
|
41
42
|
}
|
|
42
43
|
resolverInfo.id = await (0, prompt_1.input)({
|
|
43
44
|
message: `What ID would you like to use for your custom resolver?`,
|
|
44
|
-
default: (0, utils_1.newUniqueId)(`resolver`,
|
|
45
|
+
default: (0, utils_1.newUniqueId)(`resolver`, resolverInfo.serviceInfo.dataConnectYaml.schemas?.map((sch) => sch.id || "") || []),
|
|
45
46
|
});
|
|
46
47
|
resolverInfo.uri = `https://${resolverInfo.id}-${setup.projectNumber || "PROJECT_NUMBER"}.${resolverInfo.serviceInfo.dataConnectYaml.location}.run.app/graphql`;
|
|
47
48
|
(0, utils_1.logBullet)("Setting " +
|
|
@@ -52,13 +53,11 @@ async function askQuestions(setup, config) {
|
|
|
52
53
|
setup.featureInfo = setup.featureInfo || {};
|
|
53
54
|
setup.featureInfo.dataconnectResolver = resolverInfo;
|
|
54
55
|
}
|
|
55
|
-
exports.askQuestions = askQuestions;
|
|
56
56
|
async function actuate(setup, config) {
|
|
57
|
-
var _a;
|
|
58
57
|
if (!experiments.isEnabled("fdcwebhooks")) {
|
|
59
58
|
return;
|
|
60
59
|
}
|
|
61
|
-
const resolverInfo =
|
|
60
|
+
const resolverInfo = setup.featureInfo?.dataconnectResolver;
|
|
62
61
|
if (!resolverInfo) {
|
|
63
62
|
throw new Error("Data Connect resolver feature ResolverRequiredInfo not provided");
|
|
64
63
|
}
|
|
@@ -78,10 +77,8 @@ async function actuate(setup, config) {
|
|
|
78
77
|
}, Date.now() - startTime);
|
|
79
78
|
}
|
|
80
79
|
}
|
|
81
|
-
exports.actuate = actuate;
|
|
82
80
|
function actuateWithInfo(config, info) {
|
|
83
|
-
|
|
84
|
-
const dataConnectYaml = JSON.parse(JSON.stringify((_a = info.serviceInfo) === null || _a === void 0 ? void 0 : _a.dataConnectYaml));
|
|
81
|
+
const dataConnectYaml = JSON.parse(JSON.stringify(info.serviceInfo?.dataConnectYaml));
|
|
85
82
|
addSchemaToDataConnectYaml(dataConnectYaml, info);
|
|
86
83
|
info.serviceInfo.dataConnectYaml = dataConnectYaml;
|
|
87
84
|
const dataConnectYamlContents = yaml.stringify(dataConnectYaml);
|
|
@@ -108,4 +105,3 @@ function addSchemaToDataConnectYaml(dataConnectYaml, info) {
|
|
|
108
105
|
}
|
|
109
106
|
dataConnectYaml.schemas.push(secondarySchema);
|
|
110
107
|
}
|
|
111
|
-
exports.addSchemaToDataConnectYaml = addSchemaToDataConnectYaml;
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.FDC_SDK_PLATFORM_ENV = exports.FDC_SDK_FRAMEWORKS_ENV = exports.FDC_APP_FOLDER = void 0;
|
|
4
|
+
exports.askQuestions = askQuestions;
|
|
5
|
+
exports.chooseApp = chooseApp;
|
|
6
|
+
exports.actuate = actuate;
|
|
7
|
+
exports.initAppCounters = initAppCounters;
|
|
8
|
+
exports.addSdkGenerateToConnectorYaml = addSdkGenerateToConnectorYaml;
|
|
4
9
|
const yaml = require("yaml");
|
|
5
10
|
const clc = require("colorette");
|
|
6
11
|
const path = require("path");
|
|
@@ -63,7 +68,6 @@ async function askQuestions(setup) {
|
|
|
63
68
|
setup.featureInfo = setup.featureInfo || {};
|
|
64
69
|
setup.featureInfo.dataconnectSdk = info;
|
|
65
70
|
}
|
|
66
|
-
exports.askQuestions = askQuestions;
|
|
67
71
|
async function chooseApp() {
|
|
68
72
|
let apps = dedupeAppsByPlatformAndDirectory(await (0, appUtils_1.detectApps)(cwd));
|
|
69
73
|
if (apps.length) {
|
|
@@ -106,6 +110,12 @@ async function chooseApp() {
|
|
|
106
110
|
const pickedApps = await (0, prompt_1.checkbox)({
|
|
107
111
|
message: "Which apps do you want to set up Data Connect SDKs in?",
|
|
108
112
|
choices,
|
|
113
|
+
validate: (choices) => {
|
|
114
|
+
if (choices.length === 0) {
|
|
115
|
+
return "Please choose at least one app.";
|
|
116
|
+
}
|
|
117
|
+
return true;
|
|
118
|
+
},
|
|
109
119
|
});
|
|
110
120
|
if (!pickedApps || !pickedApps.length) {
|
|
111
121
|
throw new error_1.FirebaseError("Command Aborted. Please choose at least one app.");
|
|
@@ -114,10 +124,8 @@ async function chooseApp() {
|
|
|
114
124
|
}
|
|
115
125
|
return apps;
|
|
116
126
|
}
|
|
117
|
-
exports.chooseApp = chooseApp;
|
|
118
127
|
async function actuate(setup, config) {
|
|
119
|
-
|
|
120
|
-
const sdkInfo = (_a = setup.featureInfo) === null || _a === void 0 ? void 0 : _a.dataconnectSdk;
|
|
128
|
+
const sdkInfo = setup.featureInfo?.dataconnectSdk;
|
|
121
129
|
if (!sdkInfo) {
|
|
122
130
|
throw new Error("Data Connect SDK feature RequiredInfo is not provided");
|
|
123
131
|
}
|
|
@@ -126,20 +134,22 @@ async function actuate(setup, config) {
|
|
|
126
134
|
await actuateWithInfo(setup, config, sdkInfo);
|
|
127
135
|
}
|
|
128
136
|
finally {
|
|
129
|
-
const fdcInfo =
|
|
137
|
+
const fdcInfo = setup.featureInfo?.dataconnect;
|
|
130
138
|
if (!fdcInfo) {
|
|
131
|
-
const source =
|
|
132
|
-
void (0, track_1.trackGA4)("dataconnect_init",
|
|
139
|
+
const source = setup.featureInfo?.dataconnectSource || "init_sdk";
|
|
140
|
+
void (0, track_1.trackGA4)("dataconnect_init", {
|
|
141
|
+
source,
|
|
142
|
+
project_status: setup.projectId
|
|
133
143
|
? (await (0, cloudbilling_1.isBillingEnabled)(setup))
|
|
134
144
|
? "blaze"
|
|
135
145
|
: "spark"
|
|
136
|
-
: "missing"
|
|
146
|
+
: "missing",
|
|
147
|
+
...initAppCounters(sdkInfo),
|
|
148
|
+
}, Date.now() - startTime);
|
|
137
149
|
}
|
|
138
150
|
}
|
|
139
151
|
}
|
|
140
|
-
exports.actuate = actuate;
|
|
141
152
|
function initAppCounters(info) {
|
|
142
|
-
var _a;
|
|
143
153
|
const counts = {
|
|
144
154
|
num_web_apps: 0,
|
|
145
155
|
num_android_apps: 0,
|
|
@@ -147,7 +157,7 @@ function initAppCounters(info) {
|
|
|
147
157
|
num_flutter_apps: 0,
|
|
148
158
|
num_admin_node_apps: 0,
|
|
149
159
|
};
|
|
150
|
-
for (const app of
|
|
160
|
+
for (const app of info.apps ?? []) {
|
|
151
161
|
switch (app.platform) {
|
|
152
162
|
case appUtils_1.Platform.ADMIN_NODE:
|
|
153
163
|
counts.num_admin_node_apps++;
|
|
@@ -168,7 +178,6 @@ function initAppCounters(info) {
|
|
|
168
178
|
}
|
|
169
179
|
return counts;
|
|
170
180
|
}
|
|
171
|
-
exports.initAppCounters = initAppCounters;
|
|
172
181
|
async function actuateWithInfo(setup, config, info) {
|
|
173
182
|
if (!info.apps.length) {
|
|
174
183
|
info.apps = await (0, appUtils_1.detectApps)(cwd);
|
|
@@ -199,16 +208,16 @@ async function actuateWithInfo(setup, config, info) {
|
|
|
199
208
|
});
|
|
200
209
|
}
|
|
201
210
|
catch (e) {
|
|
202
|
-
(0, utils_1.logLabeledError)("dataconnect", `Failed to generate Data Connect SDKs\n${e
|
|
211
|
+
(0, utils_1.logLabeledError)("dataconnect", `Failed to generate Data Connect SDKs\n${e?.message}`);
|
|
203
212
|
}
|
|
204
213
|
(0, utils_1.logLabeledSuccess)("dataconnect", `Installed generated SDKs for ${clc.bold(apps.map((a) => (0, appUtils_1.appDescription)(a)).join(", "))}`);
|
|
205
214
|
if (apps.some((a) => a.platform === appUtils_1.Platform.IOS)) {
|
|
206
215
|
(0, utils_1.logBullet)(clc.bold("Please follow the instructions here to add your generated sdk to your XCode project:\n\thttps://firebase.google.com/docs/data-connect/ios-sdk#set-client"));
|
|
207
216
|
}
|
|
208
|
-
if (apps.some((a) =>
|
|
217
|
+
if (apps.some((a) => a.frameworks?.includes(appUtils_1.Framework.REACT))) {
|
|
209
218
|
(0, utils_1.logBullet)("Visit https://firebase.google.com/docs/data-connect/web-sdk#react for more information on how to set up React Generated SDKs for Firebase Data Connect");
|
|
210
219
|
}
|
|
211
|
-
if (apps.some((a) =>
|
|
220
|
+
if (apps.some((a) => a.frameworks?.includes(appUtils_1.Framework.ANGULAR))) {
|
|
212
221
|
(0, utils_1.logBullet)("Run `ng add @angular/fire` to install angular sdk dependencies.\nVisit https://github.com/invertase/tanstack-query-firebase/tree/main/packages/angular for more information on how to set up Angular Generated SDKs for Firebase Data Connect");
|
|
213
222
|
}
|
|
214
223
|
}
|
|
@@ -256,7 +265,7 @@ function addSdkGenerateToConnectorYaml(connectorInfo, connectorYaml, app) {
|
|
|
256
265
|
package: `@dataconnect/admin-generated`,
|
|
257
266
|
packageJsonDir: path.relative(connectorDir, appDir),
|
|
258
267
|
};
|
|
259
|
-
if (!(0, lodash_1.isArray)(generate
|
|
268
|
+
if (!(0, lodash_1.isArray)(generate?.adminNodeSdk)) {
|
|
260
269
|
generate.adminNodeSdk = generate.adminNodeSdk ? [generate.adminNodeSdk] : [];
|
|
261
270
|
}
|
|
262
271
|
if (!generate.adminNodeSdk.some((s) => s.outputDir === adminNodeSdk.outputDir)) {
|
|
@@ -275,7 +284,7 @@ function addSdkGenerateToConnectorYaml(connectorInfo, connectorYaml, app) {
|
|
|
275
284
|
for (const f of app.frameworks || []) {
|
|
276
285
|
javascriptSdk[f] = true;
|
|
277
286
|
}
|
|
278
|
-
if (!(0, lodash_1.isArray)(generate
|
|
287
|
+
if (!(0, lodash_1.isArray)(generate?.javascriptSdk)) {
|
|
279
288
|
generate.javascriptSdk = generate.javascriptSdk ? [generate.javascriptSdk] : [];
|
|
280
289
|
}
|
|
281
290
|
if (!generate.javascriptSdk.some((s) => s.outputDir === javascriptSdk.outputDir)) {
|
|
@@ -288,7 +297,7 @@ function addSdkGenerateToConnectorYaml(connectorInfo, connectorYaml, app) {
|
|
|
288
297
|
outputDir: path.relative(connectorDir, path.join(appDir, `lib/dataconnect_generated`)),
|
|
289
298
|
package: "dataconnect_generated/generated.dart",
|
|
290
299
|
};
|
|
291
|
-
if (!(0, lodash_1.isArray)(generate
|
|
300
|
+
if (!(0, lodash_1.isArray)(generate?.dartSdk)) {
|
|
292
301
|
generate.dartSdk = generate.dartSdk ? [generate.dartSdk] : [];
|
|
293
302
|
}
|
|
294
303
|
if (!generate.dartSdk.some((s) => s.outputDir === dartSdk.outputDir)) {
|
|
@@ -301,7 +310,7 @@ function addSdkGenerateToConnectorYaml(connectorInfo, connectorYaml, app) {
|
|
|
301
310
|
outputDir: path.relative(connectorDir, path.join(appDir, `src/main/kotlin`)),
|
|
302
311
|
package: `com.google.firebase.dataconnect.generated`,
|
|
303
312
|
};
|
|
304
|
-
if (!(0, lodash_1.isArray)(generate
|
|
313
|
+
if (!(0, lodash_1.isArray)(generate?.kotlinSdk)) {
|
|
305
314
|
generate.kotlinSdk = generate.kotlinSdk ? [generate.kotlinSdk] : [];
|
|
306
315
|
}
|
|
307
316
|
if (!generate.kotlinSdk.some((s) => s.outputDir === kotlinSdk.outputDir)) {
|
|
@@ -314,7 +323,7 @@ function addSdkGenerateToConnectorYaml(connectorInfo, connectorYaml, app) {
|
|
|
314
323
|
outputDir: path.relative(connectorDir, path.join(app.directory, `../FirebaseDataConnectGenerated`)),
|
|
315
324
|
package: "DataConnectGenerated",
|
|
316
325
|
};
|
|
317
|
-
if (!(0, lodash_1.isArray)(generate
|
|
326
|
+
if (!(0, lodash_1.isArray)(generate?.swiftSdk)) {
|
|
318
327
|
generate.swiftSdk = generate.swiftSdk ? [generate.swiftSdk] : [];
|
|
319
328
|
}
|
|
320
329
|
if (!generate.swiftSdk.some((s) => s.outputDir === swiftSdk.outputDir)) {
|
|
@@ -326,9 +335,7 @@ function addSdkGenerateToConnectorYaml(connectorInfo, connectorYaml, app) {
|
|
|
326
335
|
throw new error_1.FirebaseError(`Unsupported platform ${app.platform} for Data Connect SDK generation. Supported platforms are: ${Object.values(appUtils_1.Platform).join(", ")}\n${JSON.stringify(app)}`);
|
|
327
336
|
}
|
|
328
337
|
}
|
|
329
|
-
exports.addSdkGenerateToConnectorYaml = addSdkGenerateToConnectorYaml;
|
|
330
338
|
function dedupeAppsByPlatformAndDirectory(apps) {
|
|
331
|
-
var _a;
|
|
332
339
|
const uniqueApps = new Map();
|
|
333
340
|
for (const app of apps) {
|
|
334
341
|
const frameworkKey = app.frameworks ? [...app.frameworks].sort().join(",") : "";
|
|
@@ -338,7 +345,7 @@ function dedupeAppsByPlatformAndDirectory(apps) {
|
|
|
338
345
|
platform: app.platform,
|
|
339
346
|
directory: app.directory,
|
|
340
347
|
};
|
|
341
|
-
if (
|
|
348
|
+
if (app.frameworks?.length) {
|
|
342
349
|
minifiedApp.frameworks = [...app.frameworks];
|
|
343
350
|
}
|
|
344
351
|
uniqueApps.set(key, minifiedApp);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.doSetup =
|
|
3
|
+
exports.doSetup = doSetup;
|
|
4
4
|
const clc = require("colorette");
|
|
5
5
|
const utils = require("../../utils");
|
|
6
6
|
const prompt_1 = require("../../prompt");
|
|
@@ -9,12 +9,11 @@ const constants_1 = require("../../emulator/constants");
|
|
|
9
9
|
const downloadableEmulators_1 = require("../../emulator/downloadableEmulators");
|
|
10
10
|
const initEmulators_1 = require("../../emulator/initEmulators");
|
|
11
11
|
async function doSetup(setup, config) {
|
|
12
|
-
var _a, _b, _c;
|
|
13
12
|
const choices = types_1.ALL_SERVICE_EMULATORS.map((e) => {
|
|
14
13
|
return {
|
|
15
14
|
value: e,
|
|
16
15
|
name: constants_1.Constants.description(e),
|
|
17
|
-
checked:
|
|
16
|
+
checked: config?.has(e) || config?.has(`emulators.${e}`),
|
|
18
17
|
};
|
|
19
18
|
});
|
|
20
19
|
const selections = {};
|
|
@@ -47,7 +46,10 @@ async function doSetup(setup, config) {
|
|
|
47
46
|
if (additionalInitFn) {
|
|
48
47
|
const additionalOptions = await additionalInitFn(config);
|
|
49
48
|
if (additionalOptions) {
|
|
50
|
-
emulators[selected] =
|
|
49
|
+
emulators[selected] = {
|
|
50
|
+
...setup.config.emulators[selected],
|
|
51
|
+
...additionalOptions,
|
|
52
|
+
};
|
|
51
53
|
}
|
|
52
54
|
}
|
|
53
55
|
}
|
|
@@ -85,9 +87,8 @@ async function doSetup(setup, config) {
|
|
|
85
87
|
await (0, downloadableEmulators_1.downloadIfNecessary)(selected);
|
|
86
88
|
}
|
|
87
89
|
}
|
|
88
|
-
if (
|
|
90
|
+
if (setup?.config?.emulators?.ui?.enabled) {
|
|
89
91
|
(0, downloadableEmulators_1.downloadIfNecessary)(types_1.Emulators.UI);
|
|
90
92
|
}
|
|
91
93
|
}
|
|
92
94
|
}
|
|
93
|
-
exports.doSetup = doSetup;
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.doSetup =
|
|
3
|
+
exports.doSetup = doSetup;
|
|
4
4
|
const requirePermissions_1 = require("../../../requirePermissions");
|
|
5
5
|
const ensureApiEnabled_1 = require("../../../ensureApiEnabled");
|
|
6
6
|
const manifest = require("../../../extensions/manifest");
|
|
7
7
|
const api_1 = require("../../../api");
|
|
8
8
|
async function doSetup(setup, config, options) {
|
|
9
|
-
|
|
10
|
-
const projectId = (_b = (_a = setup === null || setup === void 0 ? void 0 : setup.rcfile) === null || _a === void 0 ? void 0 : _a.projects) === null || _b === void 0 ? void 0 : _b.default;
|
|
9
|
+
const projectId = setup?.rcfile?.projects?.default;
|
|
11
10
|
if (projectId) {
|
|
12
|
-
await (0, requirePermissions_1.requirePermissions)(
|
|
11
|
+
await (0, requirePermissions_1.requirePermissions)({ ...options, project: projectId });
|
|
13
12
|
await Promise.all([(0, ensureApiEnabled_1.ensure)(projectId, (0, api_1.extensionsOrigin)(), "unused", true)]);
|
|
14
13
|
}
|
|
15
14
|
return manifest.writeEmptyManifest(config, options);
|
|
16
15
|
}
|
|
17
|
-
exports.doSetup = doSetup;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.askQuestions = askQuestions;
|
|
4
|
+
exports.actuate = actuate;
|
|
4
5
|
const rules = require("./rules");
|
|
5
6
|
const indexes = require("./indexes");
|
|
6
7
|
const error_1 = require("../../../error");
|
|
@@ -11,12 +12,12 @@ const api_2 = require("../../../api");
|
|
|
11
12
|
async function askQuestions(setup, config) {
|
|
12
13
|
const firestore = !Array.isArray(setup.config.firestore) ? setup.config.firestore : undefined;
|
|
13
14
|
const info = {
|
|
14
|
-
databaseId:
|
|
15
|
-
locationId:
|
|
16
|
-
rulesFilename:
|
|
15
|
+
databaseId: firestore?.database || "",
|
|
16
|
+
locationId: firestore?.location || "",
|
|
17
|
+
rulesFilename: firestore?.rules || "",
|
|
17
18
|
rules: "",
|
|
18
19
|
writeRules: true,
|
|
19
|
-
indexesFilename:
|
|
20
|
+
indexesFilename: firestore?.indexes || "",
|
|
20
21
|
indexes: "",
|
|
21
22
|
writeIndexes: true,
|
|
22
23
|
};
|
|
@@ -63,10 +64,8 @@ async function askQuestions(setup, config) {
|
|
|
63
64
|
setup.featureInfo = setup.featureInfo || {};
|
|
64
65
|
setup.featureInfo.firestore = info;
|
|
65
66
|
}
|
|
66
|
-
exports.askQuestions = askQuestions;
|
|
67
67
|
async function actuate(setup, config) {
|
|
68
|
-
|
|
69
|
-
const info = (_a = setup.featureInfo) === null || _a === void 0 ? void 0 : _a.firestore;
|
|
68
|
+
const info = setup.featureInfo?.firestore;
|
|
70
69
|
if (!info) {
|
|
71
70
|
throw new error_1.FirebaseError("Firestore featureInfo is not found");
|
|
72
71
|
}
|
|
@@ -89,4 +88,3 @@ async function actuate(setup, config) {
|
|
|
89
88
|
config.writeProjectFile(info.indexesFilename, info.indexes);
|
|
90
89
|
}
|
|
91
90
|
}
|
|
92
|
-
exports.actuate = actuate;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.INDEXES_TEMPLATE = exports.DEFAULT_INDEXES_FILE = void 0;
|
|
4
|
+
exports.initIndexes = initIndexes;
|
|
4
5
|
const clc = require("colorette");
|
|
5
6
|
const error_1 = require("../../../error");
|
|
6
7
|
const api = require("../../../firestore/api");
|
|
@@ -34,7 +35,6 @@ async function initIndexes(setup, config, info) {
|
|
|
34
35
|
}
|
|
35
36
|
info.writeRules = await config.confirmWriteProjectFile(info.indexesFilename, info.indexes);
|
|
36
37
|
}
|
|
37
|
-
exports.initIndexes = initIndexes;
|
|
38
38
|
async function getIndexesFromConsole(projectId, databaseId) {
|
|
39
39
|
const indexesPromise = indexes.listIndexes(projectId, databaseId);
|
|
40
40
|
const fieldOverridesPromise = indexes.listFieldOverrides(projectId, databaseId);
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.DEFAULT_RULES_FILE = void 0;
|
|
4
|
+
exports.getDefaultRules = getDefaultRules;
|
|
5
|
+
exports.initRules = initRules;
|
|
4
6
|
const clc = require("colorette");
|
|
5
7
|
const gcp = require("../../../gcp");
|
|
6
8
|
const prompt_1 = require("../../../prompt");
|
|
@@ -14,7 +16,6 @@ function getDefaultRules() {
|
|
|
14
16
|
const formattedForRules = `${date.getFullYear()}, ${date.getMonth() + 1}, ${date.getDate()}`;
|
|
15
17
|
return RULES_TEMPLATE.replace(/{{IN_30_DAYS}}/g, formattedForRules);
|
|
16
18
|
}
|
|
17
|
-
exports.getDefaultRules = getDefaultRules;
|
|
18
19
|
async function initRules(setup, config, info) {
|
|
19
20
|
logger_1.logger.info();
|
|
20
21
|
logger_1.logger.info("Firestore Security Rules allow you to define how and when to allow");
|
|
@@ -37,7 +38,6 @@ async function initRules(setup, config, info) {
|
|
|
37
38
|
}
|
|
38
39
|
info.writeRules = await config.confirmWriteProjectFile(info.rulesFilename, info.rules);
|
|
39
40
|
}
|
|
40
|
-
exports.initRules = initRules;
|
|
41
41
|
async function getRulesFromConsole(projectId) {
|
|
42
42
|
const name = await gcp.rules.getLatestRulesetName(projectId, "cloud.firestore");
|
|
43
43
|
if (!name) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.doSetup =
|
|
3
|
+
exports.doSetup = doSetup;
|
|
4
4
|
const clc = require("colorette");
|
|
5
5
|
const logger_1 = require("../../../logger");
|
|
6
6
|
const prompt_1 = require("../../../prompt");
|
|
@@ -12,10 +12,9 @@ const api_1 = require("../../../api");
|
|
|
12
12
|
const supported = require("../../../deploy/functions/runtimes/supported");
|
|
13
13
|
const MAX_ATTEMPTS = 5;
|
|
14
14
|
async function doSetup(setup, config, options) {
|
|
15
|
-
|
|
16
|
-
const projectId = (_b = (_a = setup === null || setup === void 0 ? void 0 : setup.rcfile) === null || _a === void 0 ? void 0 : _a.projects) === null || _b === void 0 ? void 0 : _b.default;
|
|
15
|
+
const projectId = setup?.rcfile?.projects?.default;
|
|
17
16
|
if (projectId) {
|
|
18
|
-
await (0, requirePermissions_1.requirePermissions)(
|
|
17
|
+
await (0, requirePermissions_1.requirePermissions)({ ...options, project: projectId });
|
|
19
18
|
await Promise.all([
|
|
20
19
|
(0, ensureApiEnabled_1.ensure)(projectId, (0, api_1.functionsOrigin)(), "unused", true),
|
|
21
20
|
(0, ensureApiEnabled_1.ensure)(projectId, (0, api_1.runtimeconfigOrigin)(), "unused", true),
|
|
@@ -46,7 +45,6 @@ async function doSetup(setup, config, options) {
|
|
|
46
45
|
});
|
|
47
46
|
return initOpt === "new" ? initNewCodebase(setup, config) : overwriteCodebase(setup, config);
|
|
48
47
|
}
|
|
49
|
-
exports.doSetup = doSetup;
|
|
50
48
|
async function initNewCodebase(setup, config) {
|
|
51
49
|
logger_1.logger.info("Let's create a new codebase for your functions.");
|
|
52
50
|
logger_1.logger.info("A directory corresponding to the codebase will be created in your project");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setup =
|
|
3
|
+
exports.setup = setup;
|
|
4
4
|
const npm_dependencies_1 = require("./npm-dependencies");
|
|
5
5
|
const prompt_1 = require("../../../prompt");
|
|
6
6
|
const projectConfig_1 = require("../../../functions/projectConfig");
|
|
@@ -28,4 +28,3 @@ async function setup(setup, config) {
|
|
|
28
28
|
await config.askWriteProjectFile(`${setup.functions.source}/.gitignore`, GITIGNORE_TEMPLATE);
|
|
29
29
|
await (0, npm_dependencies_1.askInstallDependencies)(setup.functions, config);
|
|
30
30
|
}
|
|
31
|
-
exports.setup = setup;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.askInstallDependencies =
|
|
3
|
+
exports.askInstallDependencies = askInstallDependencies;
|
|
4
4
|
const logger_1 = require("../../../logger");
|
|
5
5
|
const prompt_1 = require("../../../prompt");
|
|
6
6
|
const spawn_1 = require("../../spawn");
|
|
@@ -19,4 +19,3 @@ async function askInstallDependencies(setup, config) {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
exports.askInstallDependencies = askInstallDependencies;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setup =
|
|
3
|
+
exports.setup = setup;
|
|
4
4
|
const spawn = require("cross-spawn");
|
|
5
5
|
const python_1 = require("../../../deploy/functions/runtimes/python");
|
|
6
6
|
const python_2 = require("../../../functions/python");
|
|
@@ -42,4 +42,3 @@ async function setup(setup, config) {
|
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
exports.setup = setup;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setup =
|
|
3
|
+
exports.setup = setup;
|
|
4
4
|
const npm_dependencies_1 = require("./npm-dependencies");
|
|
5
5
|
const prompt_1 = require("../../../prompt");
|
|
6
6
|
const projectConfig_1 = require("../../../functions/projectConfig");
|
|
@@ -38,4 +38,3 @@ async function setup(setup, config) {
|
|
|
38
38
|
await config.askWriteProjectFile(`${setup.functions.source}/.gitignore`, GITIGNORE_TEMPLATE);
|
|
39
39
|
await (0, npm_dependencies_1.askInstallDependencies)(setup.functions, config);
|
|
40
40
|
}
|
|
41
|
-
exports.setup = setup;
|