firebase-tools 15.1.0 → 15.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (523) hide show
  1. package/lib/accountExporter.js +3 -5
  2. package/lib/accountImporter.js +4 -5
  3. package/lib/api.js +3 -3
  4. package/lib/apiv2.js +9 -13
  5. package/lib/appUtils.js +19 -21
  6. package/lib/appdistribution/client.js +4 -8
  7. package/lib/appdistribution/distribution.js +4 -4
  8. package/lib/appdistribution/options-parser-util.js +8 -9
  9. package/lib/appdistribution/types.js +2 -2
  10. package/lib/appdistribution/yaml_helper.js +33 -17
  11. package/lib/apphosting/app.js +8 -13
  12. package/lib/apphosting/backend.js +34 -24
  13. package/lib/apphosting/config.js +14 -14
  14. package/lib/apphosting/githubConnections.js +38 -35
  15. package/lib/apphosting/localbuilds.js +4 -6
  16. package/lib/apphosting/repo.js +24 -20
  17. package/lib/apphosting/rollout.js +12 -5
  18. package/lib/apphosting/secrets/dialogs.js +9 -9
  19. package/lib/apphosting/secrets/index.js +9 -11
  20. package/lib/apphosting/utils.js +2 -3
  21. package/lib/apphosting/yaml.js +12 -11
  22. package/lib/apptesting/ensureProjectConfigured.js +1 -2
  23. package/lib/apptesting/invokeTests.js +2 -3
  24. package/lib/apptesting/parseTestFiles.js +5 -6
  25. package/lib/apptesting/types.js +2 -2
  26. package/lib/archiveDirectory.js +1 -2
  27. package/lib/auth.js +36 -40
  28. package/lib/bin/cli.js +2 -3
  29. package/lib/bin/mcp.js +1 -2
  30. package/lib/checkMinRequiredVersion.js +1 -2
  31. package/lib/checkValidTargetFilters.js +1 -2
  32. package/lib/command.js +6 -9
  33. package/lib/commands/appdistribution-testers-list.js +2 -3
  34. package/lib/commands/apphosting-backends-list.js +4 -6
  35. package/lib/commands/apphosting-builds-create.js +2 -3
  36. package/lib/commands/apphosting-builds-get.js +1 -2
  37. package/lib/commands/apphosting-rollouts-list.js +1 -2
  38. package/lib/commands/apps-init.js +1 -1
  39. package/lib/commands/{apptesting-execute.js → apptesting-wata.js} +3 -4
  40. package/lib/commands/crashlytics-symbols-upload.js +2 -2
  41. package/lib/commands/dataconnect-execute.js +4 -4
  42. package/lib/commands/dataconnect-sdk-generate.js +5 -6
  43. package/lib/commands/dataconnect-services-list.js +7 -8
  44. package/lib/commands/dataconnect-sql-diff.js +1 -2
  45. package/lib/commands/dataconnect-sql-migrate.js +4 -3
  46. package/lib/commands/dataconnect-sql-setup.js +2 -2
  47. package/lib/commands/dataconnect-sql-shell.js +5 -1
  48. package/lib/commands/emulators-start.js +1 -2
  49. package/lib/commands/ext-configure.js +6 -4
  50. package/lib/commands/ext-dev-list.js +2 -3
  51. package/lib/commands/ext-dev-upload.js +2 -2
  52. package/lib/commands/ext-export.js +1 -1
  53. package/lib/commands/ext-info.js +2 -3
  54. package/lib/commands/ext-install.js +5 -7
  55. package/lib/commands/firestore-backups-list.js +1 -2
  56. package/lib/commands/firestore-backups-schedules-list.js +1 -2
  57. package/lib/commands/firestore-indexes-list.js +1 -2
  58. package/lib/commands/firestore-utils.js +1 -2
  59. package/lib/commands/functions-artifacts-setpolicy.js +1 -2
  60. package/lib/commands/functions-config-export.js +2 -3
  61. package/lib/commands/hosting-channel-deploy.js +2 -2
  62. package/lib/commands/hosting-clone.js +2 -3
  63. package/lib/commands/hosting-sites-create.js +1 -1
  64. package/lib/commands/index.js +2 -3
  65. package/lib/commands/init.js +4 -5
  66. package/lib/commands/internaltesting-functions-discover.js +1 -1
  67. package/lib/commands/login.js +4 -5
  68. package/lib/commands/logout.js +3 -3
  69. package/lib/commands/projects-create.js +1 -1
  70. package/lib/commands/remoteconfig-experiments-list.js +2 -3
  71. package/lib/commands/remoteconfig-get.js +1 -1
  72. package/lib/commands/remoteconfig-rollback.js +1 -2
  73. package/lib/commands/remoteconfig-rollouts-list.js +2 -3
  74. package/lib/commands/remoteconfig-versions-list.js +3 -4
  75. package/lib/commands/use.js +3 -3
  76. package/lib/config.js +4 -5
  77. package/lib/crashlytics/buildToolsJarHelper.js +3 -5
  78. package/lib/crashlytics/events.js +4 -7
  79. package/lib/crashlytics/filters.js +10 -12
  80. package/lib/crashlytics/issues.js +2 -3
  81. package/lib/crashlytics/notes.js +3 -4
  82. package/lib/crashlytics/reports.js +21 -15
  83. package/lib/crashlytics/types.js +7 -7
  84. package/lib/crashlytics/utils.js +4 -4
  85. package/lib/database/api.js +2 -3
  86. package/lib/database/import.js +4 -4
  87. package/lib/database/metadata.js +5 -6
  88. package/lib/database/rulesConfig.js +2 -3
  89. package/lib/dataconnect/build.js +10 -13
  90. package/lib/dataconnect/checkIam.js +1 -2
  91. package/lib/dataconnect/client.js +15 -18
  92. package/lib/dataconnect/dataplaneClient.js +6 -6
  93. package/lib/dataconnect/ensureApis.js +2 -3
  94. package/lib/dataconnect/errors.js +8 -11
  95. package/lib/dataconnect/filters.js +2 -3
  96. package/lib/dataconnect/freeTrial.js +3 -4
  97. package/lib/dataconnect/graphqlError.js +5 -8
  98. package/lib/dataconnect/load.js +10 -11
  99. package/lib/dataconnect/names.js +14 -18
  100. package/lib/dataconnect/prompts.js +1 -2
  101. package/lib/dataconnect/provisionCloudSql.js +13 -17
  102. package/lib/dataconnect/schemaMigration.js +60 -27
  103. package/lib/dataconnect/types.js +10 -12
  104. package/lib/dataconnect/webhook.js +3 -3
  105. package/lib/defaultCredentials.js +3 -4
  106. package/lib/deploy/apphosting/deploy.js +2 -3
  107. package/lib/deploy/apphosting/prepare.js +3 -5
  108. package/lib/deploy/apphosting/release.js +1 -1
  109. package/lib/deploy/apphosting/util.js +1 -2
  110. package/lib/deploy/database/deploy.js +1 -2
  111. package/lib/deploy/database/prepare.js +1 -2
  112. package/lib/deploy/database/release.js +1 -2
  113. package/lib/deploy/dataconnect/context.js +15 -4
  114. package/lib/deploy/dataconnect/deploy.js +5 -6
  115. package/lib/deploy/dataconnect/prepare.js +7 -9
  116. package/lib/deploy/dataconnect/release.js +7 -10
  117. package/lib/deploy/extensions/deploy.js +7 -9
  118. package/lib/deploy/extensions/deploymentSummary.js +6 -7
  119. package/lib/deploy/extensions/planner.js +15 -18
  120. package/lib/deploy/extensions/prepare.js +9 -11
  121. package/lib/deploy/extensions/release.js +10 -12
  122. package/lib/deploy/extensions/secrets.js +8 -11
  123. package/lib/deploy/extensions/tasks.js +6 -8
  124. package/lib/deploy/extensions/v2FunctionHelper.js +2 -3
  125. package/lib/deploy/extensions/validate.js +1 -2
  126. package/lib/deploy/firestore/deploy.js +3 -5
  127. package/lib/deploy/firestore/prepare.js +2 -3
  128. package/lib/deploy/firestore/release.js +3 -4
  129. package/lib/deploy/functions/backend.js +52 -42
  130. package/lib/deploy/functions/build.js +41 -15
  131. package/lib/deploy/functions/cache/applyHash.js +3 -5
  132. package/lib/deploy/functions/cache/hash.js +4 -5
  133. package/lib/deploy/functions/cel.js +3 -3
  134. package/lib/deploy/functions/checkIam.js +8 -8
  135. package/lib/deploy/functions/containerCleaner.js +10 -6
  136. package/lib/deploy/functions/deploy.js +6 -8
  137. package/lib/deploy/functions/ensure.js +6 -9
  138. package/lib/deploy/functions/functionsDeployHelper.js +10 -11
  139. package/lib/deploy/functions/params.js +10 -10
  140. package/lib/deploy/functions/prepare.js +41 -36
  141. package/lib/deploy/functions/prepareFunctionsUpload.js +24 -10
  142. package/lib/deploy/functions/pricing.js +3 -3
  143. package/lib/deploy/functions/prompts.js +7 -10
  144. package/lib/deploy/functions/release/executor.js +5 -6
  145. package/lib/deploy/functions/release/fabricator.js +76 -29
  146. package/lib/deploy/functions/release/index.js +23 -14
  147. package/lib/deploy/functions/release/planner.js +15 -14
  148. package/lib/deploy/functions/release/reporter.js +20 -20
  149. package/lib/deploy/functions/release/sourceTokenScraper.js +4 -5
  150. package/lib/deploy/functions/remoteSource.js +3 -4
  151. package/lib/deploy/functions/runtimes/discovery/index.js +9 -12
  152. package/lib/deploy/functions/runtimes/discovery/parsing.js +2 -3
  153. package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +29 -10
  154. package/lib/deploy/functions/runtimes/index.js +1 -2
  155. package/lib/deploy/functions/runtimes/node/index.js +18 -9
  156. package/lib/deploy/functions/runtimes/node/parseRuntimeAndValidateSDK.js +2 -2
  157. package/lib/deploy/functions/runtimes/node/validate.js +1 -2
  158. package/lib/deploy/functions/runtimes/node/versioning.js +6 -7
  159. package/lib/deploy/functions/runtimes/python/index.js +12 -12
  160. package/lib/deploy/functions/runtimes/supported/index.js +5 -6
  161. package/lib/deploy/functions/services/auth.js +49 -36
  162. package/lib/deploy/functions/services/database.js +1 -2
  163. package/lib/deploy/functions/services/dataconnect.js +16 -2
  164. package/lib/deploy/functions/services/firebaseAlerts.js +1 -2
  165. package/lib/deploy/functions/services/firestore.js +3 -5
  166. package/lib/deploy/functions/services/index.js +2 -2
  167. package/lib/deploy/functions/services/remoteConfig.js +1 -2
  168. package/lib/deploy/functions/services/storage.js +3 -5
  169. package/lib/deploy/functions/services/testLab.js +1 -2
  170. package/lib/deploy/functions/triggerRegionHelper.js +1 -2
  171. package/lib/deploy/functions/validate.js +12 -11
  172. package/lib/deploy/hosting/convertConfig.js +38 -22
  173. package/lib/deploy/hosting/deploy.js +4 -7
  174. package/lib/deploy/hosting/hashcache.js +2 -3
  175. package/lib/deploy/hosting/prepare.js +14 -14
  176. package/lib/deploy/hosting/release.js +1 -2
  177. package/lib/deploy/index.js +7 -8
  178. package/lib/deploy/lifecycleHooks.js +3 -5
  179. package/lib/deploy/remoteconfig/deploy.js +1 -1
  180. package/lib/deploy/remoteconfig/functions.js +5 -6
  181. package/lib/deploy/remoteconfig/prepare.js +2 -3
  182. package/lib/deploy/remoteconfig/release.js +2 -2
  183. package/lib/deploy/storage/deploy.js +1 -1
  184. package/lib/deploy/storage/prepare.js +1 -1
  185. package/lib/deploy/storage/release.js +1 -1
  186. package/lib/deploymentTool.js +5 -6
  187. package/lib/detectProjectRoot.js +1 -2
  188. package/lib/downloadUtils.js +2 -3
  189. package/lib/emulator/adminSdkConfig.js +2 -3
  190. package/lib/emulator/apphosting/config.js +1 -2
  191. package/lib/emulator/apphosting/developmentServer.js +3 -3
  192. package/lib/emulator/apphosting/serve.js +20 -14
  193. package/lib/emulator/auth/cloudFunctions.js +2 -3
  194. package/lib/emulator/auth/errors.js +2 -2
  195. package/lib/emulator/auth/handlers.js +3 -4
  196. package/lib/emulator/auth/index.js +6 -6
  197. package/lib/emulator/auth/operations.js +171 -129
  198. package/lib/emulator/auth/server.js +30 -22
  199. package/lib/emulator/auth/state.js +26 -36
  200. package/lib/emulator/auth/utils.js +12 -13
  201. package/lib/emulator/commandUtils.js +20 -20
  202. package/lib/emulator/controller.js +32 -29
  203. package/lib/emulator/databaseEmulator.js +1 -2
  204. package/lib/emulator/dataconnect/pgliteServer.js +48 -104
  205. package/lib/emulator/dataconnectEmulator.js +6 -9
  206. package/lib/emulator/download.js +2 -3
  207. package/lib/emulator/downloadableEmulatorInfo.json +7 -7
  208. package/lib/emulator/downloadableEmulators.js +49 -24
  209. package/lib/emulator/emulatorLogger.js +19 -4
  210. package/lib/emulator/env.js +6 -8
  211. package/lib/emulator/eventarcEmulator.js +2 -3
  212. package/lib/emulator/eventarcEmulatorUtils.js +3 -6
  213. package/lib/emulator/extensions/postinstall.js +1 -2
  214. package/lib/emulator/extensions/validation.js +4 -7
  215. package/lib/emulator/extensionsEmulator.js +6 -9
  216. package/lib/emulator/functionsEmulator.js +89 -46
  217. package/lib/emulator/functionsEmulatorRuntime.js +1 -1
  218. package/lib/emulator/functionsEmulatorShared.js +30 -30
  219. package/lib/emulator/functionsEmulatorShell.js +4 -6
  220. package/lib/emulator/functionsEmulatorUtils.js +8 -9
  221. package/lib/emulator/functionsRuntimeWorker.js +18 -9
  222. package/lib/emulator/hub.js +41 -34
  223. package/lib/emulator/hubClient.js +1 -1
  224. package/lib/emulator/initEmulators.js +2 -3
  225. package/lib/emulator/loggingEmulator.js +2 -2
  226. package/lib/emulator/portUtils.js +4 -5
  227. package/lib/emulator/registry.js +10 -4
  228. package/lib/emulator/shared/request.js +1 -2
  229. package/lib/emulator/storage/apis/firebase.js +16 -20
  230. package/lib/emulator/storage/apis/gcloud.js +6 -9
  231. package/lib/emulator/storage/apis/shared.js +1 -2
  232. package/lib/emulator/storage/crc.js +2 -3
  233. package/lib/emulator/storage/files.js +18 -41
  234. package/lib/emulator/storage/metadata.js +10 -4
  235. package/lib/emulator/storage/multipart.js +1 -2
  236. package/lib/emulator/storage/rfc.js +1 -2
  237. package/lib/emulator/storage/rules/config.js +1 -2
  238. package/lib/emulator/storage/rules/manager.js +3 -5
  239. package/lib/emulator/storage/rules/runtime.js +15 -13
  240. package/lib/emulator/storage/rules/types.js +2 -2
  241. package/lib/emulator/storage/rules/utils.js +5 -6
  242. package/lib/emulator/storage/server.js +1 -2
  243. package/lib/emulator/storage/upload.js +3 -4
  244. package/lib/emulator/taskQueue.js +11 -4
  245. package/lib/emulator/tasksEmulator.js +11 -12
  246. package/lib/emulator/types.js +6 -6
  247. package/lib/emulator/ui.js +6 -1
  248. package/lib/ensureApiEnabled.js +7 -9
  249. package/lib/env.js +2 -3
  250. package/lib/error.js +11 -13
  251. package/lib/errorOut.js +1 -2
  252. package/lib/experiments.js +15 -18
  253. package/lib/extensions/askUserForEventsConfig.js +12 -13
  254. package/lib/extensions/askUserForParam.js +11 -12
  255. package/lib/extensions/change-log.js +4 -5
  256. package/lib/extensions/checkProjectBilling.js +1 -2
  257. package/lib/extensions/diagnose.js +1 -2
  258. package/lib/extensions/displayExtensionInfo.js +25 -32
  259. package/lib/extensions/emulator/optionsHelper.js +6 -8
  260. package/lib/extensions/emulator/specHelper.js +15 -16
  261. package/lib/extensions/emulator/triggerHelper.js +3 -5
  262. package/lib/extensions/etags.js +2 -3
  263. package/lib/extensions/export.js +7 -9
  264. package/lib/extensions/extensionsApi.js +23 -29
  265. package/lib/extensions/extensionsHelper.js +52 -80
  266. package/lib/extensions/listExtensions.js +3 -5
  267. package/lib/extensions/localHelper.js +5 -5
  268. package/lib/extensions/manifest.js +15 -16
  269. package/lib/extensions/metricsUtils.js +3 -4
  270. package/lib/extensions/paramHelper.js +21 -18
  271. package/lib/extensions/provisioningHelper.js +17 -21
  272. package/lib/extensions/publishHelpers.js +1 -2
  273. package/lib/extensions/publisherApi.js +11 -13
  274. package/lib/extensions/refs.js +6 -7
  275. package/lib/extensions/runtimes/common.js +18 -19
  276. package/lib/extensions/runtimes/node.js +5 -6
  277. package/lib/extensions/secretsUtils.js +8 -8
  278. package/lib/extensions/tos.js +7 -8
  279. package/lib/extensions/types.js +3 -3
  280. package/lib/extensions/updateHelper.js +6 -7
  281. package/lib/extensions/utils.js +6 -8
  282. package/lib/extensions/versionHelper.js +1 -2
  283. package/lib/extensions/warnings.js +6 -8
  284. package/lib/fetchMOTD.js +1 -2
  285. package/lib/fetchWebSetup.js +3 -4
  286. package/lib/filterTargets.js +1 -2
  287. package/lib/firebaseConfigValidate.js +2 -3
  288. package/lib/firestore/api-sort.js +8 -9
  289. package/lib/firestore/api-types.js +15 -15
  290. package/lib/firestore/api.js +15 -13
  291. package/lib/firestore/backupUtils.js +3 -3
  292. package/lib/firestore/checkDatabaseType.js +1 -2
  293. package/lib/firestore/delete.js +1 -2
  294. package/lib/firestore/encodeFirestoreValue.js +1 -2
  295. package/lib/firestore/fsConfig.js +1 -2
  296. package/lib/firestore/options.js +1 -1
  297. package/lib/firestore/util.js +5 -6
  298. package/lib/firestore/validator.js +4 -5
  299. package/lib/frameworks/angular/index.js +14 -15
  300. package/lib/frameworks/angular/utils.js +21 -23
  301. package/lib/frameworks/astro/index.js +7 -7
  302. package/lib/frameworks/astro/utils.js +4 -6
  303. package/lib/frameworks/compose/discover/filesystem.js +3 -3
  304. package/lib/frameworks/compose/discover/frameworkMatcher.js +4 -5
  305. package/lib/frameworks/compose/discover/index.js +1 -2
  306. package/lib/frameworks/compose/discover/runtime/node.js +8 -11
  307. package/lib/frameworks/compose/driver/docker.js +3 -5
  308. package/lib/frameworks/compose/driver/hooks.js +2 -2
  309. package/lib/frameworks/compose/driver/index.js +2 -2
  310. package/lib/frameworks/compose/driver/local.js +2 -3
  311. package/lib/frameworks/compose/index.js +5 -7
  312. package/lib/frameworks/constants.js +3 -3
  313. package/lib/frameworks/express/index.js +7 -8
  314. package/lib/frameworks/flutter/index.js +6 -7
  315. package/lib/frameworks/flutter/utils.js +4 -5
  316. package/lib/frameworks/index.js +21 -22
  317. package/lib/frameworks/next/constants.js +5 -2
  318. package/lib/frameworks/next/index.js +34 -32
  319. package/lib/frameworks/next/utils.js +40 -39
  320. package/lib/frameworks/nuxt/index.js +9 -9
  321. package/lib/frameworks/nuxt/utils.js +4 -6
  322. package/lib/frameworks/nuxt2/index.js +7 -7
  323. package/lib/frameworks/sveltekit/index.js +6 -8
  324. package/lib/frameworks/utils.js +26 -24
  325. package/lib/frameworks/vite/index.js +8 -9
  326. package/lib/fsAsync.js +1 -2
  327. package/lib/fsutils.js +5 -6
  328. package/lib/functional.js +11 -11
  329. package/lib/functions/artifacts.js +25 -22
  330. package/lib/functions/ensureTargeted.js +1 -2
  331. package/lib/functions/env.js +13 -14
  332. package/lib/functions/functionslog.js +2 -3
  333. package/lib/functions/projectConfig.js +29 -33
  334. package/lib/functions/python.js +10 -4
  335. package/lib/functions/secrets.js +32 -18
  336. package/lib/functionsConfig.js +14 -14
  337. package/lib/functionsConfigClone.js +1 -2
  338. package/lib/functionsShellCommandAction.js +2 -3
  339. package/lib/gcp/apphosting.js +43 -28
  340. package/lib/gcp/apptesting.js +2 -2
  341. package/lib/gcp/artifactregistry.js +5 -5
  342. package/lib/gcp/auth.js +11 -13
  343. package/lib/gcp/cloudbilling.js +4 -5
  344. package/lib/gcp/cloudbuild.js +10 -11
  345. package/lib/gcp/cloudfunctions.js +61 -45
  346. package/lib/gcp/cloudfunctionsv2.js +81 -43
  347. package/lib/gcp/cloudlogging.js +2 -4
  348. package/lib/gcp/cloudmonitoring.js +7 -7
  349. package/lib/gcp/cloudscheduler.js +12 -14
  350. package/lib/gcp/cloudsql/cloudsqladmin.js +18 -20
  351. package/lib/gcp/cloudsql/connect.js +14 -9
  352. package/lib/gcp/cloudsql/fbToolsAuthClient.js +5 -3
  353. package/lib/gcp/cloudsql/interactive.js +2 -3
  354. package/lib/gcp/cloudsql/permissions.js +8 -8
  355. package/lib/gcp/cloudsql/permissionsSetup.js +9 -9
  356. package/lib/gcp/cloudtasks.js +19 -18
  357. package/lib/gcp/computeEngine.js +1 -2
  358. package/lib/gcp/devConnect.js +32 -29
  359. package/lib/gcp/docker.js +2 -4
  360. package/lib/gcp/eventarc.js +5 -5
  361. package/lib/gcp/firedata.js +4 -4
  362. package/lib/gcp/firestore.js +16 -16
  363. package/lib/gcp/iam.js +11 -12
  364. package/lib/gcp/identityPlatform.js +4 -5
  365. package/lib/gcp/k8s.js +1 -2
  366. package/lib/gcp/location.js +2 -2
  367. package/lib/gcp/proto.js +10 -11
  368. package/lib/gcp/pubsub.js +4 -5
  369. package/lib/gcp/resourceManager.js +5 -5
  370. package/lib/gcp/rules.js +13 -14
  371. package/lib/gcp/run.js +24 -31
  372. package/lib/gcp/runv2.js +39 -27
  373. package/lib/gcp/secretManager.js +60 -39
  374. package/lib/gcp/serviceusage.js +8 -4
  375. package/lib/gcp/storage.js +22 -20
  376. package/lib/gemini/fdcExperience.js +5 -5
  377. package/lib/getDefaultDatabaseInstance.js +2 -4
  378. package/lib/getDefaultHostingSite.js +3 -4
  379. package/lib/getProjectNumber.js +1 -2
  380. package/lib/hosting/api.js +32 -36
  381. package/lib/hosting/cloudRunProxy.js +2 -3
  382. package/lib/hosting/config.js +17 -17
  383. package/lib/hosting/expireUtils.js +3 -3
  384. package/lib/hosting/functionsProxy.js +1 -2
  385. package/lib/hosting/implicitInit.js +1 -2
  386. package/lib/hosting/initMiddleware.js +1 -2
  387. package/lib/hosting/interactive.js +1 -2
  388. package/lib/hosting/proxy.js +3 -5
  389. package/lib/hosting/runTags.js +8 -11
  390. package/lib/init/features/account.js +1 -2
  391. package/lib/init/features/ailogic/index.js +3 -5
  392. package/lib/init/features/ailogic/utils.js +6 -8
  393. package/lib/init/features/aitools/claude.js +1 -2
  394. package/lib/init/features/aitools/cursor.js +1 -2
  395. package/lib/init/features/aitools/gemini.js +1 -1
  396. package/lib/init/features/aitools/promptUpdater.js +10 -12
  397. package/lib/init/features/aitools.js +1 -2
  398. package/lib/init/features/apphosting.js +3 -4
  399. package/lib/init/features/apptesting/index.js +9 -9
  400. package/lib/init/features/database.js +4 -5
  401. package/lib/init/features/dataconnect/create_app.js +3 -4
  402. package/lib/init/features/dataconnect/index.js +25 -22
  403. package/lib/init/features/dataconnect/resolver.js +6 -10
  404. package/lib/init/features/dataconnect/sdk.js +31 -24
  405. package/lib/init/features/emulators.js +7 -6
  406. package/lib/init/features/extensions/index.js +3 -5
  407. package/lib/init/features/firestore/index.js +7 -9
  408. package/lib/init/features/firestore/indexes.js +2 -2
  409. package/lib/init/features/firestore/rules.js +3 -3
  410. package/lib/init/features/functions/index.js +3 -5
  411. package/lib/init/features/functions/javascript.js +1 -2
  412. package/lib/init/features/functions/npm-dependencies.js +1 -2
  413. package/lib/init/features/functions/python.js +1 -2
  414. package/lib/init/features/functions/typescript.js +1 -2
  415. package/lib/init/features/genkit/index.js +44 -18
  416. package/lib/init/features/hosting/github.js +6 -8
  417. package/lib/init/features/hosting/index.js +10 -13
  418. package/lib/init/features/project.js +4 -7
  419. package/lib/init/features/remoteconfig.js +1 -2
  420. package/lib/init/features/storage.js +3 -5
  421. package/lib/init/index.js +4 -7
  422. package/lib/init/spawn.js +7 -9
  423. package/lib/listFiles.js +1 -2
  424. package/lib/loadCJSON.js +1 -2
  425. package/lib/localFunction.js +14 -15
  426. package/lib/logError.js +1 -2
  427. package/lib/logger.js +7 -7
  428. package/lib/management/apps.js +22 -22
  429. package/lib/management/database.js +11 -12
  430. package/lib/management/projects.js +57 -56
  431. package/lib/management/provisioning/errorHandler.js +3 -5
  432. package/lib/management/provisioning/provision.js +15 -9
  433. package/lib/management/studio.js +2 -3
  434. package/lib/mcp/errors.js +4 -4
  435. package/lib/mcp/index.js +16 -23
  436. package/lib/mcp/prompt.js +1 -2
  437. package/lib/mcp/prompts/core/consult.js +2 -3
  438. package/lib/mcp/prompts/crashlytics/connect.js +15 -122
  439. package/lib/mcp/prompts/dataconnect/schema.js +3 -3
  440. package/lib/mcp/prompts/index.js +8 -10
  441. package/lib/mcp/resource.js +3 -15
  442. package/lib/mcp/resources/guides/app_id.js +39 -0
  443. package/lib/mcp/resources/guides/crashlytics_connect.js +51 -0
  444. package/lib/mcp/resources/guides/crashlytics_investigations.js +51 -0
  445. package/lib/mcp/resources/guides/crashlytics_issues.js +42 -0
  446. package/lib/mcp/resources/guides/crashlytics_reports.js +112 -0
  447. package/lib/mcp/resources/index.js +11 -3
  448. package/lib/mcp/tool.js +3 -15
  449. package/lib/mcp/tools/apphosting/fetch_logs.js +3 -4
  450. package/lib/mcp/tools/apphosting/list_backends.js +1 -1
  451. package/lib/mcp/tools/auth/get_users.js +5 -16
  452. package/lib/mcp/tools/core/create_android_sha.js +4 -1
  453. package/lib/mcp/tools/core/get_environment.js +3 -3
  454. package/lib/mcp/tools/core/get_sdk_config.js +4 -5
  455. package/lib/mcp/tools/core/get_security_rules.js +1 -2
  456. package/lib/mcp/tools/core/init.js +2 -2
  457. package/lib/mcp/tools/core/logout.js +1 -1
  458. package/lib/mcp/tools/core/read_resources.js +2 -2
  459. package/lib/mcp/tools/core/validate_security_rules.js +1 -2
  460. package/lib/mcp/tools/crashlytics/events.js +43 -19
  461. package/lib/mcp/tools/crashlytics/index.js +1 -6
  462. package/lib/mcp/tools/crashlytics/issues.js +33 -12
  463. package/lib/mcp/tools/crashlytics/reports.js +66 -117
  464. package/lib/mcp/tools/dataconnect/list_services.js +2 -3
  465. package/lib/mcp/tools/firestore/converter.js +3 -5
  466. package/lib/mcp/tools/firestore/delete_document.js +1 -1
  467. package/lib/mcp/tools/functions/get_logs.js +14 -12
  468. package/lib/mcp/tools/functions/list_functions.js +1 -1
  469. package/lib/mcp/tools/index.js +17 -9
  470. package/lib/mcp/util/apptesting/availability.js +1 -2
  471. package/lib/mcp/util/availability.js +1 -2
  472. package/lib/mcp/util/crashlytics/availability.js +1 -2
  473. package/lib/mcp/util/dataconnect/compile.js +7 -6
  474. package/lib/mcp/util/dataconnect/converter.js +7 -10
  475. package/lib/mcp/util/dataconnect/emulator.js +1 -2
  476. package/lib/mcp/util.js +9 -11
  477. package/lib/messaging/sendMessage.js +1 -2
  478. package/lib/metaprogramming.js +1 -2
  479. package/lib/operation-poller.js +2 -2
  480. package/lib/profileReport.js +6 -6
  481. package/lib/profiler.js +1 -2
  482. package/lib/projectPath.js +1 -2
  483. package/lib/projectUtils.js +5 -6
  484. package/lib/prompt.js +22 -13
  485. package/lib/rc.js +5 -7
  486. package/lib/remoteconfig/deleteExperiment.js +1 -2
  487. package/lib/remoteconfig/deleteRollout.js +1 -2
  488. package/lib/remoteconfig/get.js +2 -3
  489. package/lib/remoteconfig/getExperiment.js +2 -2
  490. package/lib/remoteconfig/getRollout.js +2 -2
  491. package/lib/remoteconfig/interfaces.js +1 -1
  492. package/lib/remoteconfig/listExperiments.js +2 -2
  493. package/lib/remoteconfig/listRollouts.js +2 -2
  494. package/lib/remoteconfig/publish.js +1 -2
  495. package/lib/remoteconfig/rollback.js +1 -2
  496. package/lib/remoteconfig/versionslist.js +1 -2
  497. package/lib/requireAuth.js +4 -6
  498. package/lib/requireConfig.js +5 -8
  499. package/lib/requireDatabaseInstance.js +2 -2
  500. package/lib/requireHostingSite.js +1 -2
  501. package/lib/requireInteractive.js +1 -1
  502. package/lib/requirePermissions.js +1 -2
  503. package/lib/requireTosAcceptance.js +1 -2
  504. package/lib/responseToError.js +1 -2
  505. package/lib/rtdb.js +2 -3
  506. package/lib/rulesDeploy.js +3 -4
  507. package/lib/serve/functions.js +9 -1
  508. package/lib/serve/hosting.js +4 -5
  509. package/lib/serve/index.js +1 -2
  510. package/lib/shortenUrl.js +1 -2
  511. package/lib/templates.js +3 -4
  512. package/lib/throttler/throttler.js +3 -3
  513. package/lib/timeout.js +2 -3
  514. package/lib/track.js +23 -14
  515. package/lib/tsconfig.publish.tsbuildinfo +1 -0
  516. package/lib/unzip.js +2 -3
  517. package/lib/utils.js +62 -63
  518. package/lib/vsCodeUtils.js +2 -3
  519. package/package.json +6 -6
  520. package/templates/extensions/typescript/index.ts +1 -1
  521. package/templates/extensions/typescript/package.lint.json +1 -1
  522. package/templates/extensions/typescript/package.nolint.json +1 -1
  523. package/templates/extensions/typescript/tsconfig.json +2 -1
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deploy = void 0;
3
+ exports.deploy = deploy;
4
4
  const tasks = require("./tasks");
5
5
  const queue_1 = require("../../throttler/queue");
6
6
  const error_1 = require("../../error");
@@ -10,13 +10,12 @@ const provisioningHelper_1 = require("../../extensions/provisioningHelper");
10
10
  const secrets_1 = require("./secrets");
11
11
  const validate_1 = require("./validate");
12
12
  async function deploy(context, options, payload) {
13
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
14
13
  const projectId = (0, projectUtils_1.needProjectId)(options);
15
14
  await (0, validate_1.checkBilling)(projectId, options.nonInteractive);
16
15
  await (0, provisioningHelper_1.bulkCheckProductsProvisioned)(projectId, [
17
- ...((_a = payload.instancesToCreate) !== null && _a !== void 0 ? _a : []),
18
- ...((_b = payload.instancesToUpdate) !== null && _b !== void 0 ? _b : []),
19
- ...((_c = payload.instancesToConfigure) !== null && _c !== void 0 ? _c : []),
16
+ ...(payload.instancesToCreate ?? []),
17
+ ...(payload.instancesToUpdate ?? []),
18
+ ...(payload.instancesToConfigure ?? []),
20
19
  ]);
21
20
  if (context.have) {
22
21
  await (0, secrets_1.handleSecretParams)(payload, context.have, options.nonInteractive);
@@ -27,15 +26,15 @@ async function deploy(context, options, payload) {
27
26
  concurrency: 5,
28
27
  handler: tasks.extensionsDeploymentHandler(errorHandler),
29
28
  });
30
- for (const create of (_e = (_d = payload.instancesToCreate) === null || _d === void 0 ? void 0 : _d.filter((i) => !!i.ref)) !== null && _e !== void 0 ? _e : []) {
29
+ for (const create of payload.instancesToCreate?.filter((i) => !!i.ref) ?? []) {
31
30
  const task = tasks.createExtensionInstanceTask(projectId, create, true);
32
31
  void validationQueue.run(task);
33
32
  }
34
- for (const update of (_g = (_f = payload.instancesToUpdate) === null || _f === void 0 ? void 0 : _f.filter((i) => !!i.ref)) !== null && _g !== void 0 ? _g : []) {
33
+ for (const update of payload.instancesToUpdate?.filter((i) => !!i.ref) ?? []) {
35
34
  const task = tasks.updateExtensionInstanceTask(projectId, update, true);
36
35
  void validationQueue.run(task);
37
36
  }
38
- for (const configure of (_j = (_h = payload.instancesToConfigure) === null || _h === void 0 ? void 0 : _h.filter((i) => !!i.ref)) !== null && _j !== void 0 ? _j : []) {
37
+ for (const configure of payload.instancesToConfigure?.filter((i) => !!i.ref) ?? []) {
39
38
  const task = tasks.configureExtensionInstanceTask(projectId, configure, true);
40
39
  void validationQueue.run(task);
41
40
  }
@@ -48,4 +47,3 @@ async function deploy(context, options, payload) {
48
47
  throw new error_1.FirebaseError(`Extensions deployment failed validation. No changes have been made to the Extension instances on ${projectId}`);
49
48
  }
50
49
  }
51
- exports.deploy = deploy;
@@ -1,17 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deletesSummary = exports.configuresSummary = exports.updatesSummary = exports.createsSummary = exports.humanReadable = void 0;
3
+ exports.humanReadable = void 0;
4
+ exports.createsSummary = createsSummary;
5
+ exports.updatesSummary = updatesSummary;
6
+ exports.configuresSummary = configuresSummary;
7
+ exports.deletesSummary = deletesSummary;
4
8
  const clc = require("colorette");
5
9
  const refs = require("../../extensions/refs");
6
10
  const humanReadable = (dep) => `${clc.bold(dep.instanceId)} (${dep.ref ? `${refs.toExtensionVersionRef(dep.ref)}` : `Installed from local source`})`;
7
11
  exports.humanReadable = humanReadable;
8
12
  const humanReadableUpdate = (from, to) => {
9
- var _a;
10
13
  if (from.ref &&
11
14
  to.ref &&
12
15
  from.ref.publisherId === to.ref.publisherId &&
13
16
  from.ref.extensionId === to.ref.extensionId) {
14
- return `\t${clc.bold(from.instanceId)} (${refs.toExtensionVersionRef(from.ref)} => ${((_a = to.ref) === null || _a === void 0 ? void 0 : _a.version) || ""})`;
17
+ return `\t${clc.bold(from.instanceId)} (${refs.toExtensionVersionRef(from.ref)} => ${to.ref?.version || ""})`;
15
18
  }
16
19
  else {
17
20
  const fromRef = from.ref
@@ -27,7 +30,6 @@ function createsSummary(toCreate) {
27
30
  ? `The following extension instances will be created:\n${instancesToCreate}\n`
28
31
  : "";
29
32
  }
30
- exports.createsSummary = createsSummary;
31
33
  function updatesSummary(toUpdate, have) {
32
34
  const instancesToUpdate = toUpdate
33
35
  .map((to) => {
@@ -42,14 +44,12 @@ function updatesSummary(toUpdate, have) {
42
44
  ? `The following extension instances will be updated:\n${instancesToUpdate}\n`
43
45
  : "";
44
46
  }
45
- exports.updatesSummary = updatesSummary;
46
47
  function configuresSummary(toConfigure) {
47
48
  const instancesToConfigure = toConfigure.map((s) => `\t${(0, exports.humanReadable)(s)}`).join("\n");
48
49
  return toConfigure.length
49
50
  ? `The following extension instances will be configured:\n${instancesToConfigure}\n`
50
51
  : "";
51
52
  }
52
- exports.configuresSummary = configuresSummary;
53
53
  function deletesSummary(toDelete, isDynamic) {
54
54
  const instancesToDelete = toDelete.map((s) => `\t${(0, exports.humanReadable)(s)}`).join("\n");
55
55
  const definedLocation = isDynamic ? "your local source code" : "'firebase.json'";
@@ -57,4 +57,3 @@ function deletesSummary(toDelete, isDynamic) {
57
57
  ? `The following extension instances are found in your project but do not exist in ${definedLocation}:\n${instancesToDelete}\n`
58
58
  : "";
59
59
  }
60
- exports.deletesSummary = deletesSummary;
@@ -1,6 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveVersion = exports.want = exports.wantDynamic = exports.have = exports.haveDynamic = exports.getExtensionSpec = exports.getExtension = exports.getExtensionVersion = void 0;
3
+ exports.getExtensionVersion = getExtensionVersion;
4
+ exports.getExtension = getExtension;
5
+ exports.getExtensionSpec = getExtensionSpec;
6
+ exports.haveDynamic = haveDynamic;
7
+ exports.have = have;
8
+ exports.wantDynamic = wantDynamic;
9
+ exports.want = want;
10
+ exports.resolveVersion = resolveVersion;
4
11
  const semver = require("semver");
5
12
  const extensionsApi = require("../../extensions/extensionsApi");
6
13
  const refs = require("../../extensions/refs");
@@ -21,7 +28,6 @@ async function getExtensionVersion(i) {
21
28
  }
22
29
  return i.extensionVersion;
23
30
  }
24
- exports.getExtensionVersion = getExtensionVersion;
25
31
  async function getExtension(i) {
26
32
  if (!i.ref) {
27
33
  throw new error_1.FirebaseError(`Can't get Extension for ${i.instanceId} because it has no ref`);
@@ -31,7 +37,6 @@ async function getExtension(i) {
31
37
  }
32
38
  return i.extension;
33
39
  }
34
- exports.getExtension = getExtension;
35
40
  async function getExtensionSpec(i) {
36
41
  if (!i.extensionSpec) {
37
42
  if (i.ref) {
@@ -51,12 +56,10 @@ async function getExtensionSpec(i) {
51
56
  }
52
57
  return i.extensionSpec;
53
58
  }
54
- exports.getExtensionSpec = getExtensionSpec;
55
59
  async function haveDynamic(projectId) {
56
60
  return (await extensionsApi.listInstances(projectId))
57
- .filter((i) => { var _a; return ((_a = i.labels) === null || _a === void 0 ? void 0 : _a.createdBy) === "SDK"; })
61
+ .filter((i) => i.labels?.createdBy === "SDK")
58
62
  .map((i) => {
59
- var _a;
60
63
  const instanceId = i.name.split("/").pop();
61
64
  if (!instanceId) {
62
65
  throw new error_1.FirebaseError(`Internal error getting instanceId from ${i.name}`);
@@ -64,7 +67,7 @@ async function haveDynamic(projectId) {
64
67
  const dep = {
65
68
  instanceId,
66
69
  params: i.config.params,
67
- systemParams: (_a = i.config.systemParams) !== null && _a !== void 0 ? _a : {},
70
+ systemParams: i.config.systemParams ?? {},
68
71
  allowedEventTypes: i.config.allowedEventTypes,
69
72
  eventarcChannel: i.config.eventarcChannel,
70
73
  etag: i.etag,
@@ -78,12 +81,10 @@ async function haveDynamic(projectId) {
78
81
  return dep;
79
82
  });
80
83
  }
81
- exports.haveDynamic = haveDynamic;
82
84
  async function have(projectId) {
83
85
  return (await extensionsApi.listInstances(projectId))
84
- .filter((i) => { var _a; return !(((_a = i.labels) === null || _a === void 0 ? void 0 : _a.createdBy) === "SDK"); })
86
+ .filter((i) => !(i.labels?.createdBy === "SDK"))
85
87
  .map((i) => {
86
- var _a;
87
88
  const instanceId = i.name.split("/").pop();
88
89
  if (!instanceId) {
89
90
  throw new error_1.FirebaseError(`Internal error getting instanceId from ${i.name}`);
@@ -91,7 +92,7 @@ async function have(projectId) {
91
92
  const dep = {
92
93
  instanceId,
93
94
  params: i.config.params,
94
- systemParams: (_a = i.config.systemParams) !== null && _a !== void 0 ? _a : {},
95
+ systemParams: i.config.systemParams ?? {},
95
96
  allowedEventTypes: i.config.allowedEventTypes,
96
97
  eventarcChannel: i.config.eventarcChannel,
97
98
  etag: i.etag,
@@ -107,7 +108,6 @@ async function have(projectId) {
107
108
  return dep;
108
109
  });
109
110
  }
110
- exports.have = have;
111
111
  async function wantDynamic(args) {
112
112
  const instanceSpecs = [];
113
113
  const errors = [];
@@ -156,7 +156,6 @@ async function wantDynamic(args) {
156
156
  }
157
157
  return instanceSpecs;
158
158
  }
159
- exports.wantDynamic = wantDynamic;
160
159
  async function want(args) {
161
160
  const instanceSpecs = [];
162
161
  const errors = [];
@@ -217,20 +216,19 @@ async function want(args) {
217
216
  }
218
217
  return instanceSpecs;
219
218
  }
220
- exports.want = want;
221
219
  async function resolveVersion(ref, extension) {
222
220
  const extensionRef = refs.toExtensionRef(ref);
223
- if (!ref.version && (extension === null || extension === void 0 ? void 0 : extension.latestApprovedVersion)) {
221
+ if (!ref.version && extension?.latestApprovedVersion) {
224
222
  return extension.latestApprovedVersion;
225
223
  }
226
224
  if (ref.version === "latest-approved") {
227
- if (!(extension === null || extension === void 0 ? void 0 : extension.latestApprovedVersion)) {
225
+ if (!extension?.latestApprovedVersion) {
228
226
  throw new error_1.FirebaseError(`${extensionRef} has not been published to Extensions Hub (https://extensions.dev). To install it, you must specify the version you want to install.`);
229
227
  }
230
228
  return extension.latestApprovedVersion;
231
229
  }
232
230
  if (!ref.version || ref.version === "latest") {
233
- if (!(extension === null || extension === void 0 ? void 0 : extension.latestVersion)) {
231
+ if (!extension?.latestVersion) {
234
232
  throw new error_1.FirebaseError(`${extensionRef} has no stable non-deprecated versions. If you wish to install a prerelease version, you must specify the version you want to install.`);
235
233
  }
236
234
  return extension.latestVersion;
@@ -245,4 +243,3 @@ async function resolveVersion(ref, extension) {
245
243
  }
246
244
  return maxSatisfying;
247
245
  }
248
- exports.resolveVersion = resolveVersion;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.prepare = exports.prepareDynamicExtensions = void 0;
3
+ exports.prepareDynamicExtensions = prepareDynamicExtensions;
4
+ exports.prepare = prepare;
4
5
  const planner = require("./planner");
5
6
  const deploymentSummary = require("./deploymentSummary");
6
7
  const prompt = require("../../prompt");
@@ -29,7 +30,6 @@ const isConfigure = (dep) => (test) => {
29
30
  return dep.instanceId === test.instanceId && refs.equal(dep.ref, test.ref);
30
31
  };
31
32
  async function prepareHelper(context, options, payload, wantExtensions, haveExtensions, isDynamic) {
32
- var _a, _b;
33
33
  const projectId = (0, projectUtils_1.needProjectId)(options);
34
34
  context.want = wantExtensions;
35
35
  context.have = haveExtensions;
@@ -50,18 +50,18 @@ async function prepareHelper(context, options, payload, wantExtensions, haveExte
50
50
  }
51
51
  }
52
52
  }
53
- const usingSecrets = await Promise.all((_a = context.want) === null || _a === void 0 ? void 0 : _a.map(secrets_1.checkSpecForSecrets));
53
+ const usingSecrets = await Promise.all(context.want?.map(secrets_1.checkSpecForSecrets));
54
54
  if (usingSecrets.some((i) => i)) {
55
55
  await (0, secretsUtils_1.ensureSecretManagerApiEnabled)(options);
56
56
  }
57
- const usingV2Functions = await Promise.all((_b = context.want) === null || _b === void 0 ? void 0 : _b.map(v2FunctionHelper_1.checkSpecForV2Functions));
57
+ const usingV2Functions = await Promise.all(context.want?.map(v2FunctionHelper_1.checkSpecForV2Functions));
58
58
  if (usingV2Functions) {
59
59
  await (0, v2FunctionHelper_1.ensureNecessaryV2ApisAndRoles)(options);
60
60
  }
61
- payload.instancesToCreate = context.want.filter((i) => { var _a; return !((_a = context.have) === null || _a === void 0 ? void 0 : _a.some(matchesInstanceId(i))); });
62
- payload.instancesToConfigure = context.want.filter((i) => { var _a; return (_a = context.have) === null || _a === void 0 ? void 0 : _a.some(isConfigure(i)); });
63
- payload.instancesToUpdate = context.want.filter((i) => { var _a; return (_a = context.have) === null || _a === void 0 ? void 0 : _a.some(isUpdate(i)); });
64
- payload.instancesToDelete = context.have.filter((i) => { var _a; return !((_a = context.want) === null || _a === void 0 ? void 0 : _a.some(matchesInstanceId(i))); });
61
+ payload.instancesToCreate = context.want.filter((i) => !context.have?.some(matchesInstanceId(i)));
62
+ payload.instancesToConfigure = context.want.filter((i) => context.have?.some(isConfigure(i)));
63
+ payload.instancesToUpdate = context.want.filter((i) => context.have?.some(isUpdate(i)));
64
+ payload.instancesToDelete = context.have.filter((i) => !context.want?.some(matchesInstanceId(i)));
65
65
  if (await (0, warnings_1.displayWarningsForDeploy)(payload.instancesToCreate)) {
66
66
  if (!(await prompt.confirm({
67
67
  message: `Do you wish to continue deploying these extension instances?`,
@@ -126,7 +126,7 @@ async function prepareDynamicExtensions(context, options, payload, builds) {
126
126
  await (0, extensionsHelper_1.ensureExtensionsApiEnabled)(options);
127
127
  await (0, requirePermissions_1.requirePermissions)(options, ["firebaseextensions.instances.list"]);
128
128
  let haveExtensions = await planner.haveDynamic(projectId);
129
- haveExtensions = haveExtensions.filter((e) => { var _a; return (0, common_1.extensionMatchesAnyFilter)((_a = e.labels) === null || _a === void 0 ? void 0 : _a.codebase, e.instanceId, filters); });
129
+ haveExtensions = haveExtensions.filter((e) => (0, common_1.extensionMatchesAnyFilter)(e.labels?.codebase, e.instanceId, filters));
130
130
  if (Object.keys(extensions).length === 0 && haveExtensions.length === 0) {
131
131
  return;
132
132
  }
@@ -137,7 +137,6 @@ async function prepareDynamicExtensions(context, options, payload, builds) {
137
137
  });
138
138
  return prepareHelper(context, options, payload, dynamicWant, haveExtensions, true);
139
139
  }
140
- exports.prepareDynamicExtensions = prepareDynamicExtensions;
141
140
  async function prepare(context, options, payload) {
142
141
  context.extensionsStartTime = Date.now();
143
142
  const projectId = (0, projectUtils_1.needProjectId)(options);
@@ -156,4 +155,3 @@ async function prepare(context, options, payload) {
156
155
  const haveExtensions = await planner.have(projectId);
157
156
  return prepareHelper(context, options, payload, wantExtensions, haveExtensions, false);
158
157
  }
159
- exports.prepare = prepare;
@@ -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 queue_1 = require("../../throttler/queue");
5
5
  const tasks = require("./tasks");
6
6
  const planner = require("./planner");
@@ -10,7 +10,6 @@ const projectUtils_1 = require("../../projectUtils");
10
10
  const etags_1 = require("../../extensions/etags");
11
11
  const track_1 = require("../../track");
12
12
  async function release(context, options, payload) {
13
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
14
13
  if (!payload.instancesToCreate &&
15
14
  !payload.instancesToUpdate &&
16
15
  !payload.instancesToConfigure &&
@@ -24,19 +23,19 @@ async function release(context, options, payload) {
24
23
  concurrency: 5,
25
24
  handler: tasks.extensionsDeploymentHandler(errorHandler),
26
25
  });
27
- for (const inst of (_a = payload.instancesToConfigure) !== null && _a !== void 0 ? _a : []) {
26
+ for (const inst of payload.instancesToConfigure ?? []) {
28
27
  const task = tasks.configureExtensionInstanceTask(projectId, inst);
29
28
  void deploymentQueue.run(task);
30
29
  }
31
- for (const inst of (_b = payload.instancesToDelete) !== null && _b !== void 0 ? _b : []) {
30
+ for (const inst of payload.instancesToDelete ?? []) {
32
31
  const task = tasks.deleteExtensionInstanceTask(projectId, inst);
33
32
  void deploymentQueue.run(task);
34
33
  }
35
- for (const inst of (_c = payload.instancesToCreate) !== null && _c !== void 0 ? _c : []) {
34
+ for (const inst of payload.instancesToCreate ?? []) {
36
35
  const task = tasks.createExtensionInstanceTask(projectId, inst);
37
36
  void deploymentQueue.run(task);
38
37
  }
39
- for (const inst of (_d = payload.instancesToUpdate) !== null && _d !== void 0 ? _d : []) {
38
+ for (const inst of payload.instancesToUpdate ?? []) {
40
39
  const task = tasks.updateExtensionInstanceTask(projectId, inst);
41
40
  void deploymentQueue.run(task);
42
41
  }
@@ -46,11 +45,11 @@ async function release(context, options, payload) {
46
45
  await deploymentPromise;
47
46
  const duration = context.extensionsStartTime ? Date.now() - context.extensionsStartTime : 1;
48
47
  await (0, track_1.trackGA4)("extensions_deploy", {
49
- extension_instance_created: (_f = (_e = payload.instancesToCreate) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0,
50
- extension_instance_updated: (_h = (_g = payload.instancesToUpdate) === null || _g === void 0 ? void 0 : _g.length) !== null && _h !== void 0 ? _h : 0,
51
- extension_instance_configured: (_k = (_j = payload.instancesToConfigure) === null || _j === void 0 ? void 0 : _j.length) !== null && _k !== void 0 ? _k : 0,
52
- extension_instance_deleted: (_m = (_l = payload.instancesToDelete) === null || _l === void 0 ? void 0 : _l.length) !== null && _m !== void 0 ? _m : 0,
53
- errors: (_o = errorHandler.errors.length) !== null && _o !== void 0 ? _o : 0,
48
+ extension_instance_created: payload.instancesToCreate?.length ?? 0,
49
+ extension_instance_updated: payload.instancesToUpdate?.length ?? 0,
50
+ extension_instance_configured: payload.instancesToConfigure?.length ?? 0,
51
+ extension_instance_deleted: payload.instancesToDelete?.length ?? 0,
52
+ errors: errorHandler.errors.length ?? 0,
54
53
  interactive: options.nonInteractive ? "false" : "true",
55
54
  }, duration);
56
55
  const have = await planner.have(projectId);
@@ -61,4 +60,3 @@ async function release(context, options, payload) {
61
60
  throw new error_1.FirebaseError(`Extensions deployment failed.`);
62
61
  }
63
62
  }
64
- exports.release = release;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkSpecForSecrets = exports.handleSecretParams = void 0;
3
+ exports.handleSecretParams = handleSecretParams;
4
+ exports.checkSpecForSecrets = checkSpecForSecrets;
4
5
  const clc = require("colorette");
5
6
  const secretUtils = require("../../extensions/secretsUtils");
6
7
  const secretManager = require("../../gcp/secretManager");
@@ -11,14 +12,13 @@ const error_1 = require("../../error");
11
12
  const logger_1 = require("../../logger");
12
13
  const utils_1 = require("../../utils");
13
14
  async function handleSecretParams(payload, have, nonInteractive) {
14
- var _a, _b, _c;
15
- for (const i of (_a = payload.instancesToCreate) !== null && _a !== void 0 ? _a : []) {
15
+ for (const i of payload.instancesToCreate ?? []) {
16
16
  if (await checkSpecForSecrets(i)) {
17
17
  (0, utils_1.logLabeledBullet)("extensions", `Verifying secret params for ${clc.bold(i.instanceId)}`);
18
18
  await handleSecretsCreateInstance(i, nonInteractive);
19
19
  }
20
20
  }
21
- const updates = [...((_b = payload.instancesToUpdate) !== null && _b !== void 0 ? _b : []), ...((_c = payload.instancesToConfigure) !== null && _c !== void 0 ? _c : [])];
21
+ const updates = [...(payload.instancesToUpdate ?? []), ...(payload.instancesToConfigure ?? [])];
22
22
  for (const i of updates) {
23
23
  if (await checkSpecForSecrets(i)) {
24
24
  (0, utils_1.logLabeledBullet)("extensions", `Verifying secret params for ${clc.bold(i.instanceId)}`);
@@ -27,12 +27,10 @@ async function handleSecretParams(payload, have, nonInteractive) {
27
27
  }
28
28
  }
29
29
  }
30
- exports.handleSecretParams = handleSecretParams;
31
30
  async function checkSpecForSecrets(i) {
32
31
  const extensionSpec = await (0, planner_1.getExtensionSpec)(i);
33
32
  return secretUtils.usesSecrets(extensionSpec);
34
33
  }
35
- exports.checkSpecForSecrets = checkSpecForSecrets;
36
34
  const secretsInSpec = (spec) => {
37
35
  return spec.params.filter((p) => p.type === types_1.ParamType.SECRET);
38
36
  };
@@ -49,8 +47,8 @@ async function handleSecretsUpdateInstance(i, prevSpec, nonInteractive) {
49
47
  const secretParams = secretsInSpec(extensionVersion.spec);
50
48
  for (const s of secretParams) {
51
49
  const prevParam = prevExtensionVersion.spec.params.find((p) => p.param === s.param);
52
- if ((prevParam === null || prevParam === void 0 ? void 0 : prevParam.type) === types_1.ParamType.SECRET && prevSpec.params[prevParam === null || prevParam === void 0 ? void 0 : prevParam.param]) {
53
- await handleSecretParamForUpdate(s, i, prevSpec.params[prevParam === null || prevParam === void 0 ? void 0 : prevParam.param], nonInteractive);
50
+ if (prevParam?.type === types_1.ParamType.SECRET && prevSpec.params[prevParam?.param]) {
51
+ await handleSecretParamForUpdate(s, i, prevSpec.params[prevParam?.param], nonInteractive);
54
52
  }
55
53
  else {
56
54
  await handleSecretParamForCreate(s, i, nonInteractive);
@@ -58,7 +56,6 @@ async function handleSecretsUpdateInstance(i, prevSpec, nonInteractive) {
58
56
  }
59
57
  }
60
58
  async function handleSecretParamForCreate(secretParam, i, nonInteractive) {
61
- var _a;
62
59
  const providedValue = i.params[secretParam.param];
63
60
  if (!providedValue) {
64
61
  return;
@@ -83,8 +80,8 @@ async function handleSecretParamForCreate(secretParam, i, nonInteractive) {
83
80
  `projects/${projectId}/secrets/${secretName} exists, but version ${version} does not. ` +
84
81
  `See more information about this secret at ${secretManager.secretManagerConsoleUri(projectId)}`);
85
82
  }
86
- if (!!((_a = secretInfo === null || secretInfo === void 0 ? void 0 : secretInfo.secret) === null || _a === void 0 ? void 0 : _a.labels) &&
87
- !!(secretInfo === null || secretInfo === void 0 ? void 0 : secretInfo.secret.labels[secretUtils.SECRET_LABEL]) &&
83
+ if (!!secretInfo?.secret?.labels &&
84
+ !!secretInfo?.secret.labels[secretUtils.SECRET_LABEL] &&
88
85
  secretInfo.secret.labels[secretUtils.SECRET_LABEL] !== i.instanceId) {
89
86
  throw new error_1.FirebaseError(`${clc.bold(i.instanceId)}: Found '${providedValue}' for secret param ${secretParam.param}. ` +
90
87
  `projects/${projectId}/secrets/${secretName} is managed by a different extension instance (${secretInfo.secret.labels[secretUtils.SECRET_LABEL]}), so reusing it here can lead to unexpected behavior. ` +
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deleteExtensionInstanceTask = exports.configureExtensionInstanceTask = exports.updateExtensionInstanceTask = exports.createExtensionInstanceTask = exports.extensionsDeploymentHandler = void 0;
3
+ exports.extensionsDeploymentHandler = extensionsDeploymentHandler;
4
+ exports.createExtensionInstanceTask = createExtensionInstanceTask;
5
+ exports.updateExtensionInstanceTask = updateExtensionInstanceTask;
6
+ exports.configureExtensionInstanceTask = configureExtensionInstanceTask;
7
+ exports.deleteExtensionInstanceTask = deleteExtensionInstanceTask;
4
8
  const clc = require("colorette");
5
9
  const error_1 = require("../../error");
6
10
  const extensionsApi = require("../../extensions/extensionsApi");
@@ -11,7 +15,6 @@ const error_2 = require("../../error");
11
15
  const isRetryable = (err) => err.status === 429 || err.status === 409;
12
16
  function extensionsDeploymentHandler(errorHandler) {
13
17
  return async (task) => {
14
- var _a, _b, _c, _d;
15
18
  let result;
16
19
  try {
17
20
  result = await task.run();
@@ -20,12 +23,11 @@ function extensionsDeploymentHandler(errorHandler) {
20
23
  if (isRetryable(err)) {
21
24
  throw err;
22
25
  }
23
- errorHandler.record(task.spec.instanceId, task.type, (_d = (_c = (_b = (_a = err.context) === null || _a === void 0 ? void 0 : _a.body) === null || _b === void 0 ? void 0 : _b.error) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : err);
26
+ errorHandler.record(task.spec.instanceId, task.type, err.context?.body?.error?.message ?? err);
24
27
  }
25
28
  return result;
26
29
  };
27
30
  }
28
- exports.extensionsDeploymentHandler = extensionsDeploymentHandler;
29
31
  function createExtensionInstanceTask(projectId, instanceSpec, validateOnly = false) {
30
32
  const run = async () => {
31
33
  if (!validateOnly) {
@@ -68,7 +70,6 @@ function createExtensionInstanceTask(projectId, instanceSpec, validateOnly = fal
68
70
  type: "create",
69
71
  };
70
72
  }
71
- exports.createExtensionInstanceTask = createExtensionInstanceTask;
72
73
  function updateExtensionInstanceTask(projectId, instanceSpec, validateOnly = false) {
73
74
  const run = async () => {
74
75
  if (!validateOnly) {
@@ -113,7 +114,6 @@ function updateExtensionInstanceTask(projectId, instanceSpec, validateOnly = fal
113
114
  type: "update",
114
115
  };
115
116
  }
116
- exports.updateExtensionInstanceTask = updateExtensionInstanceTask;
117
117
  function configureExtensionInstanceTask(projectId, instanceSpec, validateOnly = false) {
118
118
  const run = async () => {
119
119
  if (!validateOnly) {
@@ -146,7 +146,6 @@ function configureExtensionInstanceTask(projectId, instanceSpec, validateOnly =
146
146
  type: "configure",
147
147
  };
148
148
  }
149
- exports.configureExtensionInstanceTask = configureExtensionInstanceTask;
150
149
  function deleteExtensionInstanceTask(projectId, instanceSpec) {
151
150
  const run = async () => {
152
151
  utils.logLabeledBullet("extensions", `Deleting ${clc.bold(instanceSpec.instanceId)} extension instance`);
@@ -160,7 +159,6 @@ function deleteExtensionInstanceTask(projectId, instanceSpec) {
160
159
  type: "delete",
161
160
  };
162
161
  }
163
- exports.deleteExtensionInstanceTask = deleteExtensionInstanceTask;
164
162
  function printSuccess(instanceId, type, validateOnly) {
165
163
  const action = validateOnly ? `validated ${type} for` : `${type}d`;
166
164
  utils.logSuccess(clc.bold(clc.green("extensions")) + ` Successfully ${action} ${instanceId}`);
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureNecessaryV2ApisAndRoles = exports.checkSpecForV2Functions = void 0;
3
+ exports.checkSpecForV2Functions = checkSpecForV2Functions;
4
+ exports.ensureNecessaryV2ApisAndRoles = ensureNecessaryV2ApisAndRoles;
4
5
  const getProjectNumber_1 = require("../../getProjectNumber");
5
6
  const resourceManager = require("../../gcp/resourceManager");
6
7
  const logger_1 = require("../../logger");
@@ -15,13 +16,11 @@ async function checkSpecForV2Functions(i) {
15
16
  const extensionSpec = await planner.getExtensionSpec(i);
16
17
  return extensionSpec.resources.some((r) => r.type === "firebaseextensions.v1beta.v2function");
17
18
  }
18
- exports.checkSpecForV2Functions = checkSpecForV2Functions;
19
19
  async function ensureNecessaryV2ApisAndRoles(options) {
20
20
  const projectId = (0, projectUtils_1.needProjectId)(options);
21
21
  await (0, ensureApiEnabled_1.ensure)(projectId, (0, api_1.computeOrigin)(), "extensions", options.markdown);
22
22
  await ensureComputeP4SARole(projectId);
23
23
  }
24
- exports.ensureNecessaryV2ApisAndRoles = ensureNecessaryV2ApisAndRoles;
25
24
  async function ensureComputeP4SARole(projectId) {
26
25
  const projectNumber = await (0, getProjectNumber_1.getProjectNumber)({ projectId });
27
26
  const saEmail = await (0, computeEngine_1.getDefaultServiceAccount)(projectNumber);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkBilling = void 0;
3
+ exports.checkBilling = checkBilling;
4
4
  const cloudbilling_1 = require("../../gcp/cloudbilling");
5
5
  const checkProjectBilling_1 = require("../../extensions/checkProjectBilling");
6
6
  const error_1 = require("../../error");
@@ -14,4 +14,3 @@ async function checkBilling(projectId, nonInteractive) {
14
14
  await (0, checkProjectBilling_1.enableBilling)(projectId);
15
15
  }
16
16
  }
17
- exports.checkBilling = checkBilling;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
3
4
  const clc = require("colorette");
4
5
  const api_1 = require("../../firestore/api");
5
6
  const logger_1 = require("../../logger");
@@ -7,19 +8,17 @@ const utils = require("../../utils");
7
8
  const rulesDeploy_1 = require("../../rulesDeploy");
8
9
  const utils_1 = require("../../utils");
9
10
  async function deployRules(context) {
10
- var _a;
11
- const rulesDeploy = (_a = context === null || context === void 0 ? void 0 : context.firestore) === null || _a === void 0 ? void 0 : _a.rulesDeploy;
11
+ const rulesDeploy = context?.firestore?.rulesDeploy;
12
12
  if (!context.firestoreRules || !rulesDeploy) {
13
13
  return;
14
14
  }
15
15
  await rulesDeploy.createRulesets(rulesDeploy_1.RulesetServiceType.CLOUD_FIRESTORE);
16
16
  }
17
17
  async function deployIndexes(context, options) {
18
- var _a;
19
18
  if (!context.firestoreIndexes) {
20
19
  return;
21
20
  }
22
- const indexesContext = (_a = context === null || context === void 0 ? void 0 : context.firestore) === null || _a === void 0 ? void 0 : _a.indexes;
21
+ const indexesContext = context?.firestore?.indexes;
23
22
  utils.logBullet(clc.bold(clc.cyan("firestore: ")) + "deploying indexes...");
24
23
  const firestoreIndexes = new api_1.FirestoreApi();
25
24
  await Promise.all(indexesContext.map(async (indexContext) => {
@@ -51,4 +50,3 @@ async function default_1(context, options) {
51
50
  await deployRules(context);
52
51
  await deployIndexes(context, options);
53
52
  }
54
- 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 clc = require("colorette");
4
5
  const loadCJSON_1 = require("../../loadCJSON");
5
6
  const rulesDeploy_1 = require("../../rulesDeploy");
@@ -72,7 +73,6 @@ async function createDatabase(context, options) {
72
73
  }
73
74
  }
74
75
  async function default_1(context, options) {
75
- var _a;
76
76
  await (0, ensureApiEnabled_1.ensure)(context.projectId, (0, api_1.firestoreOrigin)(), "firestore");
77
77
  await (0, ensureApiEnabled_1.ensure)(context.projectId, (0, api_1.firestoreOrigin)(), "firestore");
78
78
  if (options.only) {
@@ -110,7 +110,7 @@ async function default_1(context, options) {
110
110
  if (context.firestore.rules.length > 0) {
111
111
  await rulesDeploy.compile();
112
112
  }
113
- const rulesContext = (_a = context === null || context === void 0 ? void 0 : context.firestore) === null || _a === void 0 ? void 0 : _a.rules;
113
+ const rulesContext = context?.firestore?.rules;
114
114
  for (const ruleContext of rulesContext) {
115
115
  const databaseId = ruleContext.databaseId;
116
116
  const rulesFile = ruleContext.rulesFile;
@@ -119,4 +119,3 @@ async function default_1(context, options) {
119
119
  }
120
120
  }
121
121
  }
122
- exports.default = default_1;
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
3
4
  const rulesDeploy_1 = require("../../rulesDeploy");
4
5
  async function default_1(context) {
5
- var _a, _b;
6
- const rulesDeploy = (_a = context === null || context === void 0 ? void 0 : context.firestore) === null || _a === void 0 ? void 0 : _a.rulesDeploy;
6
+ const rulesDeploy = context?.firestore?.rulesDeploy;
7
7
  if (!context.firestoreRules || !rulesDeploy) {
8
8
  return;
9
9
  }
10
- const rulesContext = (_b = context === null || context === void 0 ? void 0 : context.firestore) === null || _b === void 0 ? void 0 : _b.rules;
10
+ const rulesContext = context?.firestore?.rules;
11
11
  await Promise.all(rulesContext.map(async (ruleContext) => {
12
12
  const databaseId = ruleContext.databaseId;
13
13
  const rulesFile = ruleContext.rulesFile;
@@ -16,4 +16,3 @@ async function default_1(context) {
16
16
  }
17
17
  }));
18
18
  }
19
- exports.default = default_1;