firebase-tools 15.0.0 → 15.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +33 -36
  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 +47 -10
  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 +31 -31
  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 +19 -21
  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 +47 -45
  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 +7 -4
  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 +67 -50
  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
@@ -1,6 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fetchAllRepositories = exports.listAppHostingConnections = exports.getOrCreateRepository = exports.getOrCreateConnection = exports.createConnection = exports.getOrCreateOauthConnection = exports.linkGitHubRepository = exports.parseConnectionName = void 0;
3
+ exports.parseConnectionName = parseConnectionName;
4
+ exports.linkGitHubRepository = linkGitHubRepository;
5
+ exports.getOrCreateOauthConnection = getOrCreateOauthConnection;
6
+ exports.createConnection = createConnection;
7
+ exports.getOrCreateConnection = getOrCreateConnection;
8
+ exports.getOrCreateRepository = getOrCreateRepository;
9
+ exports.listAppHostingConnections = listAppHostingConnections;
10
+ exports.fetchAllRepositories = fetchAllRepositories;
4
11
  const clc = require("colorette");
5
12
  const gcb = require("../gcp/cloudbuild");
6
13
  const rm = require("../gcp/resourceManager");
@@ -16,7 +23,7 @@ const APPHOSTING_OAUTH_CONN_NAME = "apphosting-github-oauth";
16
23
  const CONNECTION_NAME_REGEX = /^projects\/(?<projectId>[^\/]+)\/locations\/(?<location>[^\/]+)\/connections\/(?<id>[^\/]+)$/;
17
24
  function parseConnectionName(name) {
18
25
  const match = CONNECTION_NAME_REGEX.exec(name);
19
- if (!match || typeof match.groups === undefined) {
26
+ if (!match || typeof match.groups === "undefined") {
20
27
  return;
21
28
  }
22
29
  const { projectId, location, id } = match.groups;
@@ -26,7 +33,6 @@ function parseConnectionName(name) {
26
33
  id,
27
34
  };
28
35
  }
29
- exports.parseConnectionName = parseConnectionName;
30
36
  const gcbPollerOptions = {
31
37
  apiOrigin: (0, api_1.cloudbuildOrigin)(),
32
38
  apiVersion: "v2",
@@ -41,8 +47,7 @@ function extractRepoSlugFromUri(remoteUri) {
41
47
  return match[1];
42
48
  }
43
49
  function generateRepositoryId(remoteUri) {
44
- var _a;
45
- return (_a = extractRepoSlugFromUri(remoteUri)) === null || _a === void 0 ? void 0 : _a.replaceAll("/", "-");
50
+ return extractRepoSlugFromUri(remoteUri)?.replaceAll("/", "-");
46
51
  }
47
52
  function generateConnectionId() {
48
53
  const randomHash = Math.random().toString(36).slice(6);
@@ -50,7 +55,6 @@ function generateConnectionId() {
50
55
  }
51
56
  const ADD_CONN_CHOICE = "@ADD_CONN";
52
57
  async function linkGitHubRepository(projectId, location) {
53
- var _a, _b;
54
58
  utils.logBullet(clc.bold(`${clc.yellow("===")} Import a GitHub repository`));
55
59
  const oauthConn = await getOrCreateOauthConnection(projectId, location);
56
60
  const existingConns = await listAppHostingConnections(projectId);
@@ -69,19 +73,17 @@ async function linkGitHubRepository(projectId, location) {
69
73
  } while (repoRemoteUri === ADD_CONN_CHOICE);
70
74
  const { id: connectionId } = parseConnectionName(connection.name);
71
75
  await getOrCreateConnection(projectId, location, connectionId, {
72
- authorizerCredential: (_a = connection.githubConfig) === null || _a === void 0 ? void 0 : _a.authorizerCredential,
73
- appInstallationId: (_b = connection.githubConfig) === null || _b === void 0 ? void 0 : _b.appInstallationId,
76
+ authorizerCredential: connection.githubConfig?.authorizerCredential,
77
+ appInstallationId: connection.githubConfig?.appInstallationId,
74
78
  });
75
79
  const repo = await getOrCreateRepository(projectId, location, connectionId, repoRemoteUri);
76
80
  utils.logSuccess(`Successfully linked GitHub repository at remote URI`);
77
81
  utils.logSuccess(`\t${repoRemoteUri}`);
78
82
  return repo;
79
83
  }
80
- exports.linkGitHubRepository = linkGitHubRepository;
81
84
  async function createFullyInstalledConnection(projectId, location, connectionId, oauthConn) {
82
- var _a;
83
85
  let conn = await createConnection(projectId, location, connectionId, {
84
- authorizerCredential: (_a = oauthConn.githubConfig) === null || _a === void 0 ? void 0 : _a.authorizerCredential,
86
+ authorizerCredential: oauthConn.githubConfig?.authorizerCredential,
85
87
  });
86
88
  while (conn.installationState.stage !== "COMPLETE") {
87
89
  utils.logBullet("Install the Cloud Build GitHub app to enable access to GitHub repositories");
@@ -119,7 +121,6 @@ async function getOrCreateOauthConnection(projectId, location) {
119
121
  }
120
122
  return conn;
121
123
  }
122
- exports.getOrCreateOauthConnection = getOrCreateOauthConnection;
123
124
  async function promptRepositoryUri(projectId, connections) {
124
125
  const { repos, remoteUriToConnection } = await fetchAllRepositories(projectId, connections);
125
126
  const remoteUri = await (0, prompt_1.search)({
@@ -132,7 +133,7 @@ async function promptRepositoryUri(projectId, connections) {
132
133
  },
133
134
  new prompt_1.Separator(),
134
135
  ...fuzzy
135
- .filter(input !== null && input !== void 0 ? input : "", repos, {
136
+ .filter(input ?? "", repos, {
136
137
  extract: (repo) => extractRepoSlugFromUri(repo.remoteUri) || "",
137
138
  })
138
139
  .map((result) => {
@@ -167,10 +168,13 @@ async function ensureSecretManagerAdminGrant(projectId) {
167
168
  }
168
169
  async function createConnection(projectId, location, connectionId, githubConfig) {
169
170
  const op = await gcb.createConnection(projectId, location, connectionId, githubConfig);
170
- const conn = await poller.pollOperation(Object.assign(Object.assign({}, gcbPollerOptions), { pollerName: `create-${location}-${connectionId}`, operationResourceName: op.name }));
171
+ const conn = await poller.pollOperation({
172
+ ...gcbPollerOptions,
173
+ pollerName: `create-${location}-${connectionId}`,
174
+ operationResourceName: op.name,
175
+ });
171
176
  return conn;
172
177
  }
173
- exports.createConnection = createConnection;
174
178
  async function getOrCreateConnection(projectId, location, connectionId, githubConfig) {
175
179
  let conn;
176
180
  try {
@@ -186,7 +190,6 @@ async function getOrCreateConnection(projectId, location, connectionId, githubCo
186
190
  }
187
191
  return conn;
188
192
  }
189
- exports.getOrCreateConnection = getOrCreateConnection;
190
193
  async function getOrCreateRepository(projectId, location, connectionId, remoteUri) {
191
194
  const repositoryId = generateRepositoryId(remoteUri);
192
195
  if (!repositoryId) {
@@ -199,7 +202,11 @@ async function getOrCreateRepository(projectId, location, connectionId, remoteUr
199
202
  catch (err) {
200
203
  if (err.status === 404) {
201
204
  const op = await gcb.createRepository(projectId, location, connectionId, repositoryId, remoteUri);
202
- repo = await poller.pollOperation(Object.assign(Object.assign({}, gcbPollerOptions), { pollerName: `create-${location}-${connectionId}-${repositoryId}`, operationResourceName: op.name }));
205
+ repo = await poller.pollOperation({
206
+ ...gcbPollerOptions,
207
+ pollerName: `create-${location}-${connectionId}-${repositoryId}`,
208
+ operationResourceName: op.name,
209
+ });
203
210
  }
204
211
  else {
205
212
  throw err;
@@ -207,14 +214,12 @@ async function getOrCreateRepository(projectId, location, connectionId, remoteUr
207
214
  }
208
215
  return repo;
209
216
  }
210
- exports.getOrCreateRepository = getOrCreateRepository;
211
217
  async function listAppHostingConnections(projectId) {
212
218
  const conns = await gcb.listConnections(projectId, "-");
213
219
  return conns.filter((conn) => APPHOSTING_CONN_PATTERN.test(conn.name) &&
214
220
  conn.installationState.stage === "COMPLETE" &&
215
221
  !conn.disabled);
216
222
  }
217
- exports.listAppHostingConnections = listAppHostingConnections;
218
223
  async function fetchAllRepositories(projectId, connections) {
219
224
  const repos = [];
220
225
  const remoteUriToConnection = {};
@@ -236,4 +241,3 @@ async function fetchAllRepositories(projectId, connections) {
236
241
  }
237
242
  return { repos, remoteUriToConnection };
238
243
  }
239
- exports.fetchAllRepositories = fetchAllRepositories;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.orchestrateRollout = exports.createRollout = void 0;
3
+ exports.createRollout = createRollout;
4
+ exports.orchestrateRollout = orchestrateRollout;
4
5
  const apphosting = require("../gcp/apphosting");
5
6
  const error_1 = require("../error");
6
7
  const ora = require("ora");
@@ -79,7 +80,6 @@ async function createRollout(backendId, projectId, branch, commit, force) {
79
80
  }
80
81
  createRolloutSpinner.succeed("Successfully created a new rollout!");
81
82
  }
82
- exports.createRollout = createRollout;
83
83
  async function orchestrateRollout(args) {
84
84
  const { projectId, location, backendId, buildInput, isFirstRollout } = args;
85
85
  const buildId = await apphosting.getNextRolloutId(projectId, location, backendId, isFirstRollout ? 1 : undefined);
@@ -109,8 +109,16 @@ async function orchestrateRollout(args) {
109
109
  }
110
110
  }
111
111
  const rolloutOp = await apphosting.createRollout(projectId, location, backendId, buildId, rolloutBody);
112
- const rolloutPoll = poller.pollOperation(Object.assign(Object.assign({}, apphostingPollerOptions), { pollerName: `create-${projectId}-${location}-backend-${backendId}-rollout-${buildId}`, operationResourceName: rolloutOp.name }));
113
- const buildPoll = poller.pollOperation(Object.assign(Object.assign({}, apphostingPollerOptions), { pollerName: `create-${projectId}-${location}-backend-${backendId}-build-${buildId}`, operationResourceName: buildOp.name }));
112
+ const rolloutPoll = poller.pollOperation({
113
+ ...apphostingPollerOptions,
114
+ pollerName: `create-${projectId}-${location}-backend-${backendId}-rollout-${buildId}`,
115
+ operationResourceName: rolloutOp.name,
116
+ });
117
+ const buildPoll = poller.pollOperation({
118
+ ...apphostingPollerOptions,
119
+ pollerName: `create-${projectId}-${location}-backend-${backendId}-build-${buildId}`,
120
+ operationResourceName: buildOp.name,
121
+ });
114
122
  const [rollout, build] = await Promise.all([rolloutPoll, buildPoll]);
115
123
  if (build.state !== "READY") {
116
124
  if (!build.buildLogsUri) {
@@ -121,4 +129,3 @@ async function orchestrateRollout(args) {
121
129
  }
122
130
  return { rollout, build };
123
131
  }
124
- exports.orchestrateRollout = orchestrateRollout;
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.envVarForSecret = exports.selectBackendServiceAccounts = exports.GRANT_ACCESS_IN_FUTURE = exports.WARN_NO_BACKENDS = exports.selectFromMetadata = exports.tableForBackends = exports.serviceAccountDisplay = exports.toMetadata = void 0;
3
+ exports.GRANT_ACCESS_IN_FUTURE = exports.WARN_NO_BACKENDS = void 0;
4
+ exports.toMetadata = toMetadata;
5
+ exports.serviceAccountDisplay = serviceAccountDisplay;
6
+ exports.tableForBackends = tableForBackends;
7
+ exports.selectFromMetadata = selectFromMetadata;
8
+ exports.selectBackendServiceAccounts = selectBackendServiceAccounts;
9
+ exports.envVarForSecret = envVarForSecret;
4
10
  const clc = require("colorette");
5
11
  const Table = require("cli-table3");
6
12
  const _1 = require(".");
@@ -13,7 +19,7 @@ async function toMetadata(projectNumber, backends) {
13
19
  const metadata = [];
14
20
  for (const backend of backends) {
15
21
  const [, , , location, , id] = backend.name.split("/");
16
- metadata.push(Object.assign({ location, id }, (await (0, _1.serviceAccountsForBackend)(projectNumber, backend))));
22
+ metadata.push({ location, id, ...(await (0, _1.serviceAccountsForBackend)(projectNumber, backend)) });
17
23
  }
18
24
  return metadata.sort((left, right) => {
19
25
  const cmplocation = left.location.localeCompare(right.location);
@@ -23,14 +29,12 @@ async function toMetadata(projectNumber, backends) {
23
29
  return left.id.localeCompare(right.id);
24
30
  });
25
31
  }
26
- exports.toMetadata = toMetadata;
27
32
  function serviceAccountDisplay(metadata) {
28
33
  if (sameServiceAccount(metadata)) {
29
34
  return metadata.runServiceAccount;
30
35
  }
31
36
  return `${metadata.buildServiceAccount}, ${metadata.runServiceAccount}`;
32
37
  }
33
- exports.serviceAccountDisplay = serviceAccountDisplay;
34
38
  function sameServiceAccount(metadata) {
35
39
  return metadata.buildServiceAccount === metadata.runServiceAccount;
36
40
  }
@@ -47,7 +51,6 @@ function tableForBackends(metadata) {
47
51
  const rows = metadata.map((m) => [m.location, m.id, serviceAccountDisplay(m)]);
48
52
  return [headers, rows];
49
53
  }
50
- exports.tableForBackends = tableForBackends;
51
54
  function selectFromMetadata(input, selected) {
52
55
  const buildAccounts = new Set();
53
56
  const runAccounts = new Set();
@@ -64,7 +67,6 @@ function selectFromMetadata(input, selected) {
64
67
  runServiceAccounts: [...runAccounts],
65
68
  };
66
69
  }
67
- exports.selectFromMetadata = selectFromMetadata;
68
70
  exports.WARN_NO_BACKENDS = "To use this secret, your backend's service account must be granted access." +
69
71
  "It does not look like you have a backend yet. After creating a backend, grant access with " +
70
72
  clc.bold("firebase apphosting:secrets:grantaccess");
@@ -135,7 +137,6 @@ async function selectBackendServiceAccounts(projectNumber, projectId, options) {
135
137
  }
136
138
  return selectFromMetadata(metadata, chosen);
137
139
  }
138
- exports.selectBackendServiceAccounts = selectBackendServiceAccounts;
139
140
  function toUpperSnakeCase(key) {
140
141
  return key
141
142
  .replace(/[.-]/g, "_")
@@ -152,7 +153,7 @@ async function envVarForSecret(secret, trimTestPrefix = false) {
152
153
  env.validateKey(secret);
153
154
  return secret;
154
155
  }
155
- catch (_a) {
156
+ catch {
156
157
  }
157
158
  }
158
159
  do {
@@ -169,4 +170,3 @@ async function envVarForSecret(secret, trimTestPrefix = false) {
169
170
  }
170
171
  } while (true);
171
172
  }
172
- exports.envVarForSecret = envVarForSecret;
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getSecretNameParts = exports.fetchSecrets = exports.upsertSecret = exports.grantEmailsSecretAccess = exports.grantSecretAccess = exports.serviceAccountsForBackend = exports.toMulti = void 0;
3
+ exports.toMulti = toMulti;
4
+ exports.serviceAccountsForBackend = serviceAccountsForBackend;
5
+ exports.grantSecretAccess = grantSecretAccess;
6
+ exports.grantEmailsSecretAccess = grantEmailsSecretAccess;
7
+ exports.upsertSecret = upsertSecret;
8
+ exports.fetchSecrets = fetchSecrets;
9
+ exports.getSecretNameParts = getSecretNameParts;
4
10
  const error_1 = require("../../error");
5
11
  const gcsm = require("../../gcp/secretManager");
6
12
  const gcb = require("../../gcp/cloudbuild");
@@ -20,7 +26,6 @@ function toMulti(accounts) {
20
26
  }
21
27
  return m;
22
28
  }
23
- exports.toMulti = toMulti;
24
29
  async function serviceAccountsForBackend(projectNumber, backend) {
25
30
  if (backend.serviceAccount) {
26
31
  return {
@@ -33,7 +38,6 @@ async function serviceAccountsForBackend(projectNumber, backend) {
33
38
  runServiceAccount: await gce.getDefaultServiceAccount(projectNumber),
34
39
  };
35
40
  }
36
- exports.serviceAccountsForBackend = serviceAccountsForBackend;
37
41
  async function grantSecretAccess(projectId, projectNumber, secretName, accounts) {
38
42
  const p4saEmail = apphosting.serviceAgentEmail(projectNumber);
39
43
  const newBindings = [
@@ -67,7 +71,6 @@ async function grantSecretAccess(projectId, projectNumber, secretName, accounts)
67
71
  }
68
72
  utils.logSuccess(`Successfully set IAM bindings on secret ${secretName}.\n`);
69
73
  }
70
- exports.grantSecretAccess = grantSecretAccess;
71
74
  async function grantEmailsSecretAccess(projectId, secretNames, emails) {
72
75
  const typeGuesses = Object.fromEntries(emails.map((email) => [email, "user"]));
73
76
  for (const secretName of secretNames) {
@@ -108,9 +111,7 @@ async function grantEmailsSecretAccess(projectId, secretNames, emails) {
108
111
  utils.logSuccess(`Successfully set IAM bindings on secret ${secretName}.\n`);
109
112
  }
110
113
  }
111
- exports.grantEmailsSecretAccess = grantEmailsSecretAccess;
112
114
  async function upsertSecret(project, secret, location) {
113
- var _a, _b, _c, _d;
114
115
  let existing;
115
116
  try {
116
117
  existing = await gcsm.getSecret(project, secret);
@@ -122,9 +123,9 @@ async function upsertSecret(project, secret, location) {
122
123
  await gcsm.createSecret(project, secret, gcsm.labels("apphosting"), location);
123
124
  return true;
124
125
  }
125
- const replication = (_a = existing.replication) === null || _a === void 0 ? void 0 : _a.userManaged;
126
+ const replication = existing.replication?.userManaged;
126
127
  if (location &&
127
- (((_b = replication === null || replication === void 0 ? void 0 : replication.replicas) === null || _b === void 0 ? void 0 : _b.length) !== 1 || ((_d = (_c = replication === null || replication === void 0 ? void 0 : replication.replicas) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.location) !== location)) {
128
+ (replication?.replicas?.length !== 1 || replication?.replicas?.[0]?.location !== location)) {
128
129
  utils.logLabeledError("apphosting", "Secret replication policies cannot be changed after creation");
129
130
  return null;
130
131
  }
@@ -143,7 +144,6 @@ async function upsertSecret(project, secret, location) {
143
144
  }
144
145
  return false;
145
146
  }
146
- exports.upsertSecret = upsertSecret;
147
147
  async function fetchSecrets(projectId, secrets) {
148
148
  let secretsKeyValuePairs;
149
149
  try {
@@ -162,7 +162,6 @@ async function fetchSecrets(projectId, secrets) {
162
162
  }
163
163
  return secretsKeyValuePairs;
164
164
  }
165
- exports.fetchSecrets = fetchSecrets;
166
165
  function getSecretNameParts(secret) {
167
166
  let [name, version] = secret.split("@");
168
167
  if (!version) {
@@ -170,4 +169,3 @@ function getSecretNameParts(secret) {
170
169
  }
171
170
  return [name, version];
172
171
  }
173
- exports.getSecretNameParts = getSecretNameParts;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.promptForAppHostingYaml = exports.getEnvironmentName = void 0;
3
+ exports.getEnvironmentName = getEnvironmentName;
4
+ exports.promptForAppHostingYaml = promptForAppHostingYaml;
4
5
  const error_1 = require("../error");
5
6
  const config_1 = require("./config");
6
7
  const prompt = require("../prompt");
@@ -11,7 +12,6 @@ function getEnvironmentName(apphostingYamlFileName) {
11
12
  }
12
13
  return found[1].replaceAll(".", "");
13
14
  }
14
- exports.getEnvironmentName = getEnvironmentName;
15
15
  async function promptForAppHostingYaml(apphostingFileNameToPathMap, promptMessage = "Please select an App Hosting config:") {
16
16
  const fileNames = Array.from(apphostingFileNameToPathMap.keys());
17
17
  const baseFilePath = apphostingFileNameToPathMap.get(config_1.APPHOSTING_BASE_YAML_FILE);
@@ -36,4 +36,3 @@ async function promptForAppHostingYaml(apphostingFileNameToPathMap, promptMessag
36
36
  });
37
37
  return fileToExportPath;
38
38
  }
39
- exports.promptForAppHostingYaml = promptForAppHostingYaml;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toEnvList = exports.toEnvMap = exports.AppHostingYamlConfig = void 0;
3
+ exports.AppHostingYamlConfig = void 0;
4
+ exports.toEnvMap = toEnvMap;
5
+ exports.toEnvList = toEnvList;
4
6
  const path_1 = require("path");
5
7
  const utils_1 = require("../utils");
6
8
  const config_1 = require("./config");
@@ -14,14 +16,13 @@ class AppHostingYamlConfig {
14
16
  this.env = {};
15
17
  }
16
18
  static async loadFromFile(filePath) {
17
- var _a;
18
19
  if (!(0, fsutils_1.fileExistsSync)(filePath)) {
19
20
  throw new error_1.FirebaseError(`Cannot load ${filePath} from given path, it doesn't exist`);
20
21
  }
21
22
  const config = new AppHostingYamlConfig();
22
23
  const file = await (0, utils_1.readFileFromDirectory)((0, path_1.dirname)(filePath), (0, path_1.basename)(filePath));
23
24
  config.filename = path.basename(filePath);
24
- const loadedAppHostingYaml = (_a = (await (0, utils_1.wrappedSafeLoad)(file.source))) !== null && _a !== void 0 ? _a : {};
25
+ const loadedAppHostingYaml = (await (0, utils_1.wrappedSafeLoad)(file.source)) ?? {};
25
26
  if (loadedAppHostingYaml.env) {
26
27
  config.env = toEnvMap(loadedAppHostingYaml.env);
27
28
  }
@@ -31,16 +32,18 @@ class AppHostingYamlConfig {
31
32
  return new AppHostingYamlConfig();
32
33
  }
33
34
  merge(other, allowSecretsToBecomePlaintext = true) {
34
- var _a;
35
35
  if (!allowSecretsToBecomePlaintext) {
36
36
  const wereSecrets = Object.entries(this.env)
37
37
  .filter(([, env]) => env.secret)
38
38
  .map(([key]) => key);
39
- if (wereSecrets.some((key) => { var _a; return (_a = other.env[key]) === null || _a === void 0 ? void 0 : _a.value; })) {
40
- throw new error_1.FirebaseError(`Cannot convert secret to plaintext in ${(_a = other.filename) !== null && _a !== void 0 ? _a : "apphosting yaml"}`);
39
+ if (wereSecrets.some((key) => other.env[key]?.value)) {
40
+ throw new error_1.FirebaseError(`Cannot convert secret to plaintext in ${other.filename ?? "apphosting yaml"}`);
41
41
  }
42
42
  }
43
- this.env = Object.assign(Object.assign({}, this.env), other.env);
43
+ this.env = {
44
+ ...this.env,
45
+ ...other.env,
46
+ };
44
47
  }
45
48
  async upsertFile(filePath) {
46
49
  let yamlConfigToWrite = {};
@@ -56,15 +59,13 @@ exports.AppHostingYamlConfig = AppHostingYamlConfig;
56
59
  function toEnvMap(envs) {
57
60
  return Object.fromEntries(envs.map((env) => {
58
61
  const variable = env.variable;
59
- const tmp = Object.assign({}, env);
62
+ const tmp = { ...env };
60
63
  delete env.variable;
61
64
  return [variable, tmp];
62
65
  }));
63
66
  }
64
- exports.toEnvMap = toEnvMap;
65
67
  function toEnvList(envs) {
66
68
  return Object.entries(envs).map(([variable, env]) => {
67
- return Object.assign(Object.assign({}, env), { variable });
69
+ return { ...env, variable };
68
70
  });
69
71
  }
70
- exports.toEnvList = toEnvList;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureProjectConfigured = void 0;
3
+ exports.ensureProjectConfigured = ensureProjectConfigured;
4
4
  const resourceManager_1 = require("../gcp/resourceManager");
5
5
  const ensureApiEnabled_1 = require("../ensureApiEnabled");
6
6
  const api_1 = require("../api");
@@ -29,7 +29,6 @@ async function ensureProjectConfigured(projectId) {
29
29
  await provisionServiceAccount(projectId, serviceAccount);
30
30
  }
31
31
  }
32
- exports.ensureProjectConfigured = ensureProjectConfigured;
33
32
  async function provisionServiceAccount(projectId, serviceAccount) {
34
33
  try {
35
34
  await iam.createServiceAccount(projectId, TEST_RUNNER_SERVICE_ACCOUNT_NAME, "Service Account used in Cloud Run, responsible for running tests", "Firebase App Testing Test Runner");
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.pollInvocationStatus = exports.invokeTests = void 0;
3
+ exports.invokeTests = invokeTests;
4
+ exports.pollInvocationStatus = pollInvocationStatus;
4
5
  const apiv2_1 = require("../apiv2");
5
6
  const api_1 = require("../api");
6
7
  const operationPoller = require("../operation-poller");
@@ -16,7 +17,6 @@ async function invokeTests(appId, startUri, testDefs) {
16
17
  throw new error_1.FirebaseError("Test invocation failed", { original: (0, error_1.getError)(err) });
17
18
  }
18
19
  }
19
- exports.invokeTests = invokeTests;
20
20
  function buildInvokeTestCasesRequest(testCaseInvocations) {
21
21
  return {
22
22
  resource: {
@@ -37,4 +37,3 @@ async function pollInvocationStatus(operationName, onPoll, backoff = 30 * 1000)
37
37
  onPoll,
38
38
  });
39
39
  }
40
- exports.pollInvocationStatus = pollInvocationStatus;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseTestFiles = void 0;
3
+ exports.parseTestFiles = parseTestFiles;
4
4
  const fsutils_1 = require("../fsutils");
5
5
  const path_1 = require("path");
6
6
  const logger_1 = require("../logger");
@@ -58,12 +58,11 @@ async function parseTestFiles(dir, targetUri, filePattern, namePattern) {
58
58
  }
59
59
  return parseTestFilesRecursive(dir);
60
60
  }
61
- exports.parseTestFiles = parseTestFiles;
62
61
  function toTestDef(testDef, targetUri, defaultConfig) {
63
- var _a, _b, _c, _d, _e, _f, _g;
64
- const steps = (_a = testDef.steps) !== null && _a !== void 0 ? _a : [];
65
- const route = (_d = (_c = (_b = testDef.testConfig) === null || _b === void 0 ? void 0 : _b.route) !== null && _c !== void 0 ? _c : defaultConfig === null || defaultConfig === void 0 ? void 0 : defaultConfig.route) !== null && _d !== void 0 ? _d : "";
66
- const browsers = (_g = (_f = (_e = testDef.testConfig) === null || _e === void 0 ? void 0 : _e.browsers) !== null && _f !== void 0 ? _f : defaultConfig === null || defaultConfig === void 0 ? void 0 : defaultConfig.browsers) !== null && _g !== void 0 ? _g : [types_1.Browser.CHROME];
62
+ const steps = testDef.steps ?? [];
63
+ const route = testDef.testConfig?.route ?? defaultConfig?.route ?? "";
64
+ const browsers = testDef.testConfig?.browsers ??
65
+ defaultConfig?.browsers ?? [types_1.Browser.CHROME];
67
66
  return {
68
67
  testCase: {
69
68
  startUri: targetUri + route,
@@ -5,7 +5,7 @@ var Browser;
5
5
  (function (Browser) {
6
6
  Browser["BROWSER_UNSPECIFIED"] = "BROWSER_UNSPECIFIED";
7
7
  Browser["CHROME"] = "CHROME";
8
- })(Browser = exports.Browser || (exports.Browser = {}));
8
+ })(Browser || (exports.Browser = Browser = {}));
9
9
  var CompletionReason;
10
10
  (function (CompletionReason) {
11
11
  CompletionReason[CompletionReason["COMPLETION_REASON_UNSPECIFIED"] = 0] = "COMPLETION_REASON_UNSPECIFIED";
@@ -15,4 +15,4 @@ var CompletionReason;
15
15
  CompletionReason[CompletionReason["GOAL_INCONCLUSIVE"] = 4] = "GOAL_INCONCLUSIVE";
16
16
  CompletionReason[CompletionReason["TEST_CANCELLED"] = 5] = "TEST_CANCELLED";
17
17
  CompletionReason[CompletionReason["GOAL_SUCCEEDED"] = 6] = "GOAL_SUCCEEDED";
18
- })(CompletionReason = exports.CompletionReason || (exports.CompletionReason = {}));
18
+ })(CompletionReason || (exports.CompletionReason = CompletionReason = {}));
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.archiveDirectory = void 0;
3
+ exports.archiveDirectory = archiveDirectory;
4
4
  const archiver = require("archiver");
5
5
  const filesize = require("filesize");
6
6
  const fs = require("fs");
@@ -31,7 +31,6 @@ async function archiveDirectory(sourceDirectory, options = {}) {
31
31
  throw new error_1.FirebaseError("Failed to create archive.", { original: (0, error_1.getError)(err) });
32
32
  }
33
33
  }
34
- exports.archiveDirectory = archiveDirectory;
35
34
  async function zipDirectory(sourceDirectory, tempFile, options) {
36
35
  const archiveFileStream = fs.createWriteStream(tempFile.name, {
37
36
  flags: "w",