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/logger.js CHANGED
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useConsoleLoggers = exports.useFileLogger = exports.logger = exports.tryStringify = exports.findAvailableLogFile = exports.vsceLogEmitter = void 0;
3
+ exports.logger = exports.vsceLogEmitter = void 0;
4
+ exports.findAvailableLogFile = findAvailableLogFile;
5
+ exports.tryStringify = tryStringify;
6
+ exports.useFileLogger = useFileLogger;
7
+ exports.useConsoleLoggers = useConsoleLoggers;
4
8
  const winston = require("winston");
5
9
  const events_1 = require("events");
6
10
  const path = require("path");
@@ -69,7 +73,6 @@ function findAvailableLogFile() {
69
73
  }
70
74
  throw new Error("Unable to obtain permissions for firebase-debug.log");
71
75
  }
72
- exports.findAvailableLogFile = findAvailableLogFile;
73
76
  function tryStringify(value) {
74
77
  if (typeof value === "string") {
75
78
  return value;
@@ -77,11 +80,10 @@ function tryStringify(value) {
77
80
  try {
78
81
  return JSON.stringify(value);
79
82
  }
80
- catch (_a) {
83
+ catch {
81
84
  return value;
82
85
  }
83
86
  }
84
- exports.tryStringify = tryStringify;
85
87
  const rawLogger = winston.createLogger();
86
88
  rawLogger.add(new winston.transports.Console({
87
89
  silent: true,
@@ -90,7 +92,7 @@ rawLogger.add(new winston.transports.Console({
90
92
  rawLogger.exitOnError = false;
91
93
  exports.logger = maybeUseVSCodeLogger(annotateDebugLines(expandErrors(rawLogger)));
92
94
  function useFileLogger(logFile) {
93
- const logFileName = logFile !== null && logFile !== void 0 ? logFile : findAvailableLogFile();
95
+ const logFileName = logFile ?? findAvailableLogFile();
94
96
  exports.logger.add(new winston.transports.File({
95
97
  level: "debug",
96
98
  filename: logFileName,
@@ -101,7 +103,6 @@ function useFileLogger(logFile) {
101
103
  }));
102
104
  return logFileName;
103
105
  }
104
- exports.useFileLogger = useFileLogger;
105
106
  function useConsoleLoggers() {
106
107
  if (process.env.DEBUG) {
107
108
  exports.logger.add(new winston.transports.Console({
@@ -121,4 +122,3 @@ function useConsoleLoggers() {
121
122
  }));
122
123
  }
123
124
  }
124
- exports.useConsoleLoggers = useConsoleLoggers;
@@ -1,6 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.findIntelligentPathForAndroid = exports.findIntelligentPathForIOS = exports.deleteAppAndroidSha = exports.createAppAndroidSha = exports.listAppAndroidSha = exports.getAppConfig = exports.writeConfigToFile = exports.getAppConfigFile = exports.listFirebaseApps = exports.createWebApp = exports.createAndroidApp = exports.createIosApp = exports.getAppPlatform = exports.ShaCertificateType = exports.AppPlatform = exports.getSdkConfig = exports.checkForApps = exports.getSdkOutputPath = exports.sdkInit = exports.getPlatform = exports.APP_LIST_PAGE_SIZE = void 0;
3
+ exports.ShaCertificateType = exports.AppPlatform = exports.APP_LIST_PAGE_SIZE = void 0;
4
+ exports.getPlatform = getPlatform;
5
+ exports.sdkInit = sdkInit;
6
+ exports.getSdkOutputPath = getSdkOutputPath;
7
+ exports.checkForApps = checkForApps;
8
+ exports.getSdkConfig = getSdkConfig;
9
+ exports.getAppPlatform = getAppPlatform;
10
+ exports.createIosApp = createIosApp;
11
+ exports.createAndroidApp = createAndroidApp;
12
+ exports.createWebApp = createWebApp;
13
+ exports.listFirebaseApps = listFirebaseApps;
14
+ exports.getAppConfigFile = getAppConfigFile;
15
+ exports.writeConfigToFile = writeConfigToFile;
16
+ exports.getAppConfig = getAppConfig;
17
+ exports.listAppAndroidSha = listAppAndroidSha;
18
+ exports.createAppAndroidSha = createAppAndroidSha;
19
+ exports.deleteAppAndroidSha = deleteAppAndroidSha;
20
+ exports.findIntelligentPathForIOS = findIntelligentPathForIOS;
21
+ exports.findIntelligentPathForAndroid = findIntelligentPathForAndroid;
4
22
  const fs = require("fs-extra");
5
23
  const ora = require("ora");
6
24
  const path = require("path");
@@ -63,7 +81,6 @@ https://firebase.google.com/docs/flutter/setup
63
81
  }
64
82
  return targetPlatform;
65
83
  }
66
- exports.getPlatform = getPlatform;
67
84
  async function initiateIosAppCreation(options) {
68
85
  if (!options.nonInteractive) {
69
86
  options.displayName = options.displayName || (await getDisplayName());
@@ -147,7 +164,6 @@ async function sdkInit(appPlatform, options) {
147
164
  }
148
165
  return appData;
149
166
  }
150
- exports.sdkInit = sdkInit;
151
167
  async function getSdkOutputPath(appDir, platform, config) {
152
168
  switch (platform) {
153
169
  case AppPlatform.ANDROID:
@@ -161,7 +177,6 @@ async function getSdkOutputPath(appDir, platform, config) {
161
177
  }
162
178
  throw new error_1.FirebaseError("Platform " + platform.toString() + " is not supported yet.");
163
179
  }
164
- exports.getSdkOutputPath = getSdkOutputPath;
165
180
  function checkForApps(apps, appPlatform) {
166
181
  if (!apps.length) {
167
182
  throw new error_1.FirebaseError(`There are no ${appPlatform === AppPlatform.ANY ? "" : appPlatform + " "}apps ` +
@@ -169,7 +184,6 @@ function checkForApps(apps, appPlatform) {
169
184
  "You can create an app for this project with 'firebase apps:create'");
170
185
  }
171
186
  }
172
- exports.checkForApps = checkForApps;
173
187
  async function selectAppInteractively(apps, appPlatform) {
174
188
  checkForApps(apps, appPlatform);
175
189
  const choices = apps.map((app) => {
@@ -222,7 +236,6 @@ async function getSdkConfig(options, appPlatform, appId) {
222
236
  spinner.succeed();
223
237
  return configData;
224
238
  }
225
- exports.getSdkConfig = getSdkConfig;
226
239
  var AppPlatform;
227
240
  (function (AppPlatform) {
228
241
  AppPlatform["PLATFORM_UNSPECIFIED"] = "PLATFORM_UNSPECIFIED";
@@ -230,13 +243,13 @@ var AppPlatform;
230
243
  AppPlatform["ANDROID"] = "ANDROID";
231
244
  AppPlatform["WEB"] = "WEB";
232
245
  AppPlatform["ANY"] = "ANY";
233
- })(AppPlatform = exports.AppPlatform || (exports.AppPlatform = {}));
246
+ })(AppPlatform || (exports.AppPlatform = AppPlatform = {}));
234
247
  var ShaCertificateType;
235
248
  (function (ShaCertificateType) {
236
249
  ShaCertificateType["SHA_CERTIFICATE_TYPE_UNSPECIFIED"] = "SHA_CERTIFICATE_TYPE_UNSPECIFIED";
237
250
  ShaCertificateType["SHA_1"] = "SHA_1";
238
251
  ShaCertificateType["SHA_256"] = "SHA_256";
239
- })(ShaCertificateType = exports.ShaCertificateType || (exports.ShaCertificateType = {}));
252
+ })(ShaCertificateType || (exports.ShaCertificateType = ShaCertificateType = {}));
240
253
  function getAppPlatform(platform) {
241
254
  switch (platform.toUpperCase()) {
242
255
  case "IOS":
@@ -251,7 +264,6 @@ function getAppPlatform(platform) {
251
264
  throw new error_1.FirebaseError("Unexpected platform. Only iOS, Android, and Web apps are supported");
252
265
  }
253
266
  }
254
- exports.getAppPlatform = getAppPlatform;
255
267
  const apiClient = new apiv2_1.Client({ urlPrefix: (0, api_1.firebaseApiOrigin)(), apiVersion: "v1beta1" });
256
268
  async function createIosApp(projectId, options) {
257
269
  try {
@@ -274,7 +286,6 @@ async function createIosApp(projectId, options) {
274
286
  throw new error_1.FirebaseError(`Failed to create iOS app for project ${projectId}. See firebase-debug.log for more info.`, { exit: 2, original: err });
275
287
  }
276
288
  }
277
- exports.createIosApp = createIosApp;
278
289
  async function createAndroidApp(projectId, options) {
279
290
  try {
280
291
  const response = await apiClient.request({
@@ -299,7 +310,6 @@ async function createAndroidApp(projectId, options) {
299
310
  });
300
311
  }
301
312
  }
302
- exports.createAndroidApp = createAndroidApp;
303
313
  async function createWebApp(projectId, options) {
304
314
  try {
305
315
  const response = await apiClient.request({
@@ -321,7 +331,6 @@ async function createWebApp(projectId, options) {
321
331
  throw new error_1.FirebaseError(`Failed to create Web app for project ${projectId}. See firebase-debug.log for more info.`, { exit: 2, original: err });
322
332
  }
323
333
  }
324
- exports.createWebApp = createWebApp;
325
334
  function getListAppsResourceString(projectId, platform) {
326
335
  let resourceSuffix;
327
336
  switch (platform) {
@@ -358,7 +367,7 @@ async function listFirebaseApps(projectId, platform, pageSize = exports.APP_LIST
358
367
  timeout: TIMEOUT_MILLIS,
359
368
  });
360
369
  if (response.body.apps) {
361
- const appsOnPage = response.body.apps.map((app) => (app.platform ? app : Object.assign(Object.assign({}, app), { platform })));
370
+ const appsOnPage = response.body.apps.map((app) => (app.platform ? app : { ...app, platform }));
362
371
  apps.push(...appsOnPage);
363
372
  }
364
373
  nextPageToken = response.body.nextPageToken;
@@ -374,7 +383,6 @@ async function listFirebaseApps(projectId, platform, pageSize = exports.APP_LIST
374
383
  });
375
384
  }
376
385
  }
377
- exports.listFirebaseApps = listFirebaseApps;
378
386
  function getAppConfigResourceString(appId, platform) {
379
387
  let platformResource;
380
388
  switch (platform) {
@@ -410,7 +418,6 @@ function parseConfigFromResponse(responseBody, platform) {
410
418
  function getAppConfigFile(config, platform) {
411
419
  return parseConfigFromResponse(config, platform);
412
420
  }
413
- exports.getAppConfigFile = getAppConfigFile;
414
421
  async function writeConfigToFile(filename, nonInteractive, fileContents) {
415
422
  if (fs.existsSync(filename)) {
416
423
  if (nonInteractive) {
@@ -424,7 +431,6 @@ async function writeConfigToFile(filename, nonInteractive, fileContents) {
424
431
  await fs.writeFile(filename, fileContents);
425
432
  return true;
426
433
  }
427
- exports.writeConfigToFile = writeConfigToFile;
428
434
  async function getAppConfig(appId, platform) {
429
435
  try {
430
436
  const response = await apiClient.request({
@@ -442,7 +448,6 @@ async function getAppConfig(appId, platform) {
442
448
  });
443
449
  }
444
450
  }
445
- exports.getAppConfig = getAppConfig;
446
451
  async function listAppAndroidSha(projectId, appId) {
447
452
  const shaCertificates = [];
448
453
  try {
@@ -465,7 +470,6 @@ async function listAppAndroidSha(projectId, appId) {
465
470
  });
466
471
  }
467
472
  }
468
- exports.listAppAndroidSha = listAppAndroidSha;
469
473
  async function createAppAndroidSha(projectId, appId, options) {
470
474
  try {
471
475
  const response = await apiClient.request({
@@ -485,7 +489,6 @@ async function createAppAndroidSha(projectId, appId, options) {
485
489
  });
486
490
  }
487
491
  }
488
- exports.createAppAndroidSha = createAppAndroidSha;
489
492
  async function deleteAppAndroidSha(projectId, appId, shaId) {
490
493
  try {
491
494
  await apiClient.request({
@@ -502,7 +505,6 @@ async function deleteAppAndroidSha(projectId, appId, shaId) {
502
505
  });
503
506
  }
504
507
  }
505
- exports.deleteAppAndroidSha = deleteAppAndroidSha;
506
508
  async function findIntelligentPathForIOS(appDir, options) {
507
509
  const currentFiles = await fs.readdir(appDir, { withFileTypes: true });
508
510
  for (let i = 0; i < currentFiles.length; i++) {
@@ -531,7 +533,6 @@ async function findIntelligentPathForIOS(appDir, options) {
531
533
  }
532
534
  return outputPath;
533
535
  }
534
- exports.findIntelligentPathForIOS = findIntelligentPathForIOS;
535
536
  async function findIntelligentPathForAndroid(appDir, options) {
536
537
  const paths = appDir.split("/");
537
538
  if (paths[0] === "app") {
@@ -563,4 +564,3 @@ async function findIntelligentPathForAndroid(appDir, options) {
563
564
  return module;
564
565
  }
565
566
  }
566
- exports.findIntelligentPathForAndroid = findIntelligentPathForAndroid;
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.listDatabaseInstances = exports.parseDatabaseLocation = exports.checkInstanceNameAvailable = exports.createInstance = exports.getDatabaseInstanceDetails = exports.populateInstanceDetails = exports.DatabaseLocation = exports.DatabaseInstanceState = exports.DatabaseInstanceType = exports.APP_LIST_PAGE_SIZE = exports.MGMT_API_VERSION = void 0;
3
+ exports.DatabaseLocation = exports.DatabaseInstanceState = exports.DatabaseInstanceType = exports.APP_LIST_PAGE_SIZE = exports.MGMT_API_VERSION = void 0;
4
+ exports.populateInstanceDetails = populateInstanceDetails;
5
+ exports.getDatabaseInstanceDetails = getDatabaseInstanceDetails;
6
+ exports.createInstance = createInstance;
7
+ exports.checkInstanceNameAvailable = checkInstanceNameAvailable;
8
+ exports.parseDatabaseLocation = parseDatabaseLocation;
9
+ exports.listDatabaseInstances = listDatabaseInstances;
4
10
  const apiv2_1 = require("../apiv2");
5
11
  const constants_1 = require("../emulator/constants");
6
12
  const error_1 = require("../error");
@@ -16,27 +22,26 @@ var DatabaseInstanceType;
16
22
  DatabaseInstanceType["DATABASE_INSTANCE_TYPE_UNSPECIFIED"] = "unspecified";
17
23
  DatabaseInstanceType["DEFAULT_DATABASE"] = "default_database";
18
24
  DatabaseInstanceType["USER_DATABASE"] = "user_database";
19
- })(DatabaseInstanceType = exports.DatabaseInstanceType || (exports.DatabaseInstanceType = {}));
25
+ })(DatabaseInstanceType || (exports.DatabaseInstanceType = DatabaseInstanceType = {}));
20
26
  var DatabaseInstanceState;
21
27
  (function (DatabaseInstanceState) {
22
28
  DatabaseInstanceState["LIFECYCLE_STATE_UNSPECIFIED"] = "unspecified";
23
29
  DatabaseInstanceState["ACTIVE"] = "active";
24
30
  DatabaseInstanceState["DISABLED"] = "disabled";
25
31
  DatabaseInstanceState["DELETED"] = "deleted";
26
- })(DatabaseInstanceState = exports.DatabaseInstanceState || (exports.DatabaseInstanceState = {}));
32
+ })(DatabaseInstanceState || (exports.DatabaseInstanceState = DatabaseInstanceState = {}));
27
33
  var DatabaseLocation;
28
34
  (function (DatabaseLocation) {
29
35
  DatabaseLocation["US_CENTRAL1"] = "us-central1";
30
36
  DatabaseLocation["EUROPE_WEST1"] = "europe-west1";
31
37
  DatabaseLocation["ASIA_SOUTHEAST1"] = "asia-southeast1";
32
38
  DatabaseLocation["ANY"] = "-";
33
- })(DatabaseLocation = exports.DatabaseLocation || (exports.DatabaseLocation = {}));
39
+ })(DatabaseLocation || (exports.DatabaseLocation = DatabaseLocation = {}));
34
40
  const apiClient = new apiv2_1.Client({ urlPrefix: (0, api_1.rtdbManagementOrigin)(), apiVersion: exports.MGMT_API_VERSION });
35
41
  async function populateInstanceDetails(options) {
36
42
  options.instanceDetails = await getDatabaseInstanceDetails(options.project, options.instance);
37
43
  return Promise.resolve();
38
44
  }
39
- exports.populateInstanceDetails = populateInstanceDetails;
40
45
  async function getDatabaseInstanceDetails(projectId, instanceName) {
41
46
  try {
42
47
  const response = await apiClient.request({
@@ -65,7 +70,6 @@ async function getDatabaseInstanceDetails(projectId, instanceName) {
65
70
  });
66
71
  }
67
72
  }
68
- exports.getDatabaseInstanceDetails = getDatabaseInstanceDetails;
69
73
  async function createInstance(projectId, instanceName, location, databaseType) {
70
74
  try {
71
75
  const response = await apiClient.request({
@@ -85,9 +89,7 @@ async function createInstance(projectId, instanceName, location, databaseType) {
85
89
  });
86
90
  }
87
91
  }
88
- exports.createInstance = createInstance;
89
92
  async function checkInstanceNameAvailable(projectId, instanceName, databaseType, location) {
90
- var _a, _b, _c;
91
93
  if (!location) {
92
94
  location = DatabaseLocation.US_CENTRAL1;
93
95
  }
@@ -104,7 +106,7 @@ async function checkInstanceNameAvailable(projectId, instanceName, databaseType,
104
106
  catch (err) {
105
107
  logger_1.logger.debug(`Invalid Realtime Database instance name: ${instanceName}.${err.message ? " " + err.message : ""}`);
106
108
  const errBody = err.context.body.error;
107
- if ((_c = (_b = (_a = errBody === null || errBody === void 0 ? void 0 : errBody.details) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.metadata) === null || _c === void 0 ? void 0 : _c.suggested_database_ids) {
109
+ if (errBody?.details?.[0]?.metadata?.suggested_database_ids) {
108
110
  return {
109
111
  available: false,
110
112
  suggestedIds: errBody.details[0].metadata.suggested_database_ids.split(","),
@@ -115,7 +117,6 @@ async function checkInstanceNameAvailable(projectId, instanceName, databaseType,
115
117
  });
116
118
  }
117
119
  }
118
- exports.checkInstanceNameAvailable = checkInstanceNameAvailable;
119
120
  function parseDatabaseLocation(location, defaultLocation) {
120
121
  if (!location) {
121
122
  return defaultLocation;
@@ -133,7 +134,6 @@ function parseDatabaseLocation(location, defaultLocation) {
133
134
  throw new error_1.FirebaseError(`Unexpected location value: ${location}. Only us-central1, europe-west1, and asia-southeast1 locations are supported`);
134
135
  }
135
136
  }
136
- exports.parseDatabaseLocation = parseDatabaseLocation;
137
137
  async function listDatabaseInstances(projectId, location, pageSize = exports.APP_LIST_PAGE_SIZE) {
138
138
  const instances = [];
139
139
  try {
@@ -164,7 +164,6 @@ async function listDatabaseInstances(projectId, location, pageSize = exports.APP
164
164
  });
165
165
  }
166
166
  }
167
- exports.listDatabaseInstances = listDatabaseInstances;
168
167
  function convertDatabaseInstance(serverInstance) {
169
168
  if (!serverInstance.name) {
170
169
  throw new error_1.FirebaseError(`DatabaseInstance response is missing field "name"`);
@@ -1,6 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkFirebaseEnabledForCloudProject = exports.getProject = exports.getFirebaseProject = exports.checkAndRecommendProjectId = exports.listFirebaseProjects = exports.getAvailableCloudProjectPage = exports.getFirebaseProjectPage = exports.addFirebaseToCloudProject = exports.createCloudProject = exports.promptAvailableProjectId = exports.selectProjectInteractively = exports.getOrPromptProject = exports.addFirebaseToCloudProjectAndLog = exports.createFirebaseProjectAndLog = exports.promptProjectCreation = exports.ProjectParentResourceType = void 0;
3
+ exports.ProjectParentResourceType = void 0;
4
+ exports.promptProjectCreation = promptProjectCreation;
5
+ exports.createFirebaseProjectAndLog = createFirebaseProjectAndLog;
6
+ exports.addFirebaseToCloudProjectAndLog = addFirebaseToCloudProjectAndLog;
7
+ exports.getOrPromptProject = getOrPromptProject;
8
+ exports.selectProjectInteractively = selectProjectInteractively;
9
+ exports.promptAvailableProjectId = promptAvailableProjectId;
10
+ exports.createCloudProject = createCloudProject;
11
+ exports.addFirebaseToCloudProject = addFirebaseToCloudProject;
12
+ exports.getFirebaseProjectPage = getFirebaseProjectPage;
13
+ exports.getAvailableCloudProjectPage = getAvailableCloudProjectPage;
14
+ exports.listFirebaseProjects = listFirebaseProjects;
15
+ exports.checkAndRecommendProjectId = checkAndRecommendProjectId;
16
+ exports.getFirebaseProject = getFirebaseProject;
17
+ exports.getProject = getProject;
18
+ exports.checkFirebaseEnabledForCloudProject = checkFirebaseEnabledForCloudProject;
4
19
  const clc = require("colorette");
5
20
  const ora = require("ora");
6
21
  const apiv2_1 = require("../apiv2");
@@ -21,52 +36,52 @@ var ProjectParentResourceType;
21
36
  (function (ProjectParentResourceType) {
22
37
  ProjectParentResourceType["ORGANIZATION"] = "organization";
23
38
  ProjectParentResourceType["FOLDER"] = "folder";
24
- })(ProjectParentResourceType = exports.ProjectParentResourceType || (exports.ProjectParentResourceType = {}));
39
+ })(ProjectParentResourceType || (exports.ProjectParentResourceType = ProjectParentResourceType = {}));
25
40
  async function promptProjectCreation(options) {
26
- var _a, _b;
27
- const projectId = (_a = options.projectId) !== null && _a !== void 0 ? _a : (await prompt.input({
28
- message: "Please specify a unique project id " +
29
- `(${clc.yellow("warning")}: cannot be modified afterward) [6-30 characters]:\n`,
30
- validate: async (projectId) => {
31
- if (projectId.length < 6) {
32
- return "Project ID must be at least 6 characters long";
33
- }
34
- else if (projectId.length > 30) {
35
- return "Project ID cannot be longer than 30 characters";
36
- }
37
- if (constants_1.Constants.isDemoProject(projectId)) {
38
- return "Project ID cannot starts with demo-";
39
- }
40
- try {
41
- const { isAvailable, suggestedProjectId } = await checkAndRecommendProjectId(projectId);
42
- if (!isAvailable && suggestedProjectId) {
43
- return `Project ID is taken or unavailable. Try ${clc.bold(suggestedProjectId)}.`;
41
+ const projectId = options.projectId ??
42
+ (await prompt.input({
43
+ message: "Please specify a unique project id " +
44
+ `(${clc.yellow("warning")}: cannot be modified afterward) [6-30 characters]:\n`,
45
+ validate: async (projectId) => {
46
+ if (projectId.length < 6) {
47
+ return "Project ID must be at least 6 characters long";
48
+ }
49
+ else if (projectId.length > 30) {
50
+ return "Project ID cannot be longer than 30 characters";
51
+ }
52
+ if (constants_1.Constants.isDemoProject(projectId)) {
53
+ return "Project ID cannot starts with demo-";
54
+ }
55
+ try {
56
+ const { isAvailable, suggestedProjectId } = await checkAndRecommendProjectId(projectId);
57
+ if (!isAvailable && suggestedProjectId) {
58
+ return `Project ID is taken or unavailable. Try ${clc.bold(suggestedProjectId)}.`;
59
+ }
60
+ }
61
+ catch (error) {
62
+ logger_1.logger.debug(`Couldn't check if project ID ${projectId} is available. Original error: ${error}`);
44
63
  }
45
- }
46
- catch (error) {
47
- logger_1.logger.debug(`Couldn't check if project ID ${projectId} is available. Original error: ${error}`);
48
- }
49
- return true;
50
- },
51
- }));
52
- const displayName = (_b = options.displayName) !== null && _b !== void 0 ? _b : (await prompt.input({
53
- default: projectId,
54
- message: "What would you like to call your project? (defaults to your project ID)",
55
- validate: (displayName) => {
56
- if (displayName.length < 4) {
57
- return "Project name must be at least 4 characters long";
58
- }
59
- else if (displayName.length > 30) {
60
- return "Project name cannot be longer than 30 characters";
61
- }
62
- else {
63
64
  return true;
64
- }
65
- },
66
- }));
65
+ },
66
+ }));
67
+ const displayName = options.displayName ??
68
+ (await prompt.input({
69
+ default: projectId,
70
+ message: "What would you like to call your project? (defaults to your project ID)",
71
+ validate: (displayName) => {
72
+ if (displayName.length < 4) {
73
+ return "Project name must be at least 4 characters long";
74
+ }
75
+ else if (displayName.length > 30) {
76
+ return "Project name cannot be longer than 30 characters";
77
+ }
78
+ else {
79
+ return true;
80
+ }
81
+ },
82
+ }));
67
83
  return { projectId, displayName };
68
84
  }
69
- exports.promptProjectCreation = promptProjectCreation;
70
85
  const firebaseAPIClient = new apiv2_1.Client({
71
86
  urlPrefix: api.firebaseApiOrigin(),
72
87
  auth: true,
@@ -93,7 +108,6 @@ async function createFirebaseProjectAndLog(projectId, options) {
93
108
  }
94
109
  return addFirebaseToCloudProjectAndLog(projectId);
95
110
  }
96
- exports.createFirebaseProjectAndLog = createFirebaseProjectAndLog;
97
111
  async function addFirebaseToCloudProjectAndLog(projectId) {
98
112
  let projectInfo;
99
113
  const spinner = ora("Adding Firebase resources to Google Cloud Platform project").start();
@@ -108,7 +122,6 @@ async function addFirebaseToCloudProjectAndLog(projectId) {
108
122
  logNewFirebaseProjectInfo(projectInfo);
109
123
  return projectInfo;
110
124
  }
111
- exports.addFirebaseToCloudProjectAndLog = addFirebaseToCloudProjectAndLog;
112
125
  function logNewFirebaseProjectInfo(projectInfo) {
113
126
  logger_1.logger.info("");
114
127
  if (process.platform === "win32") {
@@ -133,7 +146,6 @@ async function getOrPromptProject(options) {
133
146
  }
134
147
  return selectProjectInteractively();
135
148
  }
136
- exports.getOrPromptProject = getOrPromptProject;
137
149
  async function selectProjectInteractively(pageSize = MAXIMUM_PROMPT_LIST) {
138
150
  const { projects, nextPageToken } = await getFirebaseProjectPage(pageSize);
139
151
  if (projects.length === 0) {
@@ -145,7 +157,6 @@ async function selectProjectInteractively(pageSize = MAXIMUM_PROMPT_LIST) {
145
157
  }
146
158
  return selectProjectFromList(projects);
147
159
  }
148
- exports.selectProjectInteractively = selectProjectInteractively;
149
160
  async function selectProjectByPrompting() {
150
161
  const projectId = await prompt.input("Please input the project ID you would like to use:");
151
162
  if (!projectId) {
@@ -210,7 +221,6 @@ async function promptAvailableProjectId() {
210
221
  });
211
222
  }
212
223
  }
213
- exports.promptAvailableProjectId = promptAvailableProjectId;
214
224
  async function createCloudProject(projectId, options) {
215
225
  try {
216
226
  const data = {
@@ -247,7 +257,6 @@ async function createCloudProject(projectId, options) {
247
257
  }
248
258
  }
249
259
  }
250
- exports.createCloudProject = createCloudProject;
251
260
  async function addFirebaseToCloudProject(projectId) {
252
261
  try {
253
262
  const response = await firebaseAPIClient.request({
@@ -268,7 +277,6 @@ async function addFirebaseToCloudProject(projectId) {
268
277
  throw new error_1.FirebaseError("Failed to add Firebase to Google Cloud Platform project. See firebase-debug.log for more info.", { exit: 2, original: err });
269
278
  }
270
279
  }
271
- exports.addFirebaseToCloudProject = addFirebaseToCloudProject;
272
280
  async function getProjectPage(apiResource, options) {
273
281
  const queryParams = {
274
282
  pageSize: `${options.pageSize}`,
@@ -305,7 +313,6 @@ async function getFirebaseProjectPage(pageSize = PROJECT_LIST_PAGE_SIZE, pageTok
305
313
  }
306
314
  return projectPage;
307
315
  }
308
- exports.getFirebaseProjectPage = getFirebaseProjectPage;
309
316
  async function getAvailableCloudProjectPage(pageSize = PROJECT_LIST_PAGE_SIZE, pageToken) {
310
317
  try {
311
318
  return await getProjectPage("/availableProjects", {
@@ -319,7 +326,6 @@ async function getAvailableCloudProjectPage(pageSize = PROJECT_LIST_PAGE_SIZE, p
319
326
  throw new error_1.FirebaseError("Failed to list available Google Cloud Platform projects. See firebase-debug.log for more info.", { exit: 2, original: err });
320
327
  }
321
328
  }
322
- exports.getAvailableCloudProjectPage = getAvailableCloudProjectPage;
323
329
  async function listFirebaseProjects(pageSize) {
324
330
  const projects = [];
325
331
  let nextPageToken;
@@ -330,7 +336,6 @@ async function listFirebaseProjects(pageSize) {
330
336
  } while (nextPageToken);
331
337
  return projects;
332
338
  }
333
- exports.listFirebaseProjects = listFirebaseProjects;
334
339
  async function checkAndRecommendProjectId(projectId) {
335
340
  try {
336
341
  const res = await firebaseV1APIClient.request({
@@ -351,7 +356,6 @@ async function checkAndRecommendProjectId(projectId) {
351
356
  throw new error_1.FirebaseError("Failed to check if project ID is available. See firebase-debug.log for more info.", { exit: 2, original: err });
352
357
  }
353
358
  }
354
- exports.checkAndRecommendProjectId = checkAndRecommendProjectId;
355
359
  async function getFirebaseProject(projectId) {
356
360
  try {
357
361
  const res = await firebaseAPIClient.request({
@@ -381,13 +385,11 @@ async function getFirebaseProject(projectId) {
381
385
  "Please make sure the project exists and your account has permission to access it.", { exit: 2, original: err });
382
386
  }
383
387
  }
384
- exports.getFirebaseProject = getFirebaseProject;
385
388
  async function getProject(projectId) {
386
389
  await (0, ensureApiEnabled_1.bestEffortEnsure)(projectId, api.resourceManagerOrigin(), "firebase", true);
387
390
  const response = await resourceManagerClient.get(`/projects/${projectId}`);
388
391
  return response.body;
389
392
  }
390
- exports.getProject = getProject;
391
393
  async function checkFirebaseEnabledForCloudProject(projectId) {
392
394
  try {
393
395
  const res = await firebaseAPIClient.request({
@@ -410,4 +412,3 @@ async function checkFirebaseEnabledForCloudProject(projectId) {
410
412
  "Please make sure the project exists and your account has permission to access it.", { exit: 2, original: err });
411
413
  }
412
414
  }
413
- exports.checkFirebaseEnabledForCloudProject = checkFirebaseEnabledForCloudProject;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.enhanceProvisioningError = void 0;
3
+ exports.enhanceProvisioningError = enhanceProvisioningError;
4
4
  const error_1 = require("../../error");
5
5
  function isErrorInfo(detail) {
6
6
  return detail["@type"] === "type.googleapis.com/google.rpc.ErrorInfo";
@@ -9,14 +9,13 @@ function isHelpLinks(detail) {
9
9
  return detail["@type"] === "type.googleapis.com/google.rpc.Help";
10
10
  }
11
11
  function extractErrorDetails(err) {
12
- var _a;
13
12
  if (!(err instanceof Error)) {
14
13
  return "";
15
14
  }
16
15
  if (err instanceof error_1.FirebaseError && err.context) {
17
16
  const context = err.context;
18
- const errorBody = (_a = context.body) === null || _a === void 0 ? void 0 : _a.error;
19
- if ((errorBody === null || errorBody === void 0 ? void 0 : errorBody.details) && Array.isArray(errorBody.details)) {
17
+ const errorBody = context.body?.error;
18
+ if (errorBody?.details && Array.isArray(errorBody.details)) {
20
19
  const parts = [];
21
20
  for (const detail of errorBody.details) {
22
21
  if (isErrorInfo(detail)) {
@@ -51,4 +50,3 @@ function enhanceProvisioningError(err, contextMessage) {
51
50
  original: originalError,
52
51
  });
53
52
  }
54
- exports.enhanceProvisioningError = enhanceProvisioningError;
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.provisionFirebaseApp = exports.buildProvisionRequest = exports.buildParentString = exports.buildAppNamespace = void 0;
3
+ exports.buildAppNamespace = buildAppNamespace;
4
+ exports.buildParentString = buildParentString;
5
+ exports.buildProvisionRequest = buildProvisionRequest;
6
+ exports.provisionFirebaseApp = provisionFirebaseApp;
4
7
  const apiv2_1 = require("../../apiv2");
5
8
  const api_1 = require("../../api");
6
9
  const error_1 = require("../../error");
@@ -35,7 +38,6 @@ function buildAppNamespace(app) {
35
38
  }
36
39
  return namespace;
37
40
  }
38
- exports.buildAppNamespace = buildAppNamespace;
39
41
  function buildParentString(parent) {
40
42
  switch (parent.type) {
41
43
  case "existing_project":
@@ -48,9 +50,7 @@ function buildParentString(parent) {
48
50
  throw new error_1.FirebaseError("Unsupported parent type", { exit: 2 });
49
51
  }
50
52
  }
51
- exports.buildParentString = buildParentString;
52
53
  function buildProvisionRequest(options) {
53
- var _a, _b;
54
54
  const platformInput = (() => {
55
55
  switch (options.app.platform) {
56
56
  case apps_1.AppPlatform.IOS:
@@ -71,11 +71,18 @@ function buildProvisionRequest(options) {
71
71
  return { webInput: {} };
72
72
  }
73
73
  })();
74
- return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ appNamespace: buildAppNamespace(options.app), displayName: options.app.displayName }, (options.project.parent && { parent: buildParentString(options.project.parent) })), (((_a = options.features) === null || _a === void 0 ? void 0 : _a.location) && { location: options.features.location })), (options.requestId && { requestId: options.requestId })), (((_b = options.features) === null || _b === void 0 ? void 0 : _b.firebaseAiLogicInput) && {
75
- firebaseAiLogicInput: options.features.firebaseAiLogicInput,
76
- })), platformInput);
74
+ return {
75
+ appNamespace: buildAppNamespace(options.app),
76
+ displayName: options.app.displayName,
77
+ ...(options.project.parent && { parent: buildParentString(options.project.parent) }),
78
+ ...(options.features?.location && { location: options.features.location }),
79
+ ...(options.requestId && { requestId: options.requestId }),
80
+ ...(options.features?.firebaseAiLogicInput && {
81
+ firebaseAiLogicInput: options.features.firebaseAiLogicInput,
82
+ }),
83
+ ...platformInput,
84
+ };
77
85
  }
78
- exports.buildProvisionRequest = buildProvisionRequest;
79
86
  async function provisionFirebaseApp(options) {
80
87
  try {
81
88
  const request = buildProvisionRequest(options);
@@ -104,4 +111,3 @@ async function provisionFirebaseApp(options) {
104
111
  throw (0, errorHandler_1.enhanceProvisioningError)(err, "Failed to provision Firebase app");
105
112
  }
106
113
  }
107
- exports.provisionFirebaseApp = provisionFirebaseApp;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateStudioFirebaseProject = exports.reconcileStudioFirebaseProject = void 0;
3
+ exports.reconcileStudioFirebaseProject = reconcileStudioFirebaseProject;
4
+ exports.updateStudioFirebaseProject = updateStudioFirebaseProject;
4
5
  const apiv2_1 = require("../apiv2");
5
6
  const prompt = require("../prompt");
6
7
  const api = require("../api");
@@ -53,7 +54,6 @@ async function reconcileStudioFirebaseProject(options, activeProjectFromConfig)
53
54
  }
54
55
  return studioWorkspace.firebaseProjectId;
55
56
  }
56
- exports.reconcileStudioFirebaseProject = reconcileStudioFirebaseProject;
57
57
  async function getStudioWorkspace() {
58
58
  const workspaceId = process.env.WORKSPACE_SLUG;
59
59
  if (!workspaceId) {
@@ -114,7 +114,6 @@ async function updateStudioFirebaseProject(projectId) {
114
114
  }
115
115
  recordStudioProjectSyncTime();
116
116
  }
117
- exports.updateStudioFirebaseProject = updateStudioFirebaseProject;
118
117
  function recordStudioProjectSyncTime() {
119
118
  configstore_1.configstore.set("firebaseStudioProjectLastSynced", Date.now());
120
119
  }