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/gcp/firestore.js
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.DayOfWeek = void 0;
|
|
4
|
+
exports.getDatabase = getDatabase;
|
|
5
|
+
exports.listCollectionIds = listCollectionIds;
|
|
6
|
+
exports.getDocuments = getDocuments;
|
|
7
|
+
exports.queryCollection = queryCollection;
|
|
8
|
+
exports.deleteDocument = deleteDocument;
|
|
9
|
+
exports.deleteDocuments = deleteDocuments;
|
|
10
|
+
exports.createBackupSchedule = createBackupSchedule;
|
|
11
|
+
exports.updateBackupSchedule = updateBackupSchedule;
|
|
12
|
+
exports.deleteBackup = deleteBackup;
|
|
13
|
+
exports.deleteBackupSchedule = deleteBackupSchedule;
|
|
14
|
+
exports.listBackups = listBackups;
|
|
15
|
+
exports.getBackup = getBackup;
|
|
16
|
+
exports.listBackupSchedules = listBackupSchedules;
|
|
17
|
+
exports.getBackupSchedule = getBackupSchedule;
|
|
4
18
|
const api_1 = require("../api");
|
|
5
19
|
const apiv2_1 = require("../apiv2");
|
|
6
20
|
const logger_1 = require("../logger");
|
|
@@ -30,7 +44,7 @@ var DayOfWeek;
|
|
|
30
44
|
DayOfWeek["FRIDAY"] = "FRIDAY";
|
|
31
45
|
DayOfWeek["SATURDAY"] = "SATURDAY";
|
|
32
46
|
DayOfWeek["SUNDAY"] = "SUNDAY";
|
|
33
|
-
})(DayOfWeek
|
|
47
|
+
})(DayOfWeek || (exports.DayOfWeek = DayOfWeek = {}));
|
|
34
48
|
async function getDatabase(project, database, emulatorUrl) {
|
|
35
49
|
const apiClient = getClient(emulatorUrl);
|
|
36
50
|
const url = `projects/${project}/databases/${database}`;
|
|
@@ -43,7 +57,6 @@ async function getDatabase(project, database, emulatorUrl) {
|
|
|
43
57
|
throw err;
|
|
44
58
|
}
|
|
45
59
|
}
|
|
46
|
-
exports.getDatabase = getDatabase;
|
|
47
60
|
function listCollectionIds(project, databaseId = "(default)", emulatorUrl) {
|
|
48
61
|
const apiClient = getClient(emulatorUrl);
|
|
49
62
|
const url = `projects/${project}/databases/${databaseId}/documents:listCollectionIds`;
|
|
@@ -54,7 +67,6 @@ function listCollectionIds(project, databaseId = "(default)", emulatorUrl) {
|
|
|
54
67
|
return res.body.collectionIds || [];
|
|
55
68
|
});
|
|
56
69
|
}
|
|
57
|
-
exports.listCollectionIds = listCollectionIds;
|
|
58
70
|
async function getDocuments(project, paths, databaseId = "(default)", emulatorUrl) {
|
|
59
71
|
const apiClient = getClient(emulatorUrl);
|
|
60
72
|
const basePath = `projects/${project}/databases/${databaseId}/documents`;
|
|
@@ -65,7 +77,6 @@ async function getDocuments(project, paths, databaseId = "(default)", emulatorUr
|
|
|
65
77
|
res.body.map((r) => (r.missing ? out.missing.push(r.missing) : out.documents.push(r.found)));
|
|
66
78
|
return out;
|
|
67
79
|
}
|
|
68
|
-
exports.getDocuments = getDocuments;
|
|
69
80
|
async function queryCollection(project, structuredQuery, databaseId = "(default)", emulatorUrl) {
|
|
70
81
|
const apiClient = getClient(emulatorUrl);
|
|
71
82
|
const basePath = `projects/${project}/databases/${databaseId}/documents`;
|
|
@@ -88,12 +99,10 @@ async function queryCollection(project, structuredQuery, databaseId = "(default)
|
|
|
88
99
|
throw JSON.stringify(err);
|
|
89
100
|
}
|
|
90
101
|
}
|
|
91
|
-
exports.queryCollection = queryCollection;
|
|
92
102
|
async function deleteDocument(doc, emulatorUrl) {
|
|
93
103
|
const apiClient = getClient(emulatorUrl);
|
|
94
104
|
return apiClient.delete(doc.name);
|
|
95
105
|
}
|
|
96
|
-
exports.deleteDocument = deleteDocument;
|
|
97
106
|
async function deleteDocuments(project, docs, databaseId = "(default)", emulatorUrl) {
|
|
98
107
|
const apiClient = getClient(emulatorUrl);
|
|
99
108
|
const url = `projects/${project}/databases/${databaseId}/documents:commit`;
|
|
@@ -108,7 +117,6 @@ async function deleteDocuments(project, docs, databaseId = "(default)", emulator
|
|
|
108
117
|
});
|
|
109
118
|
return res.body.writeResults.length;
|
|
110
119
|
}
|
|
111
|
-
exports.deleteDocuments = deleteDocuments;
|
|
112
120
|
async function createBackupSchedule(project, databaseId, retention, dailyRecurrence, weeklyRecurrence) {
|
|
113
121
|
const url = `projects/${project}/databases/${databaseId}/backupSchedules`;
|
|
114
122
|
const data = {
|
|
@@ -120,7 +128,6 @@ async function createBackupSchedule(project, databaseId, retention, dailyRecurre
|
|
|
120
128
|
const res = await prodOnlyClient.post(url, data);
|
|
121
129
|
return res.body;
|
|
122
130
|
}
|
|
123
|
-
exports.createBackupSchedule = createBackupSchedule;
|
|
124
131
|
async function updateBackupSchedule(backupScheduleName, retention) {
|
|
125
132
|
const data = {
|
|
126
133
|
retention: (0, proto_1.durationFromSeconds)(retention),
|
|
@@ -128,21 +135,17 @@ async function updateBackupSchedule(backupScheduleName, retention) {
|
|
|
128
135
|
const res = await prodOnlyClient.patch(backupScheduleName, data);
|
|
129
136
|
return res.body;
|
|
130
137
|
}
|
|
131
|
-
exports.updateBackupSchedule = updateBackupSchedule;
|
|
132
138
|
async function deleteBackup(backupName) {
|
|
133
139
|
await prodOnlyClient.delete(backupName);
|
|
134
140
|
}
|
|
135
|
-
exports.deleteBackup = deleteBackup;
|
|
136
141
|
async function deleteBackupSchedule(backupScheduleName) {
|
|
137
142
|
await prodOnlyClient.delete(backupScheduleName);
|
|
138
143
|
}
|
|
139
|
-
exports.deleteBackupSchedule = deleteBackupSchedule;
|
|
140
144
|
async function listBackups(project, location) {
|
|
141
145
|
const url = `/projects/${project}/locations/${location}/backups`;
|
|
142
146
|
const res = await prodOnlyClient.get(url);
|
|
143
147
|
return res.body;
|
|
144
148
|
}
|
|
145
|
-
exports.listBackups = listBackups;
|
|
146
149
|
async function getBackup(backupName) {
|
|
147
150
|
const res = await prodOnlyClient.get(backupName);
|
|
148
151
|
const backup = res.body;
|
|
@@ -151,7 +154,6 @@ async function getBackup(backupName) {
|
|
|
151
154
|
}
|
|
152
155
|
return backup;
|
|
153
156
|
}
|
|
154
|
-
exports.getBackup = getBackup;
|
|
155
157
|
async function listBackupSchedules(project, database) {
|
|
156
158
|
const url = `/projects/${project}/databases/${database}/backupSchedules`;
|
|
157
159
|
const res = await prodOnlyClient.get(url);
|
|
@@ -161,7 +163,6 @@ async function listBackupSchedules(project, database) {
|
|
|
161
163
|
}
|
|
162
164
|
return backupSchedules;
|
|
163
165
|
}
|
|
164
|
-
exports.listBackupSchedules = listBackupSchedules;
|
|
165
166
|
async function getBackupSchedule(backupScheduleName) {
|
|
166
167
|
const res = await prodOnlyClient.get(backupScheduleName);
|
|
167
168
|
const backupSchedule = res.body;
|
|
@@ -170,4 +171,3 @@ async function getBackupSchedule(backupScheduleName) {
|
|
|
170
171
|
}
|
|
171
172
|
return backupSchedule;
|
|
172
173
|
}
|
|
173
|
-
exports.getBackupSchedule = getBackupSchedule;
|
package/lib/gcp/iam.js
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getDefaultCloudBuildServiceAgent = getDefaultCloudBuildServiceAgent;
|
|
4
|
+
exports.createServiceAccount = createServiceAccount;
|
|
5
|
+
exports.getServiceAccount = getServiceAccount;
|
|
6
|
+
exports.createServiceAccountKey = createServiceAccountKey;
|
|
7
|
+
exports.deleteServiceAccount = deleteServiceAccount;
|
|
8
|
+
exports.listServiceAccountKeys = listServiceAccountKeys;
|
|
9
|
+
exports.getRole = getRole;
|
|
10
|
+
exports.testResourceIamPermissions = testResourceIamPermissions;
|
|
11
|
+
exports.testIamPermissions = testIamPermissions;
|
|
12
|
+
exports.mergeBindings = mergeBindings;
|
|
13
|
+
exports.printManualIamConfig = printManualIamConfig;
|
|
4
14
|
const api_1 = require("../api");
|
|
5
15
|
const logger_1 = require("../logger");
|
|
6
16
|
const apiv2_1 = require("../apiv2");
|
|
@@ -9,7 +19,6 @@ const apiClient = new apiv2_1.Client({ urlPrefix: (0, api_1.iamOrigin)(), apiVer
|
|
|
9
19
|
function getDefaultCloudBuildServiceAgent(projectNumber) {
|
|
10
20
|
return `${projectNumber}@cloudbuild.gserviceaccount.com`;
|
|
11
21
|
}
|
|
12
|
-
exports.getDefaultCloudBuildServiceAgent = getDefaultCloudBuildServiceAgent;
|
|
13
22
|
async function createServiceAccount(projectId, accountId, description, displayName) {
|
|
14
23
|
const response = await apiClient.post(`/projects/${projectId}/serviceAccounts`, {
|
|
15
24
|
accountId,
|
|
@@ -20,12 +29,10 @@ async function createServiceAccount(projectId, accountId, description, displayNa
|
|
|
20
29
|
}, { skipLog: { resBody: true } });
|
|
21
30
|
return response.body;
|
|
22
31
|
}
|
|
23
|
-
exports.createServiceAccount = createServiceAccount;
|
|
24
32
|
async function getServiceAccount(projectId, serviceAccountName) {
|
|
25
33
|
const response = await apiClient.get(`/projects/${projectId}/serviceAccounts/${serviceAccountName}@${projectId}.iam.gserviceaccount.com`);
|
|
26
34
|
return response.body;
|
|
27
35
|
}
|
|
28
|
-
exports.getServiceAccount = getServiceAccount;
|
|
29
36
|
async function createServiceAccountKey(projectId, serviceAccountName) {
|
|
30
37
|
const response = await apiClient.post(`/projects/${projectId}/serviceAccounts/${serviceAccountName}@${projectId}.iam.gserviceaccount.com/keys`, {
|
|
31
38
|
keyAlgorithm: "KEY_ALG_UNSPECIFIED",
|
|
@@ -33,25 +40,21 @@ async function createServiceAccountKey(projectId, serviceAccountName) {
|
|
|
33
40
|
});
|
|
34
41
|
return response.body;
|
|
35
42
|
}
|
|
36
|
-
exports.createServiceAccountKey = createServiceAccountKey;
|
|
37
43
|
async function deleteServiceAccount(projectId, accountEmail) {
|
|
38
44
|
await apiClient.delete(`/projects/${projectId}/serviceAccounts/${accountEmail}`, {
|
|
39
45
|
resolveOnHTTPError: true,
|
|
40
46
|
});
|
|
41
47
|
}
|
|
42
|
-
exports.deleteServiceAccount = deleteServiceAccount;
|
|
43
48
|
async function listServiceAccountKeys(projectId, serviceAccountName) {
|
|
44
49
|
const response = await apiClient.get(`/projects/${projectId}/serviceAccounts/${serviceAccountName}@${projectId}.iam.gserviceaccount.com/keys`);
|
|
45
50
|
return response.body.keys;
|
|
46
51
|
}
|
|
47
|
-
exports.listServiceAccountKeys = listServiceAccountKeys;
|
|
48
52
|
async function getRole(role) {
|
|
49
53
|
const response = await apiClient.get(`/roles/${role}`, {
|
|
50
54
|
retryCodes: [500, 503],
|
|
51
55
|
});
|
|
52
56
|
return response.body;
|
|
53
57
|
}
|
|
54
|
-
exports.getRole = getRole;
|
|
55
58
|
async function testResourceIamPermissions(origin, apiVersion, resourceName, permissions, quotaUser = "") {
|
|
56
59
|
const localClient = new apiv2_1.Client({ urlPrefix: origin, apiVersion });
|
|
57
60
|
if (process.env.FIREBASE_SKIP_INFORMATIONAL_IAM) {
|
|
@@ -74,11 +77,9 @@ async function testResourceIamPermissions(origin, apiVersion, resourceName, perm
|
|
|
74
77
|
passed: missing.size === 0,
|
|
75
78
|
};
|
|
76
79
|
}
|
|
77
|
-
exports.testResourceIamPermissions = testResourceIamPermissions;
|
|
78
80
|
async function testIamPermissions(projectId, permissions) {
|
|
79
81
|
return testResourceIamPermissions((0, api_1.resourceManagerOrigin)(), "v1", `projects/${projectId}`, permissions, `projects/${projectId}`);
|
|
80
82
|
}
|
|
81
|
-
exports.testIamPermissions = testIamPermissions;
|
|
82
83
|
function mergeBindings(policy, requiredBindings) {
|
|
83
84
|
let updated = false;
|
|
84
85
|
for (const requiredBinding of requiredBindings) {
|
|
@@ -97,7 +98,6 @@ function mergeBindings(policy, requiredBindings) {
|
|
|
97
98
|
}
|
|
98
99
|
return updated;
|
|
99
100
|
}
|
|
100
|
-
exports.mergeBindings = mergeBindings;
|
|
101
101
|
function printManualIamConfig(requiredBindings, projectId, prefix) {
|
|
102
102
|
utils.logLabeledBullet(prefix, "Failed to verify the project has the correct IAM bindings for a successful deployment.", "warn");
|
|
103
103
|
utils.logLabeledBullet(prefix, "You can either re-run this command as a project owner or manually run the following set of `gcloud` commands:", "warn");
|
|
@@ -109,4 +109,3 @@ function printManualIamConfig(requiredBindings, projectId, prefix) {
|
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
|
-
exports.printManualIamConfig = printManualIamConfig;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getBlockingFunctionsConfig = getBlockingFunctionsConfig;
|
|
4
|
+
exports.getConfig = getConfig;
|
|
5
|
+
exports.setBlockingFunctionsConfig = setBlockingFunctionsConfig;
|
|
6
|
+
exports.updateConfig = updateConfig;
|
|
4
7
|
const proto = require("./proto");
|
|
5
8
|
const api_1 = require("../api");
|
|
6
9
|
const apiv2_1 = require("../apiv2");
|
|
@@ -16,12 +19,10 @@ async function getBlockingFunctionsConfig(project) {
|
|
|
16
19
|
}
|
|
17
20
|
return config.blockingFunctions;
|
|
18
21
|
}
|
|
19
|
-
exports.getBlockingFunctionsConfig = getBlockingFunctionsConfig;
|
|
20
22
|
async function getConfig(project) {
|
|
21
23
|
const response = await adminApiClient.get(`projects/${project}/config`);
|
|
22
24
|
return response.body;
|
|
23
25
|
}
|
|
24
|
-
exports.getConfig = getConfig;
|
|
25
26
|
async function setBlockingFunctionsConfig(project, blockingConfig) {
|
|
26
27
|
const config = (await updateConfig(project, { blockingFunctions: blockingConfig }, "blockingFunctions")) || {};
|
|
27
28
|
if (!config.blockingFunctions) {
|
|
@@ -29,7 +30,6 @@ async function setBlockingFunctionsConfig(project, blockingConfig) {
|
|
|
29
30
|
}
|
|
30
31
|
return config.blockingFunctions;
|
|
31
32
|
}
|
|
32
|
-
exports.setBlockingFunctionsConfig = setBlockingFunctionsConfig;
|
|
33
33
|
async function updateConfig(project, config, updateMask) {
|
|
34
34
|
if (!updateMask) {
|
|
35
35
|
updateMask = proto.fieldMasks(config).join(",");
|
|
@@ -41,4 +41,3 @@ async function updateConfig(project, config, updateMask) {
|
|
|
41
41
|
});
|
|
42
42
|
return response.body;
|
|
43
43
|
}
|
|
44
|
-
exports.updateConfig = updateConfig;
|
package/lib/gcp/k8s.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.mebibytes =
|
|
3
|
+
exports.mebibytes = mebibytes;
|
|
4
4
|
const BYTES_PER_UNIT = {
|
|
5
5
|
"": 1,
|
|
6
6
|
k: 1e3,
|
|
@@ -29,4 +29,3 @@ function mebibytes(memory) {
|
|
|
29
29
|
}
|
|
30
30
|
return bytes / (1 << 20);
|
|
31
31
|
}
|
|
32
|
-
exports.mebibytes = mebibytes;
|
package/lib/gcp/location.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.DUAL_REGION_MAPPING = exports.MULTI_REGION_MAPPING = void 0;
|
|
4
|
+
exports.regionInLocation = regionInLocation;
|
|
4
5
|
exports.MULTI_REGION_MAPPING = {
|
|
5
6
|
"us-central1": "us",
|
|
6
7
|
"us-east1": "us",
|
|
@@ -41,4 +42,3 @@ function regionInLocation(region, location) {
|
|
|
41
42
|
}
|
|
42
43
|
return false;
|
|
43
44
|
}
|
|
44
|
-
exports.regionInLocation = regionInLocation;
|
package/lib/gcp/proto.js
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.secondsFromDuration = secondsFromDuration;
|
|
4
|
+
exports.durationFromSeconds = durationFromSeconds;
|
|
5
|
+
exports.assertOneOf = assertOneOf;
|
|
6
|
+
exports.copyIfPresent = copyIfPresent;
|
|
7
|
+
exports.convertIfPresent = convertIfPresent;
|
|
8
|
+
exports.renameIfPresent = renameIfPresent;
|
|
9
|
+
exports.fieldMasks = fieldMasks;
|
|
10
|
+
exports.getInvokerMembers = getInvokerMembers;
|
|
11
|
+
exports.formatServiceAccount = formatServiceAccount;
|
|
12
|
+
exports.pruneUndefiends = pruneUndefiends;
|
|
4
13
|
const error_1 = require("../error");
|
|
5
14
|
function secondsFromDuration(d) {
|
|
6
15
|
return +d.slice(0, d.length - 1);
|
|
7
16
|
}
|
|
8
|
-
exports.secondsFromDuration = secondsFromDuration;
|
|
9
17
|
function durationFromSeconds(s) {
|
|
10
18
|
return `${s}s`;
|
|
11
19
|
}
|
|
12
|
-
exports.durationFromSeconds = durationFromSeconds;
|
|
13
20
|
function assertOneOf(typename, obj, oneof, ...fields) {
|
|
14
21
|
const defined = [];
|
|
15
22
|
for (const key of fields) {
|
|
@@ -22,7 +29,6 @@ function assertOneOf(typename, obj, oneof, ...fields) {
|
|
|
22
29
|
throw new error_1.FirebaseError(`Invalid ${typename} definition. ${oneof} can only have one field defined, but found ${defined.join(",")}`);
|
|
23
30
|
}
|
|
24
31
|
}
|
|
25
|
-
exports.assertOneOf = assertOneOf;
|
|
26
32
|
function copyIfPresent(dest, src, ...fields) {
|
|
27
33
|
for (const field of fields) {
|
|
28
34
|
if (!Object.prototype.hasOwnProperty.call(src, field)) {
|
|
@@ -31,7 +37,6 @@ function copyIfPresent(dest, src, ...fields) {
|
|
|
31
37
|
dest[field] = src[field];
|
|
32
38
|
}
|
|
33
39
|
}
|
|
34
|
-
exports.copyIfPresent = copyIfPresent;
|
|
35
40
|
function convertIfPresent(...args) {
|
|
36
41
|
if (args.length === 4) {
|
|
37
42
|
const [dest, src, key, converter] = args;
|
|
@@ -45,20 +50,17 @@ function convertIfPresent(...args) {
|
|
|
45
50
|
dest[destKey] = converter(src[srcKey]);
|
|
46
51
|
}
|
|
47
52
|
}
|
|
48
|
-
exports.convertIfPresent = convertIfPresent;
|
|
49
53
|
function renameIfPresent(dest, src, destKey, srcKey) {
|
|
50
54
|
if (!Object.prototype.hasOwnProperty.call(src, srcKey)) {
|
|
51
55
|
return;
|
|
52
56
|
}
|
|
53
57
|
dest[destKey] = src[srcKey];
|
|
54
58
|
}
|
|
55
|
-
exports.renameIfPresent = renameIfPresent;
|
|
56
59
|
function fieldMasks(object, ...doNotRecurseIn) {
|
|
57
60
|
const masks = [];
|
|
58
61
|
fieldMasksHelper([], object, doNotRecurseIn, masks);
|
|
59
62
|
return masks;
|
|
60
63
|
}
|
|
61
|
-
exports.fieldMasks = fieldMasks;
|
|
62
64
|
function fieldMasksHelper(prefixes, cursor, doNotRecurseIn, masks) {
|
|
63
65
|
if (Array.isArray(cursor) && !cursor.length) {
|
|
64
66
|
return;
|
|
@@ -90,7 +92,6 @@ function getInvokerMembers(invoker, projectId) {
|
|
|
90
92
|
}
|
|
91
93
|
return invoker.map((inv) => formatServiceAccount(inv, projectId));
|
|
92
94
|
}
|
|
93
|
-
exports.getInvokerMembers = getInvokerMembers;
|
|
94
95
|
function formatServiceAccount(serviceAccount, projectId, removeTypePrefix = false) {
|
|
95
96
|
if (serviceAccount.length === 0) {
|
|
96
97
|
throw new error_1.FirebaseError("Service account cannot be an empty string");
|
|
@@ -105,7 +106,6 @@ function formatServiceAccount(serviceAccount, projectId, removeTypePrefix = fals
|
|
|
105
106
|
}
|
|
106
107
|
return `${prefix}${serviceAccount}`;
|
|
107
108
|
}
|
|
108
|
-
exports.formatServiceAccount = formatServiceAccount;
|
|
109
109
|
function pruneUndefiends(obj) {
|
|
110
110
|
if (typeof obj !== "object" || obj === null) {
|
|
111
111
|
return;
|
|
@@ -128,4 +128,3 @@ function pruneUndefiends(obj) {
|
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
|
-
exports.pruneUndefiends = pruneUndefiends;
|
package/lib/gcp/pubsub.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.createTopic = createTopic;
|
|
4
|
+
exports.getTopic = getTopic;
|
|
5
|
+
exports.updateTopic = updateTopic;
|
|
6
|
+
exports.deleteTopic = deleteTopic;
|
|
4
7
|
const apiv2_1 = require("../apiv2");
|
|
5
8
|
const api_1 = require("../api");
|
|
6
9
|
const proto = require("./proto");
|
|
@@ -14,12 +17,10 @@ async function createTopic(topic) {
|
|
|
14
17
|
const result = await client.put(topic.name, topic);
|
|
15
18
|
return result.body;
|
|
16
19
|
}
|
|
17
|
-
exports.createTopic = createTopic;
|
|
18
20
|
async function getTopic(name) {
|
|
19
21
|
const result = await client.get(name);
|
|
20
22
|
return result.body;
|
|
21
23
|
}
|
|
22
|
-
exports.getTopic = getTopic;
|
|
23
24
|
async function updateTopic(topic) {
|
|
24
25
|
const queryParams = {
|
|
25
26
|
updateMask: proto.fieldMasks(topic).join(","),
|
|
@@ -27,8 +28,6 @@ async function updateTopic(topic) {
|
|
|
27
28
|
const result = await client.patch(topic.name, topic, { queryParams });
|
|
28
29
|
return result.body;
|
|
29
30
|
}
|
|
30
|
-
exports.updateTopic = updateTopic;
|
|
31
31
|
async function deleteTopic(name) {
|
|
32
32
|
await client.delete(name);
|
|
33
33
|
}
|
|
34
|
-
exports.deleteTopic = deleteTopic;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.firebaseRoles = void 0;
|
|
4
|
+
exports.getIamPolicy = getIamPolicy;
|
|
5
|
+
exports.setIamPolicy = setIamPolicy;
|
|
6
|
+
exports.addServiceAccountToRoles = addServiceAccountToRoles;
|
|
7
|
+
exports.serviceAccountHasRoles = serviceAccountHasRoles;
|
|
4
8
|
const lodash_1 = require("lodash");
|
|
5
9
|
const api_1 = require("../api");
|
|
6
10
|
const apiv2_1 = require("../apiv2");
|
|
@@ -19,7 +23,6 @@ async function getIamPolicy(projectIdOrNumber) {
|
|
|
19
23
|
const response = await apiClient.post(`/projects/${projectIdOrNumber}:getIamPolicy`);
|
|
20
24
|
return response.body;
|
|
21
25
|
}
|
|
22
|
-
exports.getIamPolicy = getIamPolicy;
|
|
23
26
|
async function setIamPolicy(projectIdOrNumber, newPolicy, updateMask = "") {
|
|
24
27
|
const response = await apiClient.post(`/projects/${projectIdOrNumber}:setIamPolicy`, {
|
|
25
28
|
policy: newPolicy,
|
|
@@ -27,7 +30,6 @@ async function setIamPolicy(projectIdOrNumber, newPolicy, updateMask = "") {
|
|
|
27
30
|
});
|
|
28
31
|
return response.body;
|
|
29
32
|
}
|
|
30
|
-
exports.setIamPolicy = setIamPolicy;
|
|
31
33
|
async function addServiceAccountToRoles(projectId, serviceAccountName, roles, skipAccountLookup = false) {
|
|
32
34
|
const [{ name: fullServiceAccountName }, projectPolicy] = await Promise.all([
|
|
33
35
|
skipAccountLookup
|
|
@@ -52,7 +54,6 @@ async function addServiceAccountToRoles(projectId, serviceAccountName, roles, sk
|
|
|
52
54
|
});
|
|
53
55
|
return setIamPolicy(projectId, projectPolicy, "bindings");
|
|
54
56
|
}
|
|
55
|
-
exports.addServiceAccountToRoles = addServiceAccountToRoles;
|
|
56
57
|
async function serviceAccountHasRoles(projectId, serviceAccountName, roles, skipAccountLookup = false) {
|
|
57
58
|
const [{ name: fullServiceAccountName }, projectPolicy] = await Promise.all([
|
|
58
59
|
skipAccountLookup
|
|
@@ -72,4 +73,3 @@ async function serviceAccountHasRoles(projectId, serviceAccountName, roles, skip
|
|
|
72
73
|
}
|
|
73
74
|
return true;
|
|
74
75
|
}
|
|
75
|
-
exports.serviceAccountHasRoles = serviceAccountHasRoles;
|
package/lib/gcp/rules.js
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getLatestRulesetName = getLatestRulesetName;
|
|
4
|
+
exports.listReleases = listReleases;
|
|
5
|
+
exports.listAllReleases = listAllReleases;
|
|
6
|
+
exports.getRulesetContent = getRulesetContent;
|
|
7
|
+
exports.listRulesets = listRulesets;
|
|
8
|
+
exports.listAllRulesets = listAllRulesets;
|
|
9
|
+
exports.getRulesetId = getRulesetId;
|
|
10
|
+
exports.deleteRuleset = deleteRuleset;
|
|
11
|
+
exports.createRuleset = createRuleset;
|
|
12
|
+
exports.createRelease = createRelease;
|
|
13
|
+
exports.updateRelease = updateRelease;
|
|
14
|
+
exports.updateOrCreateRelease = updateOrCreateRelease;
|
|
15
|
+
exports.testRuleset = testRuleset;
|
|
4
16
|
const api_1 = require("../api");
|
|
5
17
|
const apiv2_1 = require("../apiv2");
|
|
6
18
|
const logger_1 = require("../logger");
|
|
@@ -25,7 +37,6 @@ async function getLatestRulesetName(projectId, service) {
|
|
|
25
37
|
}
|
|
26
38
|
return release.rulesetName;
|
|
27
39
|
}
|
|
28
|
-
exports.getLatestRulesetName = getLatestRulesetName;
|
|
29
40
|
const MAX_RELEASES_PAGE_SIZE = 10;
|
|
30
41
|
async function listReleases(projectId, pageToken = "") {
|
|
31
42
|
const response = await apiClient.get(`/projects/${projectId}/releases`, {
|
|
@@ -39,7 +50,6 @@ async function listReleases(projectId, pageToken = "") {
|
|
|
39
50
|
}
|
|
40
51
|
return _handleErrorResponse(response);
|
|
41
52
|
}
|
|
42
|
-
exports.listReleases = listReleases;
|
|
43
53
|
async function listAllReleases(projectId) {
|
|
44
54
|
let pageToken;
|
|
45
55
|
let releases = [];
|
|
@@ -52,7 +62,6 @@ async function listAllReleases(projectId) {
|
|
|
52
62
|
} while (pageToken);
|
|
53
63
|
return releases.sort((a, b) => b.createTime.localeCompare(a.createTime));
|
|
54
64
|
}
|
|
55
|
-
exports.listAllReleases = listAllReleases;
|
|
56
65
|
async function getRulesetContent(name) {
|
|
57
66
|
const response = await apiClient.get(`/${name}`, {
|
|
58
67
|
skipLog: { resBody: true },
|
|
@@ -63,7 +72,6 @@ async function getRulesetContent(name) {
|
|
|
63
72
|
}
|
|
64
73
|
return _handleErrorResponse(response);
|
|
65
74
|
}
|
|
66
|
-
exports.getRulesetContent = getRulesetContent;
|
|
67
75
|
const MAX_RULESET_PAGE_SIZE = 100;
|
|
68
76
|
async function listRulesets(projectId, pageToken = "") {
|
|
69
77
|
const response = await apiClient.get(`/projects/${projectId}/rulesets`, {
|
|
@@ -78,7 +86,6 @@ async function listRulesets(projectId, pageToken = "") {
|
|
|
78
86
|
}
|
|
79
87
|
return _handleErrorResponse(response);
|
|
80
88
|
}
|
|
81
|
-
exports.listRulesets = listRulesets;
|
|
82
89
|
async function listAllRulesets(projectId) {
|
|
83
90
|
let pageToken;
|
|
84
91
|
let rulesets = [];
|
|
@@ -91,11 +98,9 @@ async function listAllRulesets(projectId) {
|
|
|
91
98
|
} while (pageToken);
|
|
92
99
|
return rulesets.sort((a, b) => b.createTime.localeCompare(a.createTime));
|
|
93
100
|
}
|
|
94
|
-
exports.listAllRulesets = listAllRulesets;
|
|
95
101
|
function getRulesetId(ruleset) {
|
|
96
102
|
return ruleset.name.split("/").pop();
|
|
97
103
|
}
|
|
98
|
-
exports.getRulesetId = getRulesetId;
|
|
99
104
|
async function deleteRuleset(projectId, id) {
|
|
100
105
|
const response = await apiClient.delete(`/projects/${projectId}/rulesets/${id}`);
|
|
101
106
|
if (response.status === 200) {
|
|
@@ -103,7 +108,6 @@ async function deleteRuleset(projectId, id) {
|
|
|
103
108
|
}
|
|
104
109
|
return _handleErrorResponse(response);
|
|
105
110
|
}
|
|
106
|
-
exports.deleteRuleset = deleteRuleset;
|
|
107
111
|
async function createRuleset(projectId, files) {
|
|
108
112
|
const payload = { source: { files } };
|
|
109
113
|
const response = await apiClient.post(`/projects/${projectId}/rulesets`, payload, { skipLog: { body: true } });
|
|
@@ -113,7 +117,6 @@ async function createRuleset(projectId, files) {
|
|
|
113
117
|
}
|
|
114
118
|
return _handleErrorResponse(response);
|
|
115
119
|
}
|
|
116
|
-
exports.createRuleset = createRuleset;
|
|
117
120
|
async function createRelease(projectId, rulesetName, releaseName) {
|
|
118
121
|
const payload = {
|
|
119
122
|
name: `projects/${projectId}/releases/${releaseName}`,
|
|
@@ -126,7 +129,6 @@ async function createRelease(projectId, rulesetName, releaseName) {
|
|
|
126
129
|
}
|
|
127
130
|
return _handleErrorResponse(response);
|
|
128
131
|
}
|
|
129
|
-
exports.createRelease = createRelease;
|
|
130
132
|
async function updateRelease(projectId, rulesetName, releaseName) {
|
|
131
133
|
const payload = {
|
|
132
134
|
release: {
|
|
@@ -141,7 +143,6 @@ async function updateRelease(projectId, rulesetName, releaseName) {
|
|
|
141
143
|
}
|
|
142
144
|
return _handleErrorResponse(response);
|
|
143
145
|
}
|
|
144
|
-
exports.updateRelease = updateRelease;
|
|
145
146
|
async function updateOrCreateRelease(projectId, rulesetName, releaseName) {
|
|
146
147
|
logger_1.logger.debug("[rules] releasing", releaseName, "with ruleset", rulesetName);
|
|
147
148
|
return updateRelease(projectId, rulesetName, releaseName).catch(() => {
|
|
@@ -149,8 +150,6 @@ async function updateOrCreateRelease(projectId, rulesetName, releaseName) {
|
|
|
149
150
|
return createRelease(projectId, rulesetName, releaseName);
|
|
150
151
|
});
|
|
151
152
|
}
|
|
152
|
-
exports.updateOrCreateRelease = updateOrCreateRelease;
|
|
153
153
|
function testRuleset(projectId, files) {
|
|
154
154
|
return apiClient.post(`/projects/${encodeURIComponent(projectId)}:test`, { source: { files } }, { skipLog: { body: true } });
|
|
155
155
|
}
|
|
156
|
-
exports.testRuleset = testRuleset;
|