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.
Files changed (523) hide show
  1. package/lib/accountExporter.js +3 -5
  2. package/lib/accountImporter.js +4 -5
  3. package/lib/api.js +3 -3
  4. package/lib/apiv2.js +9 -13
  5. package/lib/appUtils.js +19 -21
  6. package/lib/appdistribution/client.js +4 -8
  7. package/lib/appdistribution/distribution.js +4 -4
  8. package/lib/appdistribution/options-parser-util.js +8 -9
  9. package/lib/appdistribution/types.js +2 -2
  10. package/lib/appdistribution/yaml_helper.js +33 -17
  11. package/lib/apphosting/app.js +8 -13
  12. package/lib/apphosting/backend.js +34 -24
  13. package/lib/apphosting/config.js +14 -14
  14. package/lib/apphosting/githubConnections.js +38 -35
  15. package/lib/apphosting/localbuilds.js +4 -6
  16. package/lib/apphosting/repo.js +24 -20
  17. package/lib/apphosting/rollout.js +12 -5
  18. package/lib/apphosting/secrets/dialogs.js +9 -9
  19. package/lib/apphosting/secrets/index.js +9 -11
  20. package/lib/apphosting/utils.js +2 -3
  21. package/lib/apphosting/yaml.js +12 -11
  22. package/lib/apptesting/ensureProjectConfigured.js +1 -2
  23. package/lib/apptesting/invokeTests.js +2 -3
  24. package/lib/apptesting/parseTestFiles.js +5 -6
  25. package/lib/apptesting/types.js +2 -2
  26. package/lib/archiveDirectory.js +1 -2
  27. package/lib/auth.js +36 -40
  28. package/lib/bin/cli.js +2 -3
  29. package/lib/bin/mcp.js +1 -2
  30. package/lib/checkMinRequiredVersion.js +1 -2
  31. package/lib/checkValidTargetFilters.js +1 -2
  32. package/lib/command.js +6 -9
  33. package/lib/commands/appdistribution-testers-list.js +2 -3
  34. package/lib/commands/apphosting-backends-list.js +4 -6
  35. package/lib/commands/apphosting-builds-create.js +2 -3
  36. package/lib/commands/apphosting-builds-get.js +1 -2
  37. package/lib/commands/apphosting-rollouts-list.js +1 -2
  38. package/lib/commands/apps-init.js +1 -1
  39. package/lib/commands/{apptesting-execute.js → apptesting-wata.js} +3 -4
  40. package/lib/commands/crashlytics-symbols-upload.js +2 -2
  41. package/lib/commands/dataconnect-execute.js +4 -4
  42. package/lib/commands/dataconnect-sdk-generate.js +5 -6
  43. package/lib/commands/dataconnect-services-list.js +7 -8
  44. package/lib/commands/dataconnect-sql-diff.js +1 -2
  45. package/lib/commands/dataconnect-sql-migrate.js +4 -3
  46. package/lib/commands/dataconnect-sql-setup.js +2 -2
  47. package/lib/commands/dataconnect-sql-shell.js +5 -1
  48. package/lib/commands/emulators-start.js +1 -2
  49. package/lib/commands/ext-configure.js +6 -4
  50. package/lib/commands/ext-dev-list.js +2 -3
  51. package/lib/commands/ext-dev-upload.js +2 -2
  52. package/lib/commands/ext-export.js +1 -1
  53. package/lib/commands/ext-info.js +2 -3
  54. package/lib/commands/ext-install.js +5 -7
  55. package/lib/commands/firestore-backups-list.js +1 -2
  56. package/lib/commands/firestore-backups-schedules-list.js +1 -2
  57. package/lib/commands/firestore-indexes-list.js +1 -2
  58. package/lib/commands/firestore-utils.js +1 -2
  59. package/lib/commands/functions-artifacts-setpolicy.js +1 -2
  60. package/lib/commands/functions-config-export.js +2 -3
  61. package/lib/commands/hosting-channel-deploy.js +2 -2
  62. package/lib/commands/hosting-clone.js +2 -3
  63. package/lib/commands/hosting-sites-create.js +1 -1
  64. package/lib/commands/index.js +2 -3
  65. package/lib/commands/init.js +4 -5
  66. package/lib/commands/internaltesting-functions-discover.js +1 -1
  67. package/lib/commands/login.js +4 -5
  68. package/lib/commands/logout.js +3 -3
  69. package/lib/commands/projects-create.js +1 -1
  70. package/lib/commands/remoteconfig-experiments-list.js +2 -3
  71. package/lib/commands/remoteconfig-get.js +1 -1
  72. package/lib/commands/remoteconfig-rollback.js +1 -2
  73. package/lib/commands/remoteconfig-rollouts-list.js +2 -3
  74. package/lib/commands/remoteconfig-versions-list.js +3 -4
  75. package/lib/commands/use.js +3 -3
  76. package/lib/config.js +4 -5
  77. package/lib/crashlytics/buildToolsJarHelper.js +3 -5
  78. package/lib/crashlytics/events.js +4 -7
  79. package/lib/crashlytics/filters.js +10 -12
  80. package/lib/crashlytics/issues.js +2 -3
  81. package/lib/crashlytics/notes.js +3 -4
  82. package/lib/crashlytics/reports.js +21 -15
  83. package/lib/crashlytics/types.js +7 -7
  84. package/lib/crashlytics/utils.js +4 -4
  85. package/lib/database/api.js +2 -3
  86. package/lib/database/import.js +4 -4
  87. package/lib/database/metadata.js +5 -6
  88. package/lib/database/rulesConfig.js +2 -3
  89. package/lib/dataconnect/build.js +10 -13
  90. package/lib/dataconnect/checkIam.js +1 -2
  91. package/lib/dataconnect/client.js +15 -18
  92. package/lib/dataconnect/dataplaneClient.js +6 -6
  93. package/lib/dataconnect/ensureApis.js +2 -3
  94. package/lib/dataconnect/errors.js +8 -11
  95. package/lib/dataconnect/filters.js +2 -3
  96. package/lib/dataconnect/freeTrial.js +3 -4
  97. package/lib/dataconnect/graphqlError.js +5 -8
  98. package/lib/dataconnect/load.js +10 -11
  99. package/lib/dataconnect/names.js +14 -18
  100. package/lib/dataconnect/prompts.js +1 -2
  101. package/lib/dataconnect/provisionCloudSql.js +13 -17
  102. package/lib/dataconnect/schemaMigration.js +60 -27
  103. package/lib/dataconnect/types.js +10 -12
  104. package/lib/dataconnect/webhook.js +3 -3
  105. package/lib/defaultCredentials.js +3 -4
  106. package/lib/deploy/apphosting/deploy.js +2 -3
  107. package/lib/deploy/apphosting/prepare.js +3 -5
  108. package/lib/deploy/apphosting/release.js +1 -1
  109. package/lib/deploy/apphosting/util.js +1 -2
  110. package/lib/deploy/database/deploy.js +1 -2
  111. package/lib/deploy/database/prepare.js +1 -2
  112. package/lib/deploy/database/release.js +1 -2
  113. package/lib/deploy/dataconnect/context.js +15 -4
  114. package/lib/deploy/dataconnect/deploy.js +5 -6
  115. package/lib/deploy/dataconnect/prepare.js +7 -9
  116. package/lib/deploy/dataconnect/release.js +7 -10
  117. package/lib/deploy/extensions/deploy.js +7 -9
  118. package/lib/deploy/extensions/deploymentSummary.js +6 -7
  119. package/lib/deploy/extensions/planner.js +15 -18
  120. package/lib/deploy/extensions/prepare.js +9 -11
  121. package/lib/deploy/extensions/release.js +10 -12
  122. package/lib/deploy/extensions/secrets.js +8 -11
  123. package/lib/deploy/extensions/tasks.js +6 -8
  124. package/lib/deploy/extensions/v2FunctionHelper.js +2 -3
  125. package/lib/deploy/extensions/validate.js +1 -2
  126. package/lib/deploy/firestore/deploy.js +3 -5
  127. package/lib/deploy/firestore/prepare.js +2 -3
  128. package/lib/deploy/firestore/release.js +3 -4
  129. package/lib/deploy/functions/backend.js +52 -42
  130. package/lib/deploy/functions/build.js +41 -15
  131. package/lib/deploy/functions/cache/applyHash.js +3 -5
  132. package/lib/deploy/functions/cache/hash.js +4 -5
  133. package/lib/deploy/functions/cel.js +3 -3
  134. package/lib/deploy/functions/checkIam.js +8 -8
  135. package/lib/deploy/functions/containerCleaner.js +10 -6
  136. package/lib/deploy/functions/deploy.js +6 -8
  137. package/lib/deploy/functions/ensure.js +6 -9
  138. package/lib/deploy/functions/functionsDeployHelper.js +10 -11
  139. package/lib/deploy/functions/params.js +10 -10
  140. package/lib/deploy/functions/prepare.js +41 -36
  141. package/lib/deploy/functions/prepareFunctionsUpload.js +24 -10
  142. package/lib/deploy/functions/pricing.js +3 -3
  143. package/lib/deploy/functions/prompts.js +7 -10
  144. package/lib/deploy/functions/release/executor.js +5 -6
  145. package/lib/deploy/functions/release/fabricator.js +76 -29
  146. package/lib/deploy/functions/release/index.js +23 -14
  147. package/lib/deploy/functions/release/planner.js +15 -14
  148. package/lib/deploy/functions/release/reporter.js +20 -20
  149. package/lib/deploy/functions/release/sourceTokenScraper.js +4 -5
  150. package/lib/deploy/functions/remoteSource.js +3 -4
  151. package/lib/deploy/functions/runtimes/discovery/index.js +9 -12
  152. package/lib/deploy/functions/runtimes/discovery/parsing.js +2 -3
  153. package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +29 -10
  154. package/lib/deploy/functions/runtimes/index.js +1 -2
  155. package/lib/deploy/functions/runtimes/node/index.js +18 -9
  156. package/lib/deploy/functions/runtimes/node/parseRuntimeAndValidateSDK.js +2 -2
  157. package/lib/deploy/functions/runtimes/node/validate.js +1 -2
  158. package/lib/deploy/functions/runtimes/node/versioning.js +6 -7
  159. package/lib/deploy/functions/runtimes/python/index.js +12 -12
  160. package/lib/deploy/functions/runtimes/supported/index.js +5 -6
  161. package/lib/deploy/functions/services/auth.js +49 -36
  162. package/lib/deploy/functions/services/database.js +1 -2
  163. package/lib/deploy/functions/services/dataconnect.js +16 -2
  164. package/lib/deploy/functions/services/firebaseAlerts.js +1 -2
  165. package/lib/deploy/functions/services/firestore.js +3 -5
  166. package/lib/deploy/functions/services/index.js +2 -2
  167. package/lib/deploy/functions/services/remoteConfig.js +1 -2
  168. package/lib/deploy/functions/services/storage.js +3 -5
  169. package/lib/deploy/functions/services/testLab.js +1 -2
  170. package/lib/deploy/functions/triggerRegionHelper.js +1 -2
  171. package/lib/deploy/functions/validate.js +12 -11
  172. package/lib/deploy/hosting/convertConfig.js +38 -22
  173. package/lib/deploy/hosting/deploy.js +4 -7
  174. package/lib/deploy/hosting/hashcache.js +2 -3
  175. package/lib/deploy/hosting/prepare.js +14 -14
  176. package/lib/deploy/hosting/release.js +1 -2
  177. package/lib/deploy/index.js +7 -8
  178. package/lib/deploy/lifecycleHooks.js +3 -5
  179. package/lib/deploy/remoteconfig/deploy.js +1 -1
  180. package/lib/deploy/remoteconfig/functions.js +5 -6
  181. package/lib/deploy/remoteconfig/prepare.js +2 -3
  182. package/lib/deploy/remoteconfig/release.js +2 -2
  183. package/lib/deploy/storage/deploy.js +1 -1
  184. package/lib/deploy/storage/prepare.js +1 -1
  185. package/lib/deploy/storage/release.js +1 -1
  186. package/lib/deploymentTool.js +5 -6
  187. package/lib/detectProjectRoot.js +1 -2
  188. package/lib/downloadUtils.js +2 -3
  189. package/lib/emulator/adminSdkConfig.js +2 -3
  190. package/lib/emulator/apphosting/config.js +1 -2
  191. package/lib/emulator/apphosting/developmentServer.js +3 -3
  192. package/lib/emulator/apphosting/serve.js +20 -14
  193. package/lib/emulator/auth/cloudFunctions.js +2 -3
  194. package/lib/emulator/auth/errors.js +2 -2
  195. package/lib/emulator/auth/handlers.js +3 -4
  196. package/lib/emulator/auth/index.js +6 -6
  197. package/lib/emulator/auth/operations.js +171 -129
  198. package/lib/emulator/auth/server.js +30 -22
  199. package/lib/emulator/auth/state.js +26 -36
  200. package/lib/emulator/auth/utils.js +12 -13
  201. package/lib/emulator/commandUtils.js +20 -20
  202. package/lib/emulator/controller.js +32 -29
  203. package/lib/emulator/databaseEmulator.js +1 -2
  204. package/lib/emulator/dataconnect/pgliteServer.js +48 -104
  205. package/lib/emulator/dataconnectEmulator.js +6 -9
  206. package/lib/emulator/download.js +2 -3
  207. package/lib/emulator/downloadableEmulatorInfo.json +7 -7
  208. package/lib/emulator/downloadableEmulators.js +49 -24
  209. package/lib/emulator/emulatorLogger.js +19 -4
  210. package/lib/emulator/env.js +6 -8
  211. package/lib/emulator/eventarcEmulator.js +2 -3
  212. package/lib/emulator/eventarcEmulatorUtils.js +3 -6
  213. package/lib/emulator/extensions/postinstall.js +1 -2
  214. package/lib/emulator/extensions/validation.js +4 -7
  215. package/lib/emulator/extensionsEmulator.js +6 -9
  216. package/lib/emulator/functionsEmulator.js +89 -46
  217. package/lib/emulator/functionsEmulatorRuntime.js +1 -1
  218. package/lib/emulator/functionsEmulatorShared.js +30 -30
  219. package/lib/emulator/functionsEmulatorShell.js +4 -6
  220. package/lib/emulator/functionsEmulatorUtils.js +8 -9
  221. package/lib/emulator/functionsRuntimeWorker.js +18 -9
  222. package/lib/emulator/hub.js +41 -34
  223. package/lib/emulator/hubClient.js +1 -1
  224. package/lib/emulator/initEmulators.js +2 -3
  225. package/lib/emulator/loggingEmulator.js +2 -2
  226. package/lib/emulator/portUtils.js +4 -5
  227. package/lib/emulator/registry.js +10 -4
  228. package/lib/emulator/shared/request.js +1 -2
  229. package/lib/emulator/storage/apis/firebase.js +16 -20
  230. package/lib/emulator/storage/apis/gcloud.js +6 -9
  231. package/lib/emulator/storage/apis/shared.js +1 -2
  232. package/lib/emulator/storage/crc.js +2 -3
  233. package/lib/emulator/storage/files.js +18 -41
  234. package/lib/emulator/storage/metadata.js +10 -4
  235. package/lib/emulator/storage/multipart.js +1 -2
  236. package/lib/emulator/storage/rfc.js +1 -2
  237. package/lib/emulator/storage/rules/config.js +1 -2
  238. package/lib/emulator/storage/rules/manager.js +3 -5
  239. package/lib/emulator/storage/rules/runtime.js +15 -13
  240. package/lib/emulator/storage/rules/types.js +2 -2
  241. package/lib/emulator/storage/rules/utils.js +5 -6
  242. package/lib/emulator/storage/server.js +1 -2
  243. package/lib/emulator/storage/upload.js +3 -4
  244. package/lib/emulator/taskQueue.js +11 -4
  245. package/lib/emulator/tasksEmulator.js +11 -12
  246. package/lib/emulator/types.js +6 -6
  247. package/lib/emulator/ui.js +6 -1
  248. package/lib/ensureApiEnabled.js +7 -9
  249. package/lib/env.js +2 -3
  250. package/lib/error.js +11 -13
  251. package/lib/errorOut.js +1 -2
  252. package/lib/experiments.js +15 -18
  253. package/lib/extensions/askUserForEventsConfig.js +12 -13
  254. package/lib/extensions/askUserForParam.js +11 -12
  255. package/lib/extensions/change-log.js +4 -5
  256. package/lib/extensions/checkProjectBilling.js +1 -2
  257. package/lib/extensions/diagnose.js +1 -2
  258. package/lib/extensions/displayExtensionInfo.js +25 -32
  259. package/lib/extensions/emulator/optionsHelper.js +6 -8
  260. package/lib/extensions/emulator/specHelper.js +15 -16
  261. package/lib/extensions/emulator/triggerHelper.js +3 -5
  262. package/lib/extensions/etags.js +2 -3
  263. package/lib/extensions/export.js +7 -9
  264. package/lib/extensions/extensionsApi.js +23 -29
  265. package/lib/extensions/extensionsHelper.js +52 -80
  266. package/lib/extensions/listExtensions.js +3 -5
  267. package/lib/extensions/localHelper.js +5 -5
  268. package/lib/extensions/manifest.js +15 -16
  269. package/lib/extensions/metricsUtils.js +3 -4
  270. package/lib/extensions/paramHelper.js +21 -18
  271. package/lib/extensions/provisioningHelper.js +17 -21
  272. package/lib/extensions/publishHelpers.js +1 -2
  273. package/lib/extensions/publisherApi.js +11 -13
  274. package/lib/extensions/refs.js +6 -7
  275. package/lib/extensions/runtimes/common.js +18 -19
  276. package/lib/extensions/runtimes/node.js +5 -6
  277. package/lib/extensions/secretsUtils.js +8 -8
  278. package/lib/extensions/tos.js +7 -8
  279. package/lib/extensions/types.js +3 -3
  280. package/lib/extensions/updateHelper.js +6 -7
  281. package/lib/extensions/utils.js +6 -8
  282. package/lib/extensions/versionHelper.js +1 -2
  283. package/lib/extensions/warnings.js +6 -8
  284. package/lib/fetchMOTD.js +1 -2
  285. package/lib/fetchWebSetup.js +3 -4
  286. package/lib/filterTargets.js +1 -2
  287. package/lib/firebaseConfigValidate.js +2 -3
  288. package/lib/firestore/api-sort.js +8 -9
  289. package/lib/firestore/api-types.js +15 -15
  290. package/lib/firestore/api.js +15 -13
  291. package/lib/firestore/backupUtils.js +3 -3
  292. package/lib/firestore/checkDatabaseType.js +1 -2
  293. package/lib/firestore/delete.js +1 -2
  294. package/lib/firestore/encodeFirestoreValue.js +1 -2
  295. package/lib/firestore/fsConfig.js +1 -2
  296. package/lib/firestore/options.js +1 -1
  297. package/lib/firestore/util.js +5 -6
  298. package/lib/firestore/validator.js +4 -5
  299. package/lib/frameworks/angular/index.js +14 -15
  300. package/lib/frameworks/angular/utils.js +21 -23
  301. package/lib/frameworks/astro/index.js +7 -7
  302. package/lib/frameworks/astro/utils.js +4 -6
  303. package/lib/frameworks/compose/discover/filesystem.js +3 -3
  304. package/lib/frameworks/compose/discover/frameworkMatcher.js +4 -5
  305. package/lib/frameworks/compose/discover/index.js +1 -2
  306. package/lib/frameworks/compose/discover/runtime/node.js +8 -11
  307. package/lib/frameworks/compose/driver/docker.js +3 -5
  308. package/lib/frameworks/compose/driver/hooks.js +2 -2
  309. package/lib/frameworks/compose/driver/index.js +2 -2
  310. package/lib/frameworks/compose/driver/local.js +2 -3
  311. package/lib/frameworks/compose/index.js +5 -7
  312. package/lib/frameworks/constants.js +3 -3
  313. package/lib/frameworks/express/index.js +7 -8
  314. package/lib/frameworks/flutter/index.js +6 -7
  315. package/lib/frameworks/flutter/utils.js +4 -5
  316. package/lib/frameworks/index.js +21 -22
  317. package/lib/frameworks/next/constants.js +5 -2
  318. package/lib/frameworks/next/index.js +34 -32
  319. package/lib/frameworks/next/utils.js +40 -39
  320. package/lib/frameworks/nuxt/index.js +9 -9
  321. package/lib/frameworks/nuxt/utils.js +4 -6
  322. package/lib/frameworks/nuxt2/index.js +7 -7
  323. package/lib/frameworks/sveltekit/index.js +6 -8
  324. package/lib/frameworks/utils.js +26 -24
  325. package/lib/frameworks/vite/index.js +8 -9
  326. package/lib/fsAsync.js +1 -2
  327. package/lib/fsutils.js +5 -6
  328. package/lib/functional.js +11 -11
  329. package/lib/functions/artifacts.js +25 -22
  330. package/lib/functions/ensureTargeted.js +1 -2
  331. package/lib/functions/env.js +13 -14
  332. package/lib/functions/functionslog.js +2 -3
  333. package/lib/functions/projectConfig.js +29 -33
  334. package/lib/functions/python.js +10 -4
  335. package/lib/functions/secrets.js +32 -18
  336. package/lib/functionsConfig.js +14 -14
  337. package/lib/functionsConfigClone.js +1 -2
  338. package/lib/functionsShellCommandAction.js +2 -3
  339. package/lib/gcp/apphosting.js +43 -28
  340. package/lib/gcp/apptesting.js +2 -2
  341. package/lib/gcp/artifactregistry.js +5 -5
  342. package/lib/gcp/auth.js +11 -13
  343. package/lib/gcp/cloudbilling.js +4 -5
  344. package/lib/gcp/cloudbuild.js +10 -11
  345. package/lib/gcp/cloudfunctions.js +61 -45
  346. package/lib/gcp/cloudfunctionsv2.js +81 -43
  347. package/lib/gcp/cloudlogging.js +2 -4
  348. package/lib/gcp/cloudmonitoring.js +7 -7
  349. package/lib/gcp/cloudscheduler.js +12 -14
  350. package/lib/gcp/cloudsql/cloudsqladmin.js +18 -20
  351. package/lib/gcp/cloudsql/connect.js +14 -9
  352. package/lib/gcp/cloudsql/fbToolsAuthClient.js +5 -3
  353. package/lib/gcp/cloudsql/interactive.js +2 -3
  354. package/lib/gcp/cloudsql/permissions.js +8 -8
  355. package/lib/gcp/cloudsql/permissionsSetup.js +9 -9
  356. package/lib/gcp/cloudtasks.js +19 -18
  357. package/lib/gcp/computeEngine.js +1 -2
  358. package/lib/gcp/devConnect.js +32 -29
  359. package/lib/gcp/docker.js +2 -4
  360. package/lib/gcp/eventarc.js +5 -5
  361. package/lib/gcp/firedata.js +4 -4
  362. package/lib/gcp/firestore.js +16 -16
  363. package/lib/gcp/iam.js +11 -12
  364. package/lib/gcp/identityPlatform.js +4 -5
  365. package/lib/gcp/k8s.js +1 -2
  366. package/lib/gcp/location.js +2 -2
  367. package/lib/gcp/proto.js +10 -11
  368. package/lib/gcp/pubsub.js +4 -5
  369. package/lib/gcp/resourceManager.js +5 -5
  370. package/lib/gcp/rules.js +13 -14
  371. package/lib/gcp/run.js +24 -31
  372. package/lib/gcp/runv2.js +39 -27
  373. package/lib/gcp/secretManager.js +60 -39
  374. package/lib/gcp/serviceusage.js +8 -4
  375. package/lib/gcp/storage.js +22 -20
  376. package/lib/gemini/fdcExperience.js +5 -5
  377. package/lib/getDefaultDatabaseInstance.js +2 -4
  378. package/lib/getDefaultHostingSite.js +3 -4
  379. package/lib/getProjectNumber.js +1 -2
  380. package/lib/hosting/api.js +32 -36
  381. package/lib/hosting/cloudRunProxy.js +2 -3
  382. package/lib/hosting/config.js +17 -17
  383. package/lib/hosting/expireUtils.js +3 -3
  384. package/lib/hosting/functionsProxy.js +1 -2
  385. package/lib/hosting/implicitInit.js +1 -2
  386. package/lib/hosting/initMiddleware.js +1 -2
  387. package/lib/hosting/interactive.js +1 -2
  388. package/lib/hosting/proxy.js +3 -5
  389. package/lib/hosting/runTags.js +8 -11
  390. package/lib/init/features/account.js +1 -2
  391. package/lib/init/features/ailogic/index.js +3 -5
  392. package/lib/init/features/ailogic/utils.js +6 -8
  393. package/lib/init/features/aitools/claude.js +1 -2
  394. package/lib/init/features/aitools/cursor.js +1 -2
  395. package/lib/init/features/aitools/gemini.js +1 -1
  396. package/lib/init/features/aitools/promptUpdater.js +10 -12
  397. package/lib/init/features/aitools.js +1 -2
  398. package/lib/init/features/apphosting.js +3 -4
  399. package/lib/init/features/apptesting/index.js +9 -9
  400. package/lib/init/features/database.js +4 -5
  401. package/lib/init/features/dataconnect/create_app.js +3 -4
  402. package/lib/init/features/dataconnect/index.js +25 -22
  403. package/lib/init/features/dataconnect/resolver.js +6 -10
  404. package/lib/init/features/dataconnect/sdk.js +31 -24
  405. package/lib/init/features/emulators.js +7 -6
  406. package/lib/init/features/extensions/index.js +3 -5
  407. package/lib/init/features/firestore/index.js +7 -9
  408. package/lib/init/features/firestore/indexes.js +2 -2
  409. package/lib/init/features/firestore/rules.js +3 -3
  410. package/lib/init/features/functions/index.js +3 -5
  411. package/lib/init/features/functions/javascript.js +1 -2
  412. package/lib/init/features/functions/npm-dependencies.js +1 -2
  413. package/lib/init/features/functions/python.js +1 -2
  414. package/lib/init/features/functions/typescript.js +1 -2
  415. package/lib/init/features/genkit/index.js +44 -18
  416. package/lib/init/features/hosting/github.js +6 -8
  417. package/lib/init/features/hosting/index.js +10 -13
  418. package/lib/init/features/project.js +4 -7
  419. package/lib/init/features/remoteconfig.js +1 -2
  420. package/lib/init/features/storage.js +3 -5
  421. package/lib/init/index.js +4 -7
  422. package/lib/init/spawn.js +7 -9
  423. package/lib/listFiles.js +1 -2
  424. package/lib/loadCJSON.js +1 -2
  425. package/lib/localFunction.js +14 -15
  426. package/lib/logError.js +1 -2
  427. package/lib/logger.js +7 -7
  428. package/lib/management/apps.js +22 -22
  429. package/lib/management/database.js +11 -12
  430. package/lib/management/projects.js +57 -56
  431. package/lib/management/provisioning/errorHandler.js +3 -5
  432. package/lib/management/provisioning/provision.js +15 -9
  433. package/lib/management/studio.js +2 -3
  434. package/lib/mcp/errors.js +4 -4
  435. package/lib/mcp/index.js +16 -23
  436. package/lib/mcp/prompt.js +1 -2
  437. package/lib/mcp/prompts/core/consult.js +2 -3
  438. package/lib/mcp/prompts/crashlytics/connect.js +15 -122
  439. package/lib/mcp/prompts/dataconnect/schema.js +3 -3
  440. package/lib/mcp/prompts/index.js +8 -10
  441. package/lib/mcp/resource.js +3 -15
  442. package/lib/mcp/resources/guides/app_id.js +39 -0
  443. package/lib/mcp/resources/guides/crashlytics_connect.js +51 -0
  444. package/lib/mcp/resources/guides/crashlytics_investigations.js +51 -0
  445. package/lib/mcp/resources/guides/crashlytics_issues.js +42 -0
  446. package/lib/mcp/resources/guides/crashlytics_reports.js +112 -0
  447. package/lib/mcp/resources/index.js +11 -3
  448. package/lib/mcp/tool.js +3 -15
  449. package/lib/mcp/tools/apphosting/fetch_logs.js +3 -4
  450. package/lib/mcp/tools/apphosting/list_backends.js +1 -1
  451. package/lib/mcp/tools/auth/get_users.js +5 -16
  452. package/lib/mcp/tools/core/create_android_sha.js +4 -1
  453. package/lib/mcp/tools/core/get_environment.js +3 -3
  454. package/lib/mcp/tools/core/get_sdk_config.js +4 -5
  455. package/lib/mcp/tools/core/get_security_rules.js +1 -2
  456. package/lib/mcp/tools/core/init.js +2 -2
  457. package/lib/mcp/tools/core/logout.js +1 -1
  458. package/lib/mcp/tools/core/read_resources.js +2 -2
  459. package/lib/mcp/tools/core/validate_security_rules.js +1 -2
  460. package/lib/mcp/tools/crashlytics/events.js +43 -19
  461. package/lib/mcp/tools/crashlytics/index.js +1 -6
  462. package/lib/mcp/tools/crashlytics/issues.js +33 -12
  463. package/lib/mcp/tools/crashlytics/reports.js +66 -117
  464. package/lib/mcp/tools/dataconnect/list_services.js +2 -3
  465. package/lib/mcp/tools/firestore/converter.js +3 -5
  466. package/lib/mcp/tools/firestore/delete_document.js +1 -1
  467. package/lib/mcp/tools/functions/get_logs.js +14 -12
  468. package/lib/mcp/tools/functions/list_functions.js +1 -1
  469. package/lib/mcp/tools/index.js +17 -9
  470. package/lib/mcp/util/apptesting/availability.js +1 -2
  471. package/lib/mcp/util/availability.js +1 -2
  472. package/lib/mcp/util/crashlytics/availability.js +1 -2
  473. package/lib/mcp/util/dataconnect/compile.js +7 -6
  474. package/lib/mcp/util/dataconnect/converter.js +7 -10
  475. package/lib/mcp/util/dataconnect/emulator.js +1 -2
  476. package/lib/mcp/util.js +9 -11
  477. package/lib/messaging/sendMessage.js +1 -2
  478. package/lib/metaprogramming.js +1 -2
  479. package/lib/operation-poller.js +2 -2
  480. package/lib/profileReport.js +6 -6
  481. package/lib/profiler.js +1 -2
  482. package/lib/projectPath.js +1 -2
  483. package/lib/projectUtils.js +5 -6
  484. package/lib/prompt.js +22 -13
  485. package/lib/rc.js +5 -7
  486. package/lib/remoteconfig/deleteExperiment.js +1 -2
  487. package/lib/remoteconfig/deleteRollout.js +1 -2
  488. package/lib/remoteconfig/get.js +2 -3
  489. package/lib/remoteconfig/getExperiment.js +2 -2
  490. package/lib/remoteconfig/getRollout.js +2 -2
  491. package/lib/remoteconfig/interfaces.js +1 -1
  492. package/lib/remoteconfig/listExperiments.js +2 -2
  493. package/lib/remoteconfig/listRollouts.js +2 -2
  494. package/lib/remoteconfig/publish.js +1 -2
  495. package/lib/remoteconfig/rollback.js +1 -2
  496. package/lib/remoteconfig/versionslist.js +1 -2
  497. package/lib/requireAuth.js +4 -6
  498. package/lib/requireConfig.js +5 -8
  499. package/lib/requireDatabaseInstance.js +2 -2
  500. package/lib/requireHostingSite.js +1 -2
  501. package/lib/requireInteractive.js +1 -1
  502. package/lib/requirePermissions.js +1 -2
  503. package/lib/requireTosAcceptance.js +1 -2
  504. package/lib/responseToError.js +1 -2
  505. package/lib/rtdb.js +2 -3
  506. package/lib/rulesDeploy.js +3 -4
  507. package/lib/serve/functions.js +9 -1
  508. package/lib/serve/hosting.js +4 -5
  509. package/lib/serve/index.js +1 -2
  510. package/lib/shortenUrl.js +1 -2
  511. package/lib/templates.js +3 -4
  512. package/lib/throttler/throttler.js +3 -3
  513. package/lib/timeout.js +2 -3
  514. package/lib/track.js +23 -14
  515. package/lib/tsconfig.publish.tsbuildinfo +1 -0
  516. package/lib/unzip.js +2 -3
  517. package/lib/utils.js +62 -63
  518. package/lib/vsCodeUtils.js +2 -3
  519. package/package.json +6 -6
  520. package/templates/extensions/typescript/index.ts +1 -1
  521. package/templates/extensions/typescript/package.lint.json +1 -1
  522. package/templates/extensions/typescript/package.nolint.json +1 -1
  523. package/templates/extensions/typescript/tsconfig.json +2 -1
package/lib/auth.js CHANGED
@@ -1,6 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addAdditionalAccount = exports.logout = exports.getAccessToken = exports.haveValidTokens = exports.isExpired = exports.loggedIn = exports.findAccountByEmail = exports.loginGithub = exports.loginGoogle = exports.recordCredentials = exports.loginPrototyper = exports.setGlobalDefaultAccount = exports.setProjectAccount = exports.loginAdditionalAccount = exports.selectAccount = exports.setRefreshToken = exports.setActiveAccount = exports.assertAccount = exports.getAllAccounts = exports.getAdditionalAccounts = exports.getProjectDefaultAccount = exports.getGlobalDefaultAccount = void 0;
3
+ exports.getGlobalDefaultAccount = getGlobalDefaultAccount;
4
+ exports.getProjectDefaultAccount = getProjectDefaultAccount;
5
+ exports.getAdditionalAccounts = getAdditionalAccounts;
6
+ exports.getAllAccounts = getAllAccounts;
7
+ exports.assertAccount = assertAccount;
8
+ exports.setActiveAccount = setActiveAccount;
9
+ exports.setRefreshToken = setRefreshToken;
10
+ exports.selectAccount = selectAccount;
11
+ exports.loginAdditionalAccount = loginAdditionalAccount;
12
+ exports.setProjectAccount = setProjectAccount;
13
+ exports.setGlobalDefaultAccount = setGlobalDefaultAccount;
14
+ exports.loginPrototyper = loginPrototyper;
15
+ exports.recordCredentials = recordCredentials;
16
+ exports.loginGoogle = loginGoogle;
17
+ exports.loginGithub = loginGithub;
18
+ exports.findAccountByEmail = findAccountByEmail;
19
+ exports.loggedIn = loggedIn;
20
+ exports.isExpired = isExpired;
21
+ exports.haveValidTokens = haveValidTokens;
22
+ exports.getAccessToken = getAccessToken;
23
+ exports.logout = logout;
24
+ exports.addAdditionalAccount = addAdditionalAccount;
4
25
  const clc = require("colorette");
5
26
  const FormData = require("form-data");
6
27
  const http = require("http");
@@ -34,7 +55,6 @@ function getGlobalDefaultAccount() {
34
55
  tokens,
35
56
  };
36
57
  }
37
- exports.getGlobalDefaultAccount = getGlobalDefaultAccount;
38
58
  function getProjectDefaultAccount(projectDir) {
39
59
  if (!projectDir) {
40
60
  return getGlobalDefaultAccount();
@@ -47,11 +67,9 @@ function getProjectDefaultAccount(projectDir) {
47
67
  const allAccounts = getAllAccounts();
48
68
  return allAccounts.find((a) => a.user.email === email);
49
69
  }
50
- exports.getProjectDefaultAccount = getProjectDefaultAccount;
51
70
  function getAdditionalAccounts() {
52
71
  return configstore_1.configstore.get("additionalAccounts") || [];
53
72
  }
54
- exports.getAdditionalAccounts = getAdditionalAccounts;
55
73
  function getAllAccounts() {
56
74
  const res = [];
57
75
  const defaultUser = getGlobalDefaultAccount();
@@ -61,17 +79,15 @@ function getAllAccounts() {
61
79
  res.push(...getAdditionalAccounts());
62
80
  return res;
63
81
  }
64
- exports.getAllAccounts = getAllAccounts;
65
82
  function assertAccount(email, options) {
66
83
  const allAccounts = getAllAccounts();
67
84
  const accountExists = allAccounts.some((a) => a.user.email === email);
68
85
  if (!accountExists) {
69
- throw new error_1.FirebaseError(`Account ${email} does not exist, ${(options === null || options === void 0 ? void 0 : options.mcp)
86
+ throw new error_1.FirebaseError(`Account ${email} does not exist, ${options?.mcp
70
87
  ? `use the 'firebase_get_environment' tool to see available accounts or instruct the user to use the 'firebase login:add' terminal command to add a new account.`
71
88
  : `run "${clc.bold("firebase login:list")} to see valid accounts`}`);
72
89
  }
73
90
  }
74
- exports.assertAccount = assertAccount;
75
91
  function setActiveAccount(options, account) {
76
92
  if (account.tokens.refresh_token) {
77
93
  setRefreshToken(account.tokens.refresh_token);
@@ -79,11 +95,9 @@ function setActiveAccount(options, account) {
79
95
  options.user = account.user;
80
96
  options.tokens = account.tokens;
81
97
  }
82
- exports.setActiveAccount = setActiveAccount;
83
98
  function setRefreshToken(token) {
84
99
  apiv2.setRefreshToken(token);
85
100
  }
86
- exports.setRefreshToken = setRefreshToken;
87
101
  function selectAccount(account, projectRoot) {
88
102
  const defaultUser = getProjectDefaultAccount(projectRoot);
89
103
  if (!account) {
@@ -98,7 +112,6 @@ function selectAccount(account, projectRoot) {
98
112
  }
99
113
  throw new error_1.FirebaseError(`Account ${account} not found, run "firebase login:list" to see existing accounts or "firebase login:add" to add a new one`);
100
114
  }
101
- exports.selectAccount = selectAccount;
102
115
  async function loginAdditionalAccount(useLocalhost, email) {
103
116
  const result = await loginGoogle(useLocalhost, email);
104
117
  if (typeof result.user === "string") {
@@ -123,14 +136,12 @@ async function loginAdditionalAccount(useLocalhost, email) {
123
136
  }
124
137
  return newAccount;
125
138
  }
126
- exports.loginAdditionalAccount = loginAdditionalAccount;
127
139
  function setProjectAccount(projectDir, email) {
128
140
  logger_1.logger.debug(`setProjectAccount(${projectDir}, ${email})`);
129
141
  const activeAccounts = configstore_1.configstore.get("activeAccounts") || {};
130
142
  activeAccounts[projectDir] = email;
131
143
  configstore_1.configstore.set("activeAccounts", activeAccounts);
132
144
  }
133
- exports.setProjectAccount = setProjectAccount;
134
145
  function setGlobalDefaultAccount(accountOrEmail) {
135
146
  let account;
136
147
  if (typeof accountOrEmail === "string") {
@@ -151,7 +162,6 @@ function setGlobalDefaultAccount(accountOrEmail) {
151
162
  configstore_1.configstore.set("additionalAccounts", additionalAccounts);
152
163
  }
153
164
  }
154
- exports.setGlobalDefaultAccount = setGlobalDefaultAccount;
155
165
  function open(url) {
156
166
  opn(url).catch((err) => {
157
167
  logger_1.logger.debug("Unable to open URL: " + err.stack);
@@ -294,7 +304,6 @@ function urlsafeBase64(base64string) {
294
304
  return base64string.replace(/\+/g, "-").replace(/=+$/, "").replace(/\//g, "_");
295
305
  }
296
306
  async function loginPrototyper() {
297
- var _a;
298
307
  const authProxyClient = new apiv2.Client({
299
308
  urlPrefix: (0, api_1.authProxyOrigin)(),
300
309
  auth: false,
@@ -302,9 +311,9 @@ async function loginPrototyper() {
302
311
  const sessionId = (0, uuid_1.v4)();
303
312
  const codeVerifier = (0, crypto_1.randomBytes)(32).toString("hex");
304
313
  const codeChallenge = urlsafeBase64((0, crypto_1.createHash)("sha256").update(codeVerifier).digest("base64"));
305
- const attestToken = (_a = (await authProxyClient.post("/attest", {
314
+ const attestToken = (await authProxyClient.post("/attest", {
306
315
  session_id: sessionId,
307
- })).body) === null || _a === void 0 ? void 0 : _a.token;
316
+ })).body?.token;
308
317
  const loginUrl = `${(0, api_1.authProxyOrigin)()}/login?code_challenge=${codeChallenge}&session=${sessionId}&attest=${attestToken}&studio_prototyper=true}`;
309
318
  return {
310
319
  uri: loginUrl,
@@ -321,14 +330,12 @@ async function loginPrototyper() {
321
330
  },
322
331
  };
323
332
  }
324
- exports.loginPrototyper = loginPrototyper;
325
333
  function recordCredentials(creds) {
326
334
  configstore_1.configstore.set("user", creds.user);
327
335
  configstore_1.configstore.set("tokens", creds.tokens);
328
336
  configstore_1.configstore.set("loginScopes", creds.scopes);
329
337
  configstore_1.configstore.delete("session");
330
338
  }
331
- exports.recordCredentials = recordCredentials;
332
339
  async function loginRemotely() {
333
340
  const authProxyClient = new apiv2.Client({
334
341
  urlPrefix: (0, api_1.authProxyOrigin)(),
@@ -433,26 +440,22 @@ async function loginGoogle(localhost, userHint) {
433
440
  const port = await getPort();
434
441
  return await loginWithLocalhostGoogle(port, userHint);
435
442
  }
436
- catch (_a) {
443
+ catch {
437
444
  return await loginRemotely();
438
445
  }
439
446
  }
440
447
  return await loginRemotely();
441
448
  }
442
- exports.loginGoogle = loginGoogle;
443
449
  async function loginGithub() {
444
450
  const port = await getPort();
445
451
  return loginWithLocalhostGitHub(port);
446
452
  }
447
- exports.loginGithub = loginGithub;
448
453
  function findAccountByEmail(email) {
449
454
  return getAllAccounts().find((a) => a.user.email === email);
450
455
  }
451
- exports.findAccountByEmail = findAccountByEmail;
452
456
  function loggedIn() {
453
457
  return !!lastAccessToken;
454
458
  }
455
- exports.loggedIn = loggedIn;
456
459
  function isExpired(tokens) {
457
460
  const hasExpiration = (p) => !!p.expires_at;
458
461
  if (hasExpiration(tokens)) {
@@ -462,33 +465,30 @@ function isExpired(tokens) {
462
465
  return !tokens;
463
466
  }
464
467
  }
465
- exports.isExpired = isExpired;
466
468
  function haveValidTokens(refreshToken, authScopes) {
467
- var _a;
468
- if (!(lastAccessToken === null || lastAccessToken === void 0 ? void 0 : lastAccessToken.access_token)) {
469
+ if (!lastAccessToken?.access_token) {
469
470
  const tokens = configstore_1.configstore.get("tokens");
470
- if (refreshToken === (tokens === null || tokens === void 0 ? void 0 : tokens.refresh_token)) {
471
+ if (refreshToken === tokens?.refresh_token) {
471
472
  lastAccessToken = tokens;
472
473
  }
473
474
  }
474
- const hasTokens = !!(lastAccessToken === null || lastAccessToken === void 0 ? void 0 : lastAccessToken.access_token);
475
- const oldScopesJSON = JSON.stringify(((_a = lastAccessToken === null || lastAccessToken === void 0 ? void 0 : lastAccessToken.scopes) === null || _a === void 0 ? void 0 : _a.sort()) || []);
475
+ const hasTokens = !!lastAccessToken?.access_token;
476
+ const oldScopesJSON = JSON.stringify(lastAccessToken?.scopes?.sort() || []);
476
477
  const newScopesJSON = JSON.stringify(authScopes.sort());
477
478
  const hasSameScopes = oldScopesJSON === newScopesJSON;
478
- const expired = ((lastAccessToken === null || lastAccessToken === void 0 ? void 0 : lastAccessToken.expires_at) || 0) < Date.now() + FIFTEEN_MINUTES_IN_MS;
479
+ const expired = (lastAccessToken?.expires_at || 0) < Date.now() + FIFTEEN_MINUTES_IN_MS;
479
480
  const valid = hasTokens && hasSameScopes && !expired;
480
481
  if (hasTokens) {
481
- logger_1.logger.debug(`Checked if tokens are valid: ${valid}, expires at: ${lastAccessToken === null || lastAccessToken === void 0 ? void 0 : lastAccessToken.expires_at}`);
482
+ logger_1.logger.debug(`Checked if tokens are valid: ${valid}, expires at: ${lastAccessToken?.expires_at}`);
482
483
  }
483
484
  else {
484
485
  logger_1.logger.debug("No OAuth tokens found");
485
486
  }
486
487
  return valid;
487
488
  }
488
- exports.haveValidTokens = haveValidTokens;
489
489
  function deleteAccount(account) {
490
490
  const defaultAccount = getGlobalDefaultAccount();
491
- if (account.user.email === (defaultAccount === null || defaultAccount === void 0 ? void 0 : defaultAccount.user.email)) {
491
+ if (account.user.email === defaultAccount?.user.email) {
492
492
  configstore_1.configstore.delete("user");
493
493
  configstore_1.configstore.delete("tokens");
494
494
  configstore_1.configstore.delete("usage");
@@ -507,7 +507,7 @@ function deleteAccount(account) {
507
507
  }
508
508
  function updateAccount(account) {
509
509
  const defaultAccount = getGlobalDefaultAccount();
510
- if (account.user.email === (defaultAccount === null || defaultAccount === void 0 ? void 0 : defaultAccount.user.email)) {
510
+ if (account.user.email === defaultAccount?.user.email) {
511
511
  configstore_1.configstore.set("user", account.user);
512
512
  configstore_1.configstore.set("tokens", account.tokens);
513
513
  }
@@ -530,7 +530,6 @@ function logoutCurrentSession(refreshToken) {
530
530
  deleteAccount(account);
531
531
  }
532
532
  async function refreshTokens(refreshToken, authScopes) {
533
- var _a, _b;
534
533
  logger_1.logger.debug("> refreshing access token with scopes:", JSON.stringify(authScopes));
535
534
  try {
536
535
  const client = new apiv2.Client({ urlPrefix: (0, api_1.googleOrigin)(), auth: false });
@@ -581,7 +580,7 @@ async function refreshTokens(refreshToken, authScopes) {
581
580
  return lastAccessToken;
582
581
  }
583
582
  catch (err) {
584
- if (((_b = (_a = err === null || err === void 0 ? void 0 : err.context) === null || _a === void 0 ? void 0 : _a.body) === null || _b === void 0 ? void 0 : _b.error) === "invalid_scope") {
583
+ if (err?.context?.body?.error === "invalid_scope") {
585
584
  throw new error_1.FirebaseError("This command requires new authorization scopes not granted to your current session. Please run " +
586
585
  clc.bold("firebase login --reauth") +
587
586
  "\n\n" +
@@ -608,9 +607,8 @@ async function getAccessToken(refreshToken, authScopes) {
608
607
  throw new error_1.FirebaseError("Unable to getAccessToken");
609
608
  }
610
609
  }
611
- exports.getAccessToken = getAccessToken;
612
610
  async function logout(refreshToken) {
613
- if ((lastAccessToken === null || lastAccessToken === void 0 ? void 0 : lastAccessToken.refresh_token) === refreshToken) {
611
+ if (lastAccessToken?.refresh_token === refreshToken) {
614
612
  lastAccessToken = undefined;
615
613
  }
616
614
  logoutCurrentSession(refreshToken);
@@ -626,10 +624,8 @@ async function logout(refreshToken) {
626
624
  });
627
625
  }
628
626
  }
629
- exports.logout = logout;
630
627
  function addAdditionalAccount(account) {
631
628
  const additionalAccounts = getAdditionalAccounts();
632
629
  additionalAccounts.push(account);
633
630
  configstore_1.configstore.set("additionalAccounts", additionalAccounts);
634
631
  }
635
- exports.addAdditionalAccount = addAdditionalAccount;
package/lib/bin/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cli = void 0;
3
+ exports.cli = cli;
4
4
  const updateNotifierPkg = require("update-notifier-cjs");
5
5
  const clc = require("colorette");
6
6
  const marked_terminal_1 = require("marked-terminal");
@@ -39,7 +39,7 @@ function cli(pkg) {
39
39
  (0, experiments_1.enableExperimentsFromCliEnvVariable)();
40
40
  (0, fetchMOTD_1.fetchMOTD)();
41
41
  process.on("exit", (code) => {
42
- code = process.exitCode || code;
42
+ code = typeof process.exitCode === "number" ? process.exitCode : code;
43
43
  if (!process.env.DEBUG && code < 2 && fsutils.fileExistsSync(logFilename)) {
44
44
  fs.unlinkSync(logFilename);
45
45
  }
@@ -123,4 +123,3 @@ function cli(pkg) {
123
123
  cmd = client.cli.parse(process.argv);
124
124
  }
125
125
  }
126
- exports.cli = cli;
package/lib/bin/mcp.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.mcp = void 0;
4
+ exports.mcp = mcp;
5
5
  const path_1 = require("path");
6
6
  const util_1 = require("util");
7
7
  const logger_1 = require("../logger");
@@ -99,4 +99,3 @@ async function mcp() {
99
99
  if (process.stdin.isTTY)
100
100
  process.stderr.write(STARTUP_MESSAGE);
101
101
  }
102
- exports.mcp = mcp;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkMinRequiredVersion = void 0;
3
+ exports.checkMinRequiredVersion = checkMinRequiredVersion;
4
4
  const semver = require("semver");
5
5
  const configstore_1 = require("./configstore");
6
6
  const error_1 = require("./error");
@@ -11,4 +11,3 @@ function checkMinRequiredVersion(options, key) {
11
11
  throw new error_1.FirebaseError(`This command requires at least version ${minVersion} of the CLI to use. To update to the latest version using npm, run \`npm install -g firebase-tools\`. For other CLI management options, see https://firebase.google.com/docs/cli#update-cli`);
12
12
  }
13
13
  }
14
- exports.checkMinRequiredVersion = checkMinRequiredVersion;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkValidTargetFilters = void 0;
3
+ exports.checkValidTargetFilters = checkValidTargetFilters;
4
4
  const deploy_1 = require("./commands/deploy");
5
5
  const error_1 = require("./error");
6
6
  function targetsForTypes(only, ...types) {
@@ -51,4 +51,3 @@ async function checkValidTargetFilters(options) {
51
51
  return resolve();
52
52
  });
53
53
  }
54
- exports.checkValidTargetFilters = checkValidTargetFilters;
package/lib/command.js CHANGED
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateProjectId = exports.Command = exports.isCommandModule = void 0;
3
+ exports.Command = void 0;
4
+ exports.isCommandModule = isCommandModule;
5
+ exports.validateProjectId = validateProjectId;
4
6
  const clc = require("colorette");
5
7
  const path = require("node:path");
6
8
  const lodash_1 = require("lodash");
@@ -20,7 +22,6 @@ const env_1 = require("./env");
20
22
  function isCommandModule(value) {
21
23
  return typeof value === "function" && typeof value.load === "function";
22
24
  }
23
- exports.isCommandModule = isCommandModule;
24
25
  class Command {
25
26
  constructor(cmd) {
26
27
  this.cmd = cmd;
@@ -195,7 +196,6 @@ class Command {
195
196
  }
196
197
  }
197
198
  async applyRC(options) {
198
- var _a;
199
199
  const rc = (0, rc_1.loadRC)(options);
200
200
  options.rc = rc;
201
201
  let activeProject = this.configstoreProject(options.projectRoot || process.cwd());
@@ -203,7 +203,7 @@ class Command {
203
203
  if ((0, env_1.isFirebaseStudio)() && !options.project && !isUseCommand) {
204
204
  activeProject = await (0, studio_1.reconcileStudioFirebaseProject)(options, activeProject);
205
205
  }
206
- options.project = (_a = options.project) !== null && _a !== void 0 ? _a : activeProject;
206
+ options.project = options.project ?? activeProject;
207
207
  if (options.config && !options.project) {
208
208
  options.project = options.config.defaults.project;
209
209
  }
@@ -223,8 +223,7 @@ class Command {
223
223
  }
224
224
  }
225
225
  configstoreProject(dir) {
226
- var _a;
227
- const projectMap = (_a = configstore_1.configstore.get("activeProjects")) !== null && _a !== void 0 ? _a : {};
226
+ const projectMap = configstore_1.configstore.get("activeProjects") ?? {};
228
227
  let currentDir = path.resolve(dir);
229
228
  while (true) {
230
229
  if (projectMap[currentDir]) {
@@ -238,8 +237,7 @@ class Command {
238
237
  }
239
238
  }
240
239
  async resolveProjectIdentifiers(options) {
241
- var _a;
242
- if ((_a = options.project) === null || _a === void 0 ? void 0 : _a.match(/^\d+$/)) {
240
+ if (options.project?.match(/^\d+$/)) {
243
241
  await (0, requireAuth_1.requireAuth)(options);
244
242
  const { projectId, projectNumber } = await (0, projects_1.getProject)(options.project);
245
243
  options.projectId = projectId;
@@ -284,4 +282,3 @@ function validateProjectId(project) {
284
282
  throw new error_1.FirebaseError(invalidMessage);
285
283
  }
286
284
  }
287
- exports.validateProjectId = validateProjectId;
@@ -34,7 +34,6 @@ exports.command = new command_1.Command("appdistribution:testers:list [group]")
34
34
  return { testers };
35
35
  });
36
36
  function printTestersTable(testers) {
37
- var _a, _b;
38
37
  const tableHead = ["Name", "Display Name", "Last Activity Time", "Groups"];
39
38
  const table = new Table({
40
39
  head: tableHead,
@@ -42,11 +41,11 @@ function printTestersTable(testers) {
42
41
  });
43
42
  for (const tester of testers) {
44
43
  const name = tester.name.split("/").pop();
45
- const groups = ((_a = tester.groups) !== null && _a !== void 0 ? _a : [])
44
+ const groups = (tester.groups ?? [])
46
45
  .map((grp) => grp.split("/").pop())
47
46
  .sort()
48
47
  .join(";");
49
- table.push([name, (_b = tester.displayName) !== null && _b !== void 0 ? _b : "", tester.lastActivityTime.toString(), groups]);
48
+ table.push([name, tester.displayName ?? "", tester.lastActivityTime.toString(), groups]);
50
49
  }
51
50
  logger_1.logger.info(table.toString());
52
51
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.printBackendsTable = exports.command = void 0;
3
+ exports.command = void 0;
4
+ exports.printBackendsTable = printBackendsTable;
4
5
  const command_1 = require("../command");
5
6
  const utils_1 = require("../utils");
6
7
  const error_1 = require("../error");
@@ -15,7 +16,6 @@ exports.command = new command_1.Command("apphosting:backends:list")
15
16
  .before(requireAuth_1.requireAuth)
16
17
  .before(apphosting.ensureApiEnabled)
17
18
  .action(async (options) => {
18
- var _a;
19
19
  const projectId = (0, projectUtils_1.needProjectId)(options);
20
20
  let backendRes;
21
21
  try {
@@ -24,12 +24,11 @@ exports.command = new command_1.Command("apphosting:backends:list")
24
24
  catch (err) {
25
25
  throw new error_1.FirebaseError(`Unable to list backends present for project: ${projectId}. Please check the parameters you have provided.`, { original: err });
26
26
  }
27
- const backends = (_a = backendRes.backends) !== null && _a !== void 0 ? _a : [];
27
+ const backends = backendRes.backends ?? [];
28
28
  printBackendsTable(backends);
29
29
  return backends;
30
30
  });
31
31
  function printBackendsTable(backends) {
32
- var _a, _b, _c;
33
32
  const table = new Table({
34
33
  head: TABLE_HEAD,
35
34
  style: { head: ["green"] },
@@ -38,7 +37,7 @@ function printBackendsTable(backends) {
38
37
  const { location, id } = apphosting.parseBackendName(backend.name);
39
38
  table.push([
40
39
  id,
41
- (_c = (_b = (_a = backend.codebase) === null || _a === void 0 ? void 0 : _a.repository) === null || _b === void 0 ? void 0 : _b.split("/").pop()) !== null && _c !== void 0 ? _c : "",
40
+ backend.codebase?.repository?.split("/").pop() ?? "",
42
41
  backend.uri.startsWith("https:") ? backend.uri : "https://" + backend.uri,
43
42
  location,
44
43
  (0, utils_1.datetimeString)(new Date(backend.updateTime)),
@@ -46,4 +45,3 @@ function printBackendsTable(backends) {
46
45
  }
47
46
  logger_1.logger.info(table.toString());
48
47
  }
49
- exports.printBackendsTable = printBackendsTable;
@@ -15,15 +15,14 @@ exports.command = new command_1.Command("apphosting:builds:create <backendId>")
15
15
  .before(requireAuth_1.requireAuth)
16
16
  .before(apphosting.ensureApiEnabled)
17
17
  .action(async (backendId, options) => {
18
- var _a, _b;
19
18
  const projectId = (0, projectUtils_1.needProjectId)(options);
20
19
  if (options.location !== undefined) {
21
20
  (0, utils_1.logWarning)("--location is being removed in the next major release.");
22
21
  }
23
- const location = (_a = options.location) !== null && _a !== void 0 ? _a : "us-central1";
22
+ const location = options.location ?? "us-central1";
24
23
  const buildId = options.buildId ||
25
24
  (await apphosting.getNextRolloutId(projectId, location, backendId));
26
- const branch = (_b = options.branch) !== null && _b !== void 0 ? _b : "main";
25
+ const branch = options.branch ?? "main";
27
26
  const op = await apphosting.createBuild(projectId, location, backendId, buildId, {
28
27
  source: {
29
28
  codebase: {
@@ -13,11 +13,10 @@ exports.command = new command_1.Command("apphosting:builds:get <backendId> <buil
13
13
  .before(requireAuth_1.requireAuth)
14
14
  .before(apphosting.ensureApiEnabled)
15
15
  .action(async (backendId, buildId, options) => {
16
- var _a;
17
16
  if (options.location !== undefined) {
18
17
  (0, utils_1.logWarning)("--location is being removed in the next major release.");
19
18
  }
20
- options.location = (_a = options.location) !== null && _a !== void 0 ? _a : "us-central";
19
+ options.location = options.location ?? "us-central";
21
20
  const projectId = (0, projectUtils_1.needProjectId)(options);
22
21
  const location = options.location;
23
22
  const build = await apphosting.getBuild(projectId, location, backendId, buildId);
@@ -13,12 +13,11 @@ exports.command = new command_1.Command("apphosting:rollouts:list <backendId>")
13
13
  .before(requireAuth_1.requireAuth)
14
14
  .before(apphosting.ensureApiEnabled)
15
15
  .action(async (backendId, options) => {
16
- var _a;
17
16
  if (options.location !== undefined) {
18
17
  (0, utils_1.logWarning)("--location is being removed in the next major release.");
19
18
  }
20
19
  const projectId = (0, projectUtils_1.needProjectId)(options);
21
- const location = (_a = options.location) !== null && _a !== void 0 ? _a : "-";
20
+ const location = options.location ?? "-";
22
21
  const rollouts = await apphosting.listRollouts(projectId, location, backendId);
23
22
  if (rollouts.unreachable) {
24
23
  logger_1.logger.error(`WARNING: the following locations were unreachable: ${rollouts.unreachable.join(", ")}`);
@@ -71,7 +71,7 @@ exports.command = new command_1.Command("apps:init [platform] [appId]")
71
71
  catch (e) {
72
72
  if (e.message.includes("associated with this Firebase project")) {
73
73
  const projectId = (0, projectUtils_1.needProjectId)(options);
74
- await (0, apps_1.sdkInit)(detectedPlatform, Object.assign(Object.assign({}, options), { project: projectId }));
74
+ await (0, apps_1.sdkInit)(detectedPlatform, { ...options, project: projectId });
75
75
  }
76
76
  else {
77
77
  throw e;
@@ -14,7 +14,7 @@ const marked_1 = require("marked");
14
14
  const projectUtils_1 = require("../projectUtils");
15
15
  const utils_1 = require("../utils");
16
16
  const apps_1 = require("../management/apps");
17
- exports.command = new command_1.Command("apptesting:execute <target>")
17
+ exports.command = new command_1.Command("apptesting:wata <target>")
18
18
  .description("Run automated tests written in natural language driven by AI")
19
19
  .option("--app <app_id>", "The app id of your Firebase web app. Optional if the project contains exactly one web app.")
20
20
  .option("--test-file-pattern <pattern>", "Test file pattern. Only tests contained in files that match this pattern will be executed.")
@@ -23,7 +23,6 @@ exports.command = new command_1.Command("apptesting:execute <target>")
23
23
  .before(requireAuth_1.requireAuth)
24
24
  .before(requireConfig_1.requireConfig)
25
25
  .action(async (target, options) => {
26
- var _a, _b;
27
26
  const projectId = (0, projectUtils_1.needProjectId)(options);
28
27
  const apps = await (0, apps_1.listFirebaseApps)(projectId, apps_1.AppPlatform.WEB);
29
28
  (0, apps_1.checkForApps)(apps, apps_1.AppPlatform.WEB);
@@ -39,7 +38,7 @@ exports.command = new command_1.Command("apptesting:execute <target>")
39
38
  throw new error_1.FirebaseError(`Project ${projectId} has multiple apps, must specify a web app id with '--app', you can list available apps with 'firebase apps:list'.`);
40
39
  }
41
40
  }
42
- const testDir = ((_a = options.config.src.apptesting) === null || _a === void 0 ? void 0 : _a.testDir) || "tests";
41
+ const testDir = options.config.src.apptesting?.testDir || "tests";
43
42
  const tests = await (0, parseTestFiles_1.parseTestFiles)(testDir, target, options.testFilePattern, options.testNamePattern);
44
43
  if (!tests.length) {
45
44
  throw new error_1.FirebaseError("No tests found");
@@ -57,7 +56,7 @@ exports.command = new command_1.Command("apptesting:execute <target>")
57
56
  throw ex;
58
57
  }
59
58
  logger_1.logger.info(clc.bold(`\n${clc.white("===")} Running ${pluralizeTests(tests.length)}`));
60
- const invocationId = (_b = invocationOperation.name) === null || _b === void 0 ? void 0 : _b.split("/").pop();
59
+ const invocationId = invocationOperation.name?.split("/").pop();
61
60
  const appWebId = app.webId;
62
61
  const url = (0, utils_1.consoleUrl)(projectId, `/apptesting/app/web:${appWebId}/invocations/${invocationId}`);
63
62
  logger_1.logger.info(await (0, marked_1.marked)(`**Invocation ID:** ${invocationId}`));
@@ -34,7 +34,7 @@ exports.command = new command_1.Command("crashlytics:symbols:upload <symbolFiles
34
34
  };
35
35
  for (const symbolFile of symbolFiles) {
36
36
  utils.logBullet(`Generating symbols for ${symbolFile}`);
37
- const generateArgs = buildArgs(Object.assign(Object.assign({}, jarOptions), { symbolFile }));
37
+ const generateArgs = buildArgs({ ...jarOptions, symbolFile });
38
38
  (0, buildToolsJarHelper_1.runBuildtoolsCommand)(jarFile, generateArgs, debug);
39
39
  utils.logBullet(`Generated symbols for ${symbolFile}`);
40
40
  utils.logBullet(`Output Path: ${jarOptions.cachePath}`);
@@ -44,7 +44,7 @@ exports.command = new command_1.Command("crashlytics:symbols:upload <symbolFiles
44
44
  return;
45
45
  }
46
46
  utils.logBullet(`Uploading all generated symbols...`);
47
- const uploadArgs = buildArgs(Object.assign(Object.assign({}, jarOptions), { generate: false }));
47
+ const uploadArgs = buildArgs({ ...jarOptions, generate: false });
48
48
  (0, buildToolsJarHelper_1.runBuildtoolsCommand)(jarFile, uploadArgs, debug);
49
49
  utils.logBullet("Successfully uploaded all symbols");
50
50
  });
@@ -56,12 +56,12 @@ exports.command = new command_1.Command("dataconnect:execute [file] [operationNa
56
56
  }
57
57
  else {
58
58
  const stat = (0, node_fs_1.statSync)(file, { throwIfNoEntry: false });
59
- if (stat === null || stat === void 0 ? void 0 : stat.isFile()) {
59
+ if (stat?.isFile()) {
60
60
  const opDisplay = operationName ? clc.bold(operationName) : "operation";
61
61
  process.stderr.write(`${clc.cyan(`Executing ${opDisplay} in ${clc.bold(file)}`)}${node_os_1.EOL}`);
62
62
  query = await (0, promises_1.readFile)(file, "utf-8");
63
63
  }
64
- else if (stat === null || stat === void 0 ? void 0 : stat.isDirectory()) {
64
+ else if (stat?.isDirectory()) {
65
65
  query = await readQueryFromDir(file);
66
66
  }
67
67
  else {
@@ -119,7 +119,7 @@ exports.command = new command_1.Command("dataconnect:execute [file] [operationNa
119
119
  });
120
120
  }
121
121
  if (status === "INVALID_ARGUMENT" && message.includes("operationName is required")) {
122
- throw new error_1.FirebaseError(err.message + `\nHint: Append <operationName> as an argument to disambiguate.`, Object.assign(Object.assign({}, err), { original: err }));
122
+ throw new error_1.FirebaseError(err.message + `\nHint: Append <operationName> as an argument to disambiguate.`, { ...err, original: err });
123
123
  }
124
124
  }
125
125
  if (err) {
@@ -171,7 +171,7 @@ exports.command = new command_1.Command("dataconnect:execute [file] [operationNa
171
171
  }
172
172
  if (!serviceId) {
173
173
  e = new error_1.FirebaseError(e.message +
174
- `\nHint: Try specifying the ${clc.yellow("--service <serviceId>")} option.`, Object.assign(Object.assign({}, e), { original: e }));
174
+ `\nHint: Try specifying the ${clc.yellow("--service <serviceId>")} option.`, { ...e, original: e });
175
175
  }
176
176
  return Promise.reject(e);
177
177
  });
@@ -74,12 +74,11 @@ exports.command = new command_1.Command("dataconnect:sdk:generate")
74
74
  async function loadAllWithSDKs(projectId, config, options) {
75
75
  const serviceInfos = await (0, load_1.pickServices)(projectId || hub_1.EmulatorHub.MISSING_PROJECT_PLACEHOLDER, config, options.service, options.location);
76
76
  return serviceInfos.filter((serviceInfo) => serviceInfo.connectorInfo.some((c) => {
77
- var _a, _b, _c, _d, _e;
78
- return (((_a = c.connectorYaml.generate) === null || _a === void 0 ? void 0 : _a.javascriptSdk) ||
79
- ((_b = c.connectorYaml.generate) === null || _b === void 0 ? void 0 : _b.kotlinSdk) ||
80
- ((_c = c.connectorYaml.generate) === null || _c === void 0 ? void 0 : _c.swiftSdk) ||
81
- ((_d = c.connectorYaml.generate) === null || _d === void 0 ? void 0 : _d.dartSdk) ||
82
- ((_e = c.connectorYaml.generate) === null || _e === void 0 ? void 0 : _e.adminNodeSdk));
77
+ return (c.connectorYaml.generate?.javascriptSdk ||
78
+ c.connectorYaml.generate?.kotlinSdk ||
79
+ c.connectorYaml.generate?.swiftSdk ||
80
+ c.connectorYaml.generate?.dartSdk ||
81
+ c.connectorYaml.generate?.adminNodeSdk);
83
82
  }));
84
83
  }
85
84
  async function generateSDKsInAll(options, serviceInfosWithSDKs, justRanInit) {