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,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.unsafePins = exports.prepare = exports.addPinnedFunctionsToOnlyString = exports.hasPinnedFunctions = void 0;
3
+ exports.hasPinnedFunctions = hasPinnedFunctions;
4
+ exports.addPinnedFunctionsToOnlyString = addPinnedFunctionsToOnlyString;
5
+ exports.prepare = prepare;
6
+ exports.unsafePins = unsafePins;
4
7
  const error_1 = require("../../error");
5
8
  const api = require("../../hosting/api");
6
9
  const config = require("../../hosting/config");
@@ -31,9 +34,7 @@ function hasPinnedFunctions(options) {
31
34
  }
32
35
  return false;
33
36
  }
34
- exports.hasPinnedFunctions = hasPinnedFunctions;
35
37
  async function addPinnedFunctionsToOnlyString(context, options) {
36
- var _a;
37
38
  if (!options.only) {
38
39
  return false;
39
40
  }
@@ -45,7 +46,7 @@ async function addPinnedFunctionsToOnlyString(context, options) {
45
46
  if (!("function" in r) || typeof r.function !== "object" || !r.function.pinTag) {
46
47
  continue;
47
48
  }
48
- const endpoint = (_a = (await backend.existingBackend(context)).endpoints[r.function.region || "us-central1"]) === null || _a === void 0 ? void 0 : _a[r.function.functionId];
49
+ const endpoint = (await backend.existingBackend(context)).endpoints[r.function.region || "us-central1"]?.[r.function.functionId];
49
50
  if (endpoint) {
50
51
  options.only = (0, ensureTargeted_1.ensureTargeted)(options.only, endpoint.codebase || "default", endpoint.id);
51
52
  }
@@ -66,7 +67,6 @@ async function addPinnedFunctionsToOnlyString(context, options) {
66
67
  }
67
68
  return addedFunctions.length !== 0;
68
69
  }
69
- exports.addPinnedFunctionsToOnlyString = addPinnedFunctionsToOnlyString;
70
70
  async function prepare(context, options) {
71
71
  handlePublicDirectoryFlag(options);
72
72
  const configs = config.hostingConfig(options);
@@ -74,8 +74,9 @@ async function prepare(context, options) {
74
74
  return Promise.resolve();
75
75
  }
76
76
  const versions = await Promise.all(configs.map(async (config) => {
77
- var _a, _b;
78
- const labels = Object.assign({}, deploymentTool.labels());
77
+ const labels = {
78
+ ...deploymentTool.labels(),
79
+ };
79
80
  if (config.webFramework) {
80
81
  labels["firebase-web-framework"] = config.webFramework;
81
82
  }
@@ -88,8 +89,10 @@ async function prepare(context, options) {
88
89
  utils.logLabeledError("Hosting", msg);
89
90
  throw new Error(msg);
90
91
  }
91
- const runPins = (_b = (_a = config.rewrites) === null || _a === void 0 ? void 0 : _a.filter((r) => "run" in r && r.run.pinTag)) === null || _b === void 0 ? void 0 : _b.map((r) => r.run.serviceId);
92
- if (runPins === null || runPins === void 0 ? void 0 : runPins.length) {
92
+ const runPins = config.rewrites
93
+ ?.filter((r) => "run" in r && r.run.pinTag)
94
+ ?.map((r) => r.run.serviceId);
95
+ if (runPins?.length) {
93
96
  utils.logLabeledBullet("hosting", `The site ${clc.bold(config.site)} will pin rewrites to the current ` +
94
97
  `latest revision of service(s) ${runPins.map(clc.bold).join(",")}`);
95
98
  }
@@ -112,7 +115,6 @@ async function prepare(context, options) {
112
115
  context.hosting.deploys.push({ config, version });
113
116
  }
114
117
  }
115
- exports.prepare = prepare;
116
118
  function rewriteTarget(source) {
117
119
  if ("glob" in source) {
118
120
  return source.glob;
@@ -128,7 +130,6 @@ function rewriteTarget(source) {
128
130
  }
129
131
  }
130
132
  async function unsafePins(context, config) {
131
- var _a, _b, _c, _d;
132
133
  if ((context.hostingChannel || "live") === "live") {
133
134
  return [];
134
135
  }
@@ -140,7 +141,7 @@ async function unsafePins(context, config) {
140
141
  }
141
142
  if ("function" in rewrite && typeof rewrite.function === "object" && rewrite.function.pinTag) {
142
143
  const region = rewrite.function.region || "us-central1";
143
- const endpoint = (_a = (await backend.existingBackend(context)).endpoints[region]) === null || _a === void 0 ? void 0 : _a[rewrite.function.functionId];
144
+ const endpoint = (await backend.existingBackend(context)).endpoints[region]?.[rewrite.function.functionId];
144
145
  if (!endpoint) {
145
146
  continue;
146
147
  }
@@ -152,7 +153,7 @@ async function unsafePins(context, config) {
152
153
  }
153
154
  const channelConfig = await api.getChannel(context.projectId, config.site, "live");
154
155
  const existingUntaggedRewrites = {};
155
- for (const rewrite of ((_d = (_c = (_b = channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.release) === null || _b === void 0 ? void 0 : _b.version) === null || _c === void 0 ? void 0 : _c.config) === null || _d === void 0 ? void 0 : _d.rewrites) || []) {
156
+ for (const rewrite of channelConfig?.release?.version?.config?.rewrites || []) {
156
157
  if ("run" in rewrite && !rewrite.run.tag) {
157
158
  existingUntaggedRewrites[rewriteTarget(rewrite)] =
158
159
  `${rewrite.run.region}/${rewrite.run.serviceId}`;
@@ -160,4 +161,3 @@ async function unsafePins(context, config) {
160
161
  }
161
162
  return Object.keys(targetTaggedRewrites).filter((target) => targetTaggedRewrites[target] === existingUntaggedRewrites[target]);
162
163
  }
163
- exports.unsafePins = unsafePins;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.release = void 0;
3
+ exports.release = release;
4
4
  const api = require("../../hosting/api");
5
5
  const logger_1 = require("../../logger");
6
6
  const utils = require("../../utils");
@@ -37,4 +37,3 @@ async function release(context, options, functionsPayload) {
37
37
  utils.logLabeledSuccess(`hosting[${deploy.config.site}]`, "release complete");
38
38
  }));
39
39
  }
40
- exports.release = release;
@@ -48,7 +48,7 @@ const isDeployingWebFramework = (options) => {
48
48
  if (!config)
49
49
  return false;
50
50
  const normalizedConfig = Array.isArray(config) ? config : [config];
51
- const webFrameworksInConfig = normalizedConfig.filter((c) => c === null || c === void 0 ? void 0 : c.source);
51
+ const webFrameworksInConfig = normalizedConfig.filter((c) => c?.source);
52
52
  if (webFrameworksInConfig.length === 0)
53
53
  return false;
54
54
  if (!options.only)
@@ -64,7 +64,6 @@ const isDeployingWebFramework = (options) => {
64
64
  };
65
65
  exports.isDeployingWebFramework = isDeployingWebFramework;
66
66
  const deploy = async function (targetNames, options, customContext = {}) {
67
- var _a, _b, _c, _d;
68
67
  const projectId = (0, projectUtils_1.needProjectId)(options);
69
68
  const payload = {};
70
69
  const context = Object.assign({ projectId }, customContext);
@@ -145,10 +144,10 @@ const deploy = async function (targetNames, options, customContext = {}) {
145
144
  params[t] = "true";
146
145
  }
147
146
  void (0, track_1.trackGA4)("product_deploy", params, duration);
148
- const stats = (_a = context === null || context === void 0 ? void 0 : context.dataconnect) === null || _a === void 0 ? void 0 : _a.deployStats;
147
+ const stats = context?.dataconnect?.deployStats;
149
148
  if (stats) {
150
149
  const fdcParams = (0, context_1.deployStatsParams)(stats);
151
- void (0, track_1.trackGA4)("dataconnect_deploy", Object.assign(Object.assign({}, fdcParams), baseParams), duration);
150
+ void (0, track_1.trackGA4)("dataconnect_deploy", { ...fdcParams, ...baseParams }, duration);
152
151
  }
153
152
  }
154
153
  const successMessage = options.dryRun ? "Dry run complete!" : "Deploy complete!";
@@ -156,13 +155,13 @@ const deploy = async function (targetNames, options, customContext = {}) {
156
155
  (0, utils_1.logSuccess)((0, colorette_1.bold)((0, colorette_1.underline)(successMessage)));
157
156
  logger_1.logger.info();
158
157
  const deployedHosting = (0, lodash_1.includes)(targetNames, "hosting");
159
- logger_1.logger.info((0, colorette_1.bold)("Project Console:"), (0, utils_1.consoleUrl)((_b = options.project) !== null && _b !== void 0 ? _b : "_", "/overview"));
158
+ logger_1.logger.info((0, colorette_1.bold)("Project Console:"), (0, utils_1.consoleUrl)(options.project ?? "_", "/overview"));
160
159
  if (deployedHosting) {
161
- (0, lodash_1.each)((_c = context.hosting) === null || _c === void 0 ? void 0 : _c.deploys, (deploy) => {
160
+ (0, lodash_1.each)(context.hosting?.deploys, (deploy) => {
162
161
  logger_1.logger.info((0, colorette_1.bold)("Hosting URL:"), (0, utils_1.addSubdomain)((0, api_1.hostingOrigin)(), deploy.config.site));
163
162
  });
164
- const versionNames = (_d = context.hosting) === null || _d === void 0 ? void 0 : _d.deploys.map((deploy) => deploy.version);
165
- return { hosting: (versionNames === null || versionNames === void 0 ? void 0 : versionNames.length) === 1 ? versionNames[0] : versionNames };
163
+ const versionNames = context.hosting?.deploys.map((deploy) => deploy.version);
164
+ return { hosting: versionNames?.length === 1 ? versionNames[0] : versionNames };
166
165
  }
167
166
  else {
168
167
  return { hosting: undefined };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.lifecycleHooks = void 0;
3
+ exports.lifecycleHooks = lifecycleHooks;
4
4
  const utils = require("../utils");
5
5
  const clc = require("colorette");
6
6
  const childProcess = require("child_process");
@@ -44,13 +44,12 @@ function runCommand(command, childOptions) {
44
44
  });
45
45
  }
46
46
  function getChildEnvironment(target, overallOptions, config) {
47
- var _a;
48
47
  const projectId = needProjectId(overallOptions);
49
48
  const projectDir = overallOptions.projectRoot;
50
49
  let resourceDir;
51
50
  switch (target) {
52
51
  case "hosting":
53
- resourceDir = overallOptions.config.path((_a = config.public) !== null && _a !== void 0 ? _a : config.source);
52
+ resourceDir = overallOptions.config.path(config.public ?? config.source);
54
53
  break;
55
54
  case "functions":
56
55
  resourceDir = overallOptions.config.path(config.source);
@@ -120,7 +119,7 @@ function getReleventConfigs(target, options) {
120
119
  });
121
120
  if (target === "functions") {
122
121
  let onlyConfigs = [];
123
- const matched = onlyTargets.reduce((matched, target) => (Object.assign(Object.assign({}, matched), { [target]: false })), {});
122
+ const matched = onlyTargets.reduce((matched, target) => ({ ...matched, [target]: false }), {});
124
123
  for (const config of targetConfigs) {
125
124
  if (!config.codebase) {
126
125
  onlyConfigs.push(config);
@@ -153,4 +152,3 @@ function lifecycleHooks(target, hook) {
153
152
  }, Promise.resolve());
154
153
  };
155
154
  }
156
- exports.lifecycleHooks = lifecycleHooks;
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- async function default_1() { }
4
3
  exports.default = default_1;
4
+ async function default_1() { }
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.publishTemplate = exports.deployTemplate = exports.validateInputRemoteConfigTemplate = exports.getEtag = void 0;
3
+ exports.getEtag = getEtag;
4
+ exports.validateInputRemoteConfigTemplate = validateInputRemoteConfigTemplate;
5
+ exports.deployTemplate = deployTemplate;
6
+ exports.publishTemplate = publishTemplate;
4
7
  const api_1 = require("../../api");
5
8
  const apiv2_1 = require("../../apiv2");
6
9
  const error_1 = require("../../error");
@@ -21,7 +24,6 @@ async function getEtag(projectNumber, versionNumber) {
21
24
  });
22
25
  return response.response.headers.get("etag") || "";
23
26
  }
24
- exports.getEtag = getEtag;
25
27
  function validateInputRemoteConfigTemplate(template) {
26
28
  const templateCopy = JSON.parse(JSON.stringify(template));
27
29
  if (!templateCopy || templateCopy === "null" || templateCopy === "undefined") {
@@ -35,10 +37,9 @@ function validateInputRemoteConfigTemplate(template) {
35
37
  }
36
38
  return templateCopy;
37
39
  }
38
- exports.validateInputRemoteConfigTemplate = validateInputRemoteConfigTemplate;
39
40
  async function deployTemplate(projectNumber, template, etag, options) {
40
41
  const reqPath = `/projects/${projectNumber}/remoteConfig`;
41
- if (options === null || options === void 0 ? void 0 : options.force) {
42
+ if (options?.force) {
42
43
  etag = "*";
43
44
  }
44
45
  const response = await client.request({
@@ -54,7 +55,6 @@ async function deployTemplate(projectNumber, template, etag, options) {
54
55
  });
55
56
  return response.body;
56
57
  }
57
- exports.deployTemplate = deployTemplate;
58
58
  function publishTemplate(projectNumber, template, etag, options) {
59
59
  const temporaryTemplate = {
60
60
  conditions: template.conditions,
@@ -66,4 +66,3 @@ function publishTemplate(projectNumber, template, etag, options) {
66
66
  validTemplate = validateInputRemoteConfigTemplate(template);
67
67
  return deployTemplate(projectNumber, validTemplate, etag, options);
68
68
  }
69
- exports.publishTemplate = publishTemplate;
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
3
4
  const projectUtils_1 = require("../../projectUtils");
4
5
  const loadCJSON_1 = require("../../loadCJSON");
5
6
  const functions_1 = require("./functions");
6
7
  const functions_2 = require("./functions");
7
8
  async function default_1(context, options) {
8
- var _a;
9
9
  if (!context) {
10
10
  return;
11
11
  }
12
- const filePath = (_a = options.config.src.remoteconfig) === null || _a === void 0 ? void 0 : _a.template;
12
+ const filePath = options.config.src.remoteconfig?.template;
13
13
  if (!filePath) {
14
14
  return;
15
15
  }
@@ -20,4 +20,3 @@ async function default_1(context, options) {
20
20
  context.remoteconfigTemplate = template;
21
21
  return;
22
22
  }
23
- exports.default = default_1;
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
3
4
  const functions_1 = require("./functions");
4
5
  const projectUtils_1 = require("../../projectUtils");
5
6
  async function default_1(context, options) {
6
- if (!(context === null || context === void 0 ? void 0 : context.remoteconfigTemplate)) {
7
+ if (!context?.remoteconfigTemplate) {
7
8
  return;
8
9
  }
9
10
  const template = context.remoteconfigTemplate;
@@ -11,4 +12,3 @@ async function default_1(context, options) {
11
12
  const etag = await (0, functions_1.getEtag)(projectNumber);
12
13
  return (0, functions_1.publishTemplate)(projectNumber, template, etag, options);
13
14
  }
14
- exports.default = default_1;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
3
4
  const lodash_1 = require("lodash");
4
5
  const rulesDeploy_1 = require("../../rulesDeploy");
5
6
  async function default_1(context) {
@@ -9,4 +10,3 @@ async function default_1(context) {
9
10
  }
10
11
  await rulesDeploy.createRulesets(rulesDeploy_1.RulesetServiceType.FIREBASE_STORAGE);
11
12
  }
12
- exports.default = default_1;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
3
4
  const _ = require("lodash");
4
5
  const gcp = require("../../gcp");
5
6
  const rulesDeploy_1 = require("../../rulesDeploy");
@@ -49,4 +50,3 @@ async function default_1(context, options) {
49
50
  _.set(context, "storage.rulesDeploy", rulesDeploy);
50
51
  await rulesDeploy.compile();
51
52
  }
52
- exports.default = default_1;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
3
4
  const lodash_1 = require("lodash");
4
5
  const rulesDeploy_1 = require("../../rulesDeploy");
5
6
  async function default_1(context, options) {
@@ -24,4 +25,3 @@ async function default_1(context, options) {
24
25
  }));
25
26
  return toRelease.map((r) => r.bucket);
26
27
  }
27
- exports.default = default_1;
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isFirebaseManaged = exports.labels = exports.value = exports.BASE = void 0;
3
+ exports.BASE = void 0;
4
+ exports.value = value;
5
+ exports.labels = labels;
6
+ exports.isFirebaseManaged = isFirebaseManaged;
4
7
  exports.BASE = "cli-firebase";
5
8
  function value() {
6
9
  if (!process.env.FIREBASE_DEPLOY_AGENT) {
@@ -8,15 +11,11 @@ function value() {
8
11
  }
9
12
  return [exports.BASE, process.env.FIREBASE_DEPLOY_AGENT].join("--");
10
13
  }
11
- exports.value = value;
12
14
  function labels() {
13
15
  return {
14
16
  "deployment-tool": value(),
15
17
  };
16
18
  }
17
- exports.labels = labels;
18
19
  function isFirebaseManaged(labels) {
19
- var _a;
20
- return (_a = labels === null || labels === void 0 ? void 0 : labels["deployment-tool"]) === null || _a === void 0 ? void 0 : _a.startsWith(exports.BASE);
20
+ return labels?.["deployment-tool"]?.startsWith(exports.BASE);
21
21
  }
22
- exports.isFirebaseManaged = isFirebaseManaged;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.detectProjectRoot = void 0;
3
+ exports.detectProjectRoot = detectProjectRoot;
4
4
  const fsutils_1 = require("./fsutils");
5
5
  const error_1 = require("./error");
6
6
  const path_1 = require("path");
@@ -25,4 +25,3 @@ function detectProjectRoot(options) {
25
25
  }
26
26
  return projectRootDir;
27
27
  }
28
- exports.detectProjectRoot = detectProjectRoot;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.downloadToTmp = void 0;
3
+ exports.downloadToTmp = downloadToTmp;
4
4
  const url_1 = require("url");
5
5
  const fs = require("fs-extra");
6
6
  const ProgressBar = require("progress");
@@ -30,9 +30,8 @@ async function downloadToTmp(remoteUrl, auth = false) {
30
30
  bar.tick(chunk.length);
31
31
  });
32
32
  await new Promise((resolve) => {
33
- writeStream.on("finish", resolve);
33
+ writeStream.on("finish", () => resolve());
34
34
  res.body.pipe(writeStream);
35
35
  });
36
36
  return tmpfile.name;
37
37
  }
38
- exports.downloadToTmp = downloadToTmp;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getProjectAdminSdkConfigOrCached = exports.constructDefaultAdminSdkConfig = void 0;
3
+ exports.constructDefaultAdminSdkConfig = constructDefaultAdminSdkConfig;
4
+ exports.getProjectAdminSdkConfigOrCached = getProjectAdminSdkConfigOrCached;
4
5
  const api_1 = require("../api");
5
6
  const apiv2 = require("../apiv2");
6
7
  const configstore_1 = require("../configstore");
@@ -15,7 +16,6 @@ function constructDefaultAdminSdkConfig(projectId) {
15
16
  storageBucket: process.env.STORAGE_BUCKET_URL || `${projectId}.appspot.com`,
16
17
  };
17
18
  }
18
- exports.constructDefaultAdminSdkConfig = constructDefaultAdminSdkConfig;
19
19
  async function getProjectAdminSdkConfigOrCached(projectId) {
20
20
  if (constants_1.Constants.isDemoProject(projectId)) {
21
21
  return constructDefaultAdminSdkConfig(projectId);
@@ -30,7 +30,6 @@ async function getProjectAdminSdkConfigOrCached(projectId) {
30
30
  return getCachedAdminSdkConfig(projectId);
31
31
  }
32
32
  }
33
- exports.getProjectAdminSdkConfigOrCached = getProjectAdminSdkConfigOrCached;
34
33
  async function getProjectAdminSdkConfig(projectId) {
35
34
  const apiClient = new apiv2.Client({
36
35
  auth: true,
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getLocalAppHostingConfiguration = void 0;
3
+ exports.getLocalAppHostingConfiguration = getLocalAppHostingConfiguration;
4
4
  const path_1 = require("path");
5
5
  const config_1 = require("../../apphosting/config");
6
6
  const yaml_1 = require("../../apphosting/yaml");
@@ -25,4 +25,3 @@ async function getLocalAppHostingConfiguration(backendDir) {
25
25
  }
26
26
  return output;
27
27
  }
28
- exports.getLocalAppHostingConfiguration = getLocalAppHostingConfiguration;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.detectPackageManagerStartCommand = exports.detectPackageManager = exports.logger = void 0;
3
+ exports.logger = void 0;
4
+ exports.detectPackageManager = detectPackageManager;
5
+ exports.detectPackageManagerStartCommand = detectPackageManagerStartCommand;
4
6
  const fs_extra_1 = require("fs-extra");
5
7
  const path_1 = require("path");
6
8
  const emulatorLogger_1 = require("../emulatorLogger");
@@ -19,7 +21,6 @@ async function detectPackageManager(rootdir) {
19
21
  }
20
22
  throw new error_1.FirebaseError("Unsupported package manager");
21
23
  }
22
- exports.detectPackageManager = detectPackageManager;
23
24
  async function detectPackageManagerStartCommand(rootDir) {
24
25
  try {
25
26
  const packageManager = await detectPackageManager(rootDir);
@@ -29,4 +30,3 @@ async function detectPackageManagerStartCommand(rootDir) {
29
30
  throw new error_1.FirebaseError("Failed to auto-detect your project's start command. Consider manually setting the start command by setting `firebase.json#emulators.apphosting.startCommand`");
30
31
  }
31
32
  }
32
- exports.detectPackageManagerStartCommand = detectPackageManagerStartCommand;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getEmulatorEnvs = exports.start = void 0;
3
+ exports.start = start;
4
+ exports.getEmulatorEnvs = getEmulatorEnvs;
4
5
  const net_1 = require("net");
5
6
  const clc = require("colorette");
6
7
  const portUtils_1 = require("../portUtils");
@@ -25,7 +26,6 @@ const semver_1 = require("semver");
25
26
  const secretResourceRegex = /^projects\/([^/]+)\/secrets\/([^/]+)(?:\/versions\/((?:latest)|\d+))?$/;
26
27
  const secretShorthandRegex = /^([^/@]+)(?:@((?:latest)|\d+))?$/;
27
28
  async function loadSecret(project, name) {
28
- var _a, _b, _c, _d;
29
29
  let projectId;
30
30
  let secretId;
31
31
  let version;
@@ -52,7 +52,7 @@ async function loadSecret(project, name) {
52
52
  return await secrets.accessSecretVersion(projectId, secretId, version);
53
53
  }
54
54
  catch (err) {
55
- if (((_a = err === null || err === void 0 ? void 0 : err.original) === null || _a === void 0 ? void 0 : _a.code) === 403 || ((_d = (_c = (_b = err === null || err === void 0 ? void 0 : err.original) === null || _b === void 0 ? void 0 : _b.context) === null || _c === void 0 ? void 0 : _c.response) === null || _d === void 0 ? void 0 : _d.statusCode) === 403) {
55
+ if (err?.original?.code === 403 || err?.original?.context?.response?.statusCode === 403) {
56
56
  (0, utils_1.logLabeledError)(types_1.Emulators.APPHOSTING, `Permission denied to access secret ${secretId}. Use ` +
57
57
  `${clc.bold("firebase apphosting:secrets:grantaccess")} to get permissions.`);
58
58
  }
@@ -60,16 +60,15 @@ async function loadSecret(project, name) {
60
60
  }
61
61
  }
62
62
  async function start(options) {
63
- var _a, _b;
64
63
  const hostname = constants_1.DEFAULT_HOST;
65
- let port = (_a = options === null || options === void 0 ? void 0 : options.port) !== null && _a !== void 0 ? _a : constants_1.DEFAULT_PORTS.apphosting;
64
+ let port = options?.port ?? constants_1.DEFAULT_PORTS.apphosting;
66
65
  while (!(await availablePort(hostname, port))) {
67
66
  port += 1;
68
67
  }
69
- const backendRoot = (0, projectPath_1.resolveProjectPath)({}, (_b = options === null || options === void 0 ? void 0 : options.rootDirectory) !== null && _b !== void 0 ? _b : "./");
68
+ const backendRoot = (0, projectPath_1.resolveProjectPath)({}, options?.rootDirectory ?? "./");
70
69
  let startCommand;
71
- if (options === null || options === void 0 ? void 0 : options.startCommand) {
72
- startCommand = options === null || options === void 0 ? void 0 : options.startCommand;
70
+ if (options?.startCommand) {
71
+ startCommand = options?.startCommand;
73
72
  if (startCommand.includes("--port") || startCommand.includes(" -p ")) {
74
73
  throw new error_1.FirebaseError("Specifying a port in the start command is not supported by the apphosting emulator");
75
74
  }
@@ -85,15 +84,24 @@ async function start(options) {
85
84
  const apphostingLocalConfig = await (0, config_1.getLocalAppHostingConfiguration)(backendRoot);
86
85
  const resolveEnv = Object.entries(apphostingLocalConfig.env).map(async ([key, value]) => [
87
86
  key,
88
- value.value ? value.value : await loadSecret(options === null || options === void 0 ? void 0 : options.projectId, value.secret),
87
+ value.value ? value.value : await loadSecret(options?.projectId, value.secret),
89
88
  ]);
90
- const environmentVariablesToInject = Object.assign(Object.assign(Object.assign({ NODE_ENV: process.env.NODE_ENV }, getEmulatorEnvs()), Object.fromEntries(await Promise.all(resolveEnv))), { FIREBASE_APP_HOSTING: "1", X_GOOGLE_TARGET_PLATFORM: "fah", GCLOUD_PROJECT: options === null || options === void 0 ? void 0 : options.projectId, PROJECT_ID: options === null || options === void 0 ? void 0 : options.projectId, PORT: port.toString() });
89
+ const environmentVariablesToInject = {
90
+ NODE_ENV: process.env.NODE_ENV,
91
+ ...getEmulatorEnvs(),
92
+ ...Object.fromEntries(await Promise.all(resolveEnv)),
93
+ FIREBASE_APP_HOSTING: "1",
94
+ X_GOOGLE_TARGET_PLATFORM: "fah",
95
+ GCLOUD_PROJECT: options?.projectId,
96
+ PROJECT_ID: options?.projectId,
97
+ PORT: port.toString(),
98
+ };
91
99
  const packageManager = await (0, developmentServer_1.detectPackageManager)(backendRoot).catch(() => undefined);
92
100
  if (packageManager === "pnpm") {
93
101
  (0, utils_1.logLabeledWarning)("apphosting", `Firebase JS SDK autoinit does not currently support PNPM.`);
94
102
  }
95
103
  else {
96
- const webappConfig = await getBackendAppConfig(options === null || options === void 0 ? void 0 : options.projectId, options === null || options === void 0 ? void 0 : options.backendId);
104
+ const webappConfig = await getBackendAppConfig(options?.projectId, options?.backendId);
97
105
  if (webappConfig) {
98
106
  environmentVariablesToInject["FIREBASE_WEBAPP_CONFIG"] || (environmentVariablesToInject["FIREBASE_WEBAPP_CONFIG"] = JSON.stringify(webappConfig));
99
107
  environmentVariablesToInject["FIREBASE_CONFIG"] || (environmentVariablesToInject["FIREBASE_CONFIG"] = JSON.stringify({
@@ -111,7 +119,6 @@ async function start(options) {
111
119
  .then(() => developmentServer_2.logger.logLabeled("BULLET", types_1.Emulators.APPHOSTING, `Dev Server stopped`));
112
120
  return { hostname, port };
113
121
  }
114
- exports.start = start;
115
122
  function availablePort(host, port) {
116
123
  return (0, portUtils_1.checkListenable)({
117
124
  address: host,
@@ -125,7 +132,6 @@ function getEmulatorEnvs() {
125
132
  (0, env_1.setEnvVarsForEmulators)(envs, emulatorInfos);
126
133
  return envs;
127
134
  }
128
- exports.getEmulatorEnvs = getEmulatorEnvs;
129
135
  async function tripFirebasePostinstall(rootDirectory, env) {
130
136
  const npmLs = (0, child_process_1.spawnSync)("npm", ["ls", "@firebase/util", "--json", "--long"], {
131
137
  cwd: rootDirectory,
@@ -168,7 +174,7 @@ async function getBackendAppConfig(projectId, backendId) {
168
174
  return undefined;
169
175
  }
170
176
  const backendsList = await apphosting.listBackends(projectId, "-").catch(() => undefined);
171
- const backend = backendsList === null || backendsList === void 0 ? void 0 : backendsList.backends.find((b) => apphosting.parseBackendName(b.name).id === backendId);
177
+ const backend = backendsList?.backends.find((b) => apphosting.parseBackendName(b.name).id === backendId);
172
178
  if (!backend) {
173
179
  (0, utils_1.logLabeledWarning)("apphosting", `Unable to lookup details for backend ${backendId}. Firebase SDK autoinit will not be available.`);
174
180
  return undefined;
@@ -26,7 +26,7 @@ class AuthCloudFunction {
26
26
  catch (e) {
27
27
  err = e;
28
28
  }
29
- if (err || (res === null || res === void 0 ? void 0 : res.status) !== 200) {
29
+ if (err || res?.status !== 200) {
30
30
  this.logger.logLabeled("WARN", "functions", `Firebase Authentication function was not triggered due to emulation error. Please file a bug.`);
31
31
  }
32
32
  }
@@ -44,7 +44,6 @@ class AuthCloudFunction {
44
44
  };
45
45
  }
46
46
  createUserInfoPayload(user) {
47
- var _a;
48
47
  return {
49
48
  uid: user.localId,
50
49
  email: user.email,
@@ -62,7 +61,7 @@ class AuthCloudFunction {
62
61
  : undefined,
63
62
  },
64
63
  customClaims: JSON.parse(user.customAttributes || "{}"),
65
- providerData: (_a = user.providerUserInfo) === null || _a === void 0 ? void 0 : _a.map((info) => this.createProviderUserInfoPayload(info)),
64
+ providerData: user.providerUserInfo?.map((info) => this.createProviderUserInfoPayload(info)),
66
65
  tenantId: user.tenantId,
67
66
  mfaInfo: user.mfaInfo,
68
67
  };
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assert = exports.NotImplementedError = exports.InternalError = exports.UnknownError = exports.NotFoundError = exports.PermissionDeniedError = exports.UnauthenticatedError = exports.InvalidArgumentError = exports.BadRequestError = exports.ApiError = void 0;
3
+ exports.NotImplementedError = exports.InternalError = exports.UnknownError = exports.NotFoundError = exports.PermissionDeniedError = exports.UnauthenticatedError = exports.InvalidArgumentError = exports.BadRequestError = exports.ApiError = void 0;
4
+ exports.assert = assert;
4
5
  const errors_1 = require("exegesis/lib/errors");
5
6
  class ApiError extends errors_1.ExtendableError {
6
7
  constructor(code, status, message, reasonOrErrors) {
@@ -74,4 +75,3 @@ function assert(assertion, error) {
74
75
  throw new BadRequestError(error);
75
76
  }
76
77
  }
77
- exports.assert = assert;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerHandlers = void 0;
3
+ exports.registerHandlers = registerHandlers;
4
4
  const url_1 = require("url");
5
5
  const operations_1 = require("./operations");
6
6
  const errors_1 = require("./errors");
@@ -29,7 +29,7 @@ function registerHandlers(app, getProjectStateByApiKey) {
29
29
  case "recoverEmail": {
30
30
  const oob = state.validateOobCode(oobCode);
31
31
  const RETRY_INSTRUCTIONS = "If you're trying to test the reverting email flow, try changing the email again to generate a new link.";
32
- if ((oob === null || oob === void 0 ? void 0 : oob.requestType) !== "RECOVER_EMAIL") {
32
+ if (oob?.requestType !== "RECOVER_EMAIL") {
33
33
  return res.status(400).json({
34
34
  authEmulator: {
35
35
  error: `Requested mode does not match the OOB code provided.`,
@@ -63,7 +63,7 @@ function registerHandlers(app, getProjectStateByApiKey) {
63
63
  }
64
64
  case "resetPassword": {
65
65
  const oob = state.validateOobCode(oobCode);
66
- if ((oob === null || oob === void 0 ? void 0 : oob.requestType) !== "PASSWORD_RESET") {
66
+ if (oob?.requestType !== "PASSWORD_RESET") {
67
67
  return res.status(400).json({
68
68
  authEmulator: {
69
69
  error: `Your request to reset your password has expired or the link has already been used.`,
@@ -290,7 +290,6 @@ function registerHandlers(app, getProjectStateByApiKey) {
290
290
  `);
291
291
  });
292
292
  }
293
- exports.registerHandlers = registerHandlers;
294
293
  function createFakeClaims(info) {
295
294
  const claims = {
296
295
  sub: info.rawId,