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,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.secretAccess = exports.cloudBuildEnabled = exports.defaultServiceAccount = void 0;
3
+ exports.defaultServiceAccount = defaultServiceAccount;
4
+ exports.cloudBuildEnabled = cloudBuildEnabled;
5
+ exports.secretAccess = secretAccess;
4
6
  const clc = require("colorette");
5
7
  const ensureApiEnabled_1 = require("../../ensureApiEnabled");
6
8
  const error_1 = require("../../error");
@@ -28,7 +30,6 @@ async function defaultServiceAccount(e) {
28
30
  }
29
31
  (0, functional_1.assertExhaustive)(e.platform);
30
32
  }
31
- exports.defaultServiceAccount = defaultServiceAccount;
32
33
  function nodeBillingError(projectId) {
33
34
  return new error_1.FirebaseError(`Cloud Functions deployment requires the pay-as-you-go (Blaze) billing plan. To upgrade your project, visit the following URL:
34
35
 
@@ -50,8 +51,7 @@ ${FAQ_URL}
50
51
  `);
51
52
  }
52
53
  function isPermissionError(e) {
53
- var _a, _b, _c;
54
- return ((_c = (_b = (_a = e.context) === null || _a === void 0 ? void 0 : _a.body) === null || _b === void 0 ? void 0 : _b.error) === null || _c === void 0 ? void 0 : _c.status) === "PERMISSION_DENIED";
54
+ return e.context?.body?.error?.status === "PERMISSION_DENIED";
55
55
  }
56
56
  async function cloudBuildEnabled(projectId) {
57
57
  try {
@@ -67,7 +67,6 @@ async function cloudBuildEnabled(projectId) {
67
67
  throw e;
68
68
  }
69
69
  }
70
- exports.cloudBuildEnabled = cloudBuildEnabled;
71
70
  async function secretsToServiceAccounts(b) {
72
71
  const secretsToSa = {};
73
72
  for (const e of backend.allEndpoints(b)) {
@@ -81,7 +80,6 @@ async function secretsToServiceAccounts(b) {
81
80
  return secretsToSa;
82
81
  }
83
82
  async function secretAccess(projectId, wantBackend, haveBackend, dryRun) {
84
- var _a, _b;
85
83
  const ensureAccess = async (secret, serviceAccounts) => {
86
84
  (0, utils_1.logLabeledBullet)("functions", `ensuring ${clc.bold(serviceAccounts.join(", "))} access to secret ${clc.bold(secret)}.`);
87
85
  if (dryRun) {
@@ -99,9 +97,9 @@ async function secretAccess(projectId, wantBackend, haveBackend, dryRun) {
99
97
  const haveSecrets = await secretsToServiceAccounts(haveBackend);
100
98
  for (const [secret, serviceAccounts] of Object.entries(haveSecrets)) {
101
99
  for (const serviceAccount of serviceAccounts) {
102
- (_a = wantSecrets[secret]) === null || _a === void 0 ? void 0 : _a.delete(serviceAccount);
100
+ wantSecrets[secret]?.delete(serviceAccount);
103
101
  }
104
- if (((_b = wantSecrets[secret]) === null || _b === void 0 ? void 0 : _b.size) === 0) {
102
+ if (wantSecrets[secret]?.size === 0) {
105
103
  delete wantSecrets[secret];
106
104
  }
107
105
  }
@@ -111,4 +109,3 @@ async function secretAccess(projectId, wantBackend, haveBackend, dryRun) {
111
109
  }
112
110
  await Promise.all(ensure);
113
111
  }
114
- exports.secretAccess = secretAccess;
@@ -1,6 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isEndpointFiltered = exports.isCodebaseFiltered = exports.groupEndpointsByCodebase = exports.targetCodebases = exports.getFunctionLabel = exports.getHumanFriendlyPlatformName = exports.getEndpointFilters = exports.parseFunctionSelector = exports.endpointMatchesFilter = exports.endpointMatchesAnyFilter = void 0;
3
+ exports.endpointMatchesAnyFilter = endpointMatchesAnyFilter;
4
+ exports.endpointMatchesFilter = endpointMatchesFilter;
5
+ exports.parseFunctionSelector = parseFunctionSelector;
6
+ exports.getEndpointFilters = getEndpointFilters;
7
+ exports.getHumanFriendlyPlatformName = getHumanFriendlyPlatformName;
8
+ exports.getFunctionLabel = getFunctionLabel;
9
+ exports.targetCodebases = targetCodebases;
10
+ exports.groupEndpointsByCodebase = groupEndpointsByCodebase;
11
+ exports.isCodebaseFiltered = isCodebaseFiltered;
12
+ exports.isEndpointFiltered = isEndpointFiltered;
4
13
  const backend = require("./backend");
5
14
  const projectConfig_1 = require("../../functions/projectConfig");
6
15
  const functional_1 = require("../../functional");
@@ -10,7 +19,6 @@ function endpointMatchesAnyFilter(endpoint, filters) {
10
19
  }
11
20
  return filters.some((filter) => endpointMatchesFilter(endpoint, filter));
12
21
  }
13
- exports.endpointMatchesAnyFilter = endpointMatchesAnyFilter;
14
22
  function endpointMatchesFilter(endpoint, filter) {
15
23
  if (endpoint.codebase && filter.codebase) {
16
24
  if (endpoint.codebase !== filter.codebase) {
@@ -31,7 +39,6 @@ function endpointMatchesFilter(endpoint, filter) {
31
39
  }
32
40
  return true;
33
41
  }
34
- exports.endpointMatchesFilter = endpointMatchesFilter;
35
42
  function parseFunctionSelector(selector, config) {
36
43
  const fragments = selector.split(":");
37
44
  if (fragments.length < 2) {
@@ -48,7 +55,6 @@ function parseFunctionSelector(selector, config) {
48
55
  },
49
56
  ];
50
57
  }
51
- exports.parseFunctionSelector = parseFunctionSelector;
52
58
  function getEndpointFilters(options, config) {
53
59
  if (!options.only) {
54
60
  return undefined;
@@ -68,7 +74,6 @@ function getEndpointFilters(options, config) {
68
74
  }
69
75
  return filters;
70
76
  }
71
- exports.getEndpointFilters = getEndpointFilters;
72
77
  function getHumanFriendlyPlatformName(platform) {
73
78
  if (platform === "gcfv1") {
74
79
  return "1st Gen";
@@ -81,7 +86,6 @@ function getHumanFriendlyPlatformName(platform) {
81
86
  }
82
87
  (0, functional_1.assertExhaustive)(platform);
83
88
  }
84
- exports.getHumanFriendlyPlatformName = getHumanFriendlyPlatformName;
85
89
  function getFunctionLabel(fn) {
86
90
  let id = `${fn.id}(${fn.region})`;
87
91
  if (fn.codebase && fn.codebase !== projectConfig_1.DEFAULT_CODEBASE) {
@@ -89,7 +93,6 @@ function getFunctionLabel(fn) {
89
93
  }
90
94
  return id;
91
95
  }
92
- exports.getFunctionLabel = getFunctionLabel;
93
96
  function targetCodebases(config, filters) {
94
97
  const codebasesFromConfig = [...new Set(Object.values(config).map((c) => c.codebase))];
95
98
  if (!filters) {
@@ -109,7 +112,6 @@ function targetCodebases(config, filters) {
109
112
  }
110
113
  return intersections;
111
114
  }
112
- exports.targetCodebases = targetCodebases;
113
115
  function groupEndpointsByCodebase(wantBackends, haveEndpoints) {
114
116
  const grouped = {};
115
117
  let endpointsToAssign = haveEndpoints;
@@ -128,15 +130,12 @@ function groupEndpointsByCodebase(wantBackends, haveEndpoints) {
128
130
  }
129
131
  return grouped;
130
132
  }
131
- exports.groupEndpointsByCodebase = groupEndpointsByCodebase;
132
133
  function isCodebaseFiltered(codebase, filters) {
133
134
  return filters.some((filter) => {
134
135
  const noIdChunks = (filter.idChunks || []).length === 0;
135
136
  return noIdChunks && filter.codebase === codebase;
136
137
  });
137
138
  }
138
- exports.isCodebaseFiltered = isCodebaseFiltered;
139
139
  function isEndpointFiltered(endpoint, filters) {
140
140
  return filters.some((filter) => endpointMatchesFilter(endpoint, filter));
141
141
  }
142
- exports.isEndpointFiltered = isEndpointFiltered;
@@ -1,6 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveParams = exports.ParamValue = exports.isMultiSelectInput = exports.isResourceInput = exports.isSelectInput = exports.isTextInput = exports.resolveBoolean = exports.resolveList = exports.resolveString = exports.resolveInt = void 0;
3
+ exports.ParamValue = void 0;
4
+ exports.resolveInt = resolveInt;
5
+ exports.resolveString = resolveString;
6
+ exports.resolveList = resolveList;
7
+ exports.resolveBoolean = resolveBoolean;
8
+ exports.isTextInput = isTextInput;
9
+ exports.isSelectInput = isSelectInput;
10
+ exports.isResourceInput = isResourceInput;
11
+ exports.isMultiSelectInput = isMultiSelectInput;
12
+ exports.resolveParams = resolveParams;
4
13
  const logger_1 = require("../../logger");
5
14
  const error_1 = require("../../error");
6
15
  const prompt_1 = require("../../prompt");
@@ -25,7 +34,6 @@ function resolveInt(from, paramValues) {
25
34
  }
26
35
  return (0, cel_1.resolveExpression)("number", from, paramValues);
27
36
  }
28
- exports.resolveInt = resolveInt;
29
37
  function resolveString(from, paramValues) {
30
38
  let output = from;
31
39
  const celCapture = /{{ .+? }}/g;
@@ -39,7 +47,6 @@ function resolveString(from, paramValues) {
39
47
  }
40
48
  return output;
41
49
  }
42
- exports.resolveString = resolveString;
43
50
  function resolveList(from, paramValues) {
44
51
  if (!from) {
45
52
  return [];
@@ -54,30 +61,24 @@ function resolveList(from, paramValues) {
54
61
  (0, functional_1.assertExhaustive)(from);
55
62
  }
56
63
  }
57
- exports.resolveList = resolveList;
58
64
  function resolveBoolean(from, paramValues) {
59
65
  if (typeof from === "boolean") {
60
66
  return from;
61
67
  }
62
68
  return (0, cel_1.resolveExpression)("boolean", from, paramValues);
63
69
  }
64
- exports.resolveBoolean = resolveBoolean;
65
70
  function isTextInput(input) {
66
71
  return {}.hasOwnProperty.call(input, "text");
67
72
  }
68
- exports.isTextInput = isTextInput;
69
73
  function isSelectInput(input) {
70
74
  return {}.hasOwnProperty.call(input, "select");
71
75
  }
72
- exports.isSelectInput = isSelectInput;
73
76
  function isResourceInput(input) {
74
77
  return {}.hasOwnProperty.call(input, "resource");
75
78
  }
76
- exports.isResourceInput = isResourceInput;
77
79
  function isMultiSelectInput(input) {
78
80
  return {}.hasOwnProperty.call(input, "multiSelect");
79
81
  }
80
- exports.isMultiSelectInput = isMultiSelectInput;
81
82
  class ParamValue {
82
83
  constructor(rawValue, internal, types) {
83
84
  this.rawValue = rawValue;
@@ -192,7 +193,6 @@ async function resolveParams(params, firebaseConfig, userEnvs, nonInteractive, i
192
193
  }
193
194
  return paramValues;
194
195
  }
195
- exports.resolveParams = resolveParams;
196
196
  function populateDefaultParams(config) {
197
197
  const defaultParams = {};
198
198
  if (config.databaseURL && config.databaseURL !== "") {
@@ -1,6 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureAllRequiredAPIsEnabled = exports.warnIfNewGenkitFunctionIsMissingSecrets = exports.loadCodebases = exports.resolveCpuAndConcurrency = exports.inferBlockingDetails = exports.updateEndpointTargetedStatus = exports.inferDetailsFromExisting = exports.prepare = exports.EVENTARC_SOURCE_ENV = void 0;
3
+ exports.EVENTARC_SOURCE_ENV = void 0;
4
+ exports.prepare = prepare;
5
+ exports.inferDetailsFromExisting = inferDetailsFromExisting;
6
+ exports.updateEndpointTargetedStatus = updateEndpointTargetedStatus;
7
+ exports.inferBlockingDetails = inferBlockingDetails;
8
+ exports.resolveCpuAndConcurrency = resolveCpuAndConcurrency;
9
+ exports.loadCodebases = loadCodebases;
10
+ exports.warnIfNewGenkitFunctionIsMissingSecrets = warnIfNewGenkitFunctionIsMissingSecrets;
11
+ exports.ensureAllRequiredAPIsEnabled = ensureAllRequiredAPIsEnabled;
4
12
  const clc = require("colorette");
5
13
  const proto = require("../../gcp/proto");
6
14
  const backend = require("./backend");
@@ -30,10 +38,8 @@ const backend_1 = require("./backend");
30
38
  const functional_1 = require("../../functional");
31
39
  const prepare_1 = require("../extensions/prepare");
32
40
  const prompt = require("../../prompt");
33
- const experiments = require("../../experiments");
34
41
  exports.EVENTARC_SOURCE_ENV = "EVENTARC_CLOUD_EVENT_SOURCE";
35
42
  async function prepare(context, options, payload) {
36
- var _a, _b;
37
43
  const projectId = (0, projectUtils_1.needProjectId)(options);
38
44
  const projectNumber = await (0, projectUtils_1.needProjectNumber)(options);
39
45
  context.config = (0, projectConfig_1.normalizeAndValidate)(options.config.src.functions);
@@ -55,12 +61,9 @@ async function prepare(context, options, payload) {
55
61
  context.firebaseConfig = firebaseConfig;
56
62
  context.codebaseDeployEvents = {};
57
63
  let runtimeConfig = { firebase: firebaseConfig };
58
- const allowFunctionsConfig = experiments.isEnabled("legacyRuntimeConfigCommands");
59
64
  const targetedCodebaseConfigs = context.config.filter((cfg) => codebases.includes(cfg.codebase));
60
- if (allowFunctionsConfig &&
61
- checkAPIsEnabled[1] &&
62
- targetedCodebaseConfigs.some(projectConfig_1.shouldUseRuntimeConfig)) {
63
- runtimeConfig = Object.assign(Object.assign({}, runtimeConfig), (await (0, prepareFunctionsUpload_1.getFunctionsConfig)(projectId)));
65
+ if (checkAPIsEnabled[1] && targetedCodebaseConfigs.some(projectConfig_1.shouldUseRuntimeConfig)) {
66
+ runtimeConfig = { ...runtimeConfig, ...(await (0, prepareFunctionsUpload_1.getFunctionsConfig)(projectId)) };
64
67
  }
65
68
  context.hasRuntimeConfig = Object.keys(runtimeConfig).some((k) => k !== "firebase");
66
69
  const wantBuilds = await loadCodebases(context.config, options, firebaseConfig, runtimeConfig, context.filters);
@@ -84,7 +87,7 @@ async function prepare(context, options, payload) {
84
87
  };
85
88
  proto.convertIfPresent(userEnvOpt, localCfg, "configDir", (cd) => options.config.path(cd));
86
89
  const userEnvs = functionsEnv.loadUserEnvs(userEnvOpt);
87
- const envs = Object.assign(Object.assign({}, userEnvs), firebaseEnvs);
90
+ const envs = { ...userEnvs, ...firebaseEnvs };
88
91
  const { backend: wantBackend, envs: resolvedEnvs } = await build.resolveBackend({
89
92
  build: wantBuild,
90
93
  firebaseConfig,
@@ -96,8 +99,8 @@ async function prepare(context, options, payload) {
96
99
  let hasEnvsFromParams = false;
97
100
  wantBackend.environmentVariables = envs;
98
101
  for (const envName of Object.keys(resolvedEnvs)) {
99
- const isList = (_a = resolvedEnvs[envName]) === null || _a === void 0 ? void 0 : _a.legalList;
100
- const envValue = (_b = resolvedEnvs[envName]) === null || _b === void 0 ? void 0 : _b.toSDK();
102
+ const isList = resolvedEnvs[envName]?.legalList;
103
+ const envValue = resolvedEnvs[envName]?.toSDK();
101
104
  if (envValue &&
102
105
  !resolvedEnvs[envName].internal &&
103
106
  (!Object.prototype.hasOwnProperty.call(wantBackend.environmentVariables, envName) || isList)) {
@@ -106,7 +109,7 @@ async function prepare(context, options, payload) {
106
109
  }
107
110
  }
108
111
  for (const endpoint of backend.allEndpoints(wantBackend)) {
109
- endpoint.environmentVariables = Object.assign({}, (wantBackend.environmentVariables || {}));
112
+ endpoint.environmentVariables = { ...(wantBackend.environmentVariables || {}) };
110
113
  let resource;
111
114
  if (endpoint.platform === "gcfv1") {
112
115
  resource = `projects/${endpoint.project}/locations/${endpoint.region}/functions/${endpoint.id}`;
@@ -155,15 +158,22 @@ async function prepare(context, options, payload) {
155
158
  (0, utils_1.logLabeledBullet)("functions", `preparing ${clc.bold(sourceDirName)} directory for uploading...`);
156
159
  }
157
160
  if (backend.someEndpoint(wantBackend, (e) => e.platform === "gcfv2")) {
158
- const packagedSource = await (0, prepareFunctionsUpload_1.prepareFunctionsUpload)(sourceDir, localCfg);
159
- source.functionsSourceV2 = packagedSource === null || packagedSource === void 0 ? void 0 : packagedSource.pathToSource;
160
- source.functionsSourceV2Hash = packagedSource === null || packagedSource === void 0 ? void 0 : packagedSource.hash;
161
+ const schPathSet = new Set();
162
+ for (const e of backend.allEndpoints(wantBackend)) {
163
+ if (backend.isDataConnectGraphqlTriggered(e) &&
164
+ e.dataConnectGraphqlTrigger.schemaFilePath) {
165
+ schPathSet.add(e.dataConnectGraphqlTrigger.schemaFilePath);
166
+ }
167
+ }
168
+ const packagedSource = await (0, prepareFunctionsUpload_1.prepareFunctionsUpload)(options.config.projectDir, sourceDir, localCfg, [...schPathSet]);
169
+ source.functionsSourceV2 = packagedSource?.pathToSource;
170
+ source.functionsSourceV2Hash = packagedSource?.hash;
161
171
  }
162
172
  if (backend.someEndpoint(wantBackend, (e) => e.platform === "gcfv1")) {
163
173
  const configForUpload = (0, projectConfig_1.shouldUseRuntimeConfig)(localCfg) ? runtimeConfig : undefined;
164
- const packagedSource = await (0, prepareFunctionsUpload_1.prepareFunctionsUpload)(sourceDir, localCfg, configForUpload);
165
- source.functionsSourceV1 = packagedSource === null || packagedSource === void 0 ? void 0 : packagedSource.pathToSource;
166
- source.functionsSourceV1Hash = packagedSource === null || packagedSource === void 0 ? void 0 : packagedSource.hash;
174
+ const packagedSource = await (0, prepareFunctionsUpload_1.prepareFunctionsUpload)(options.config.projectDir, sourceDir, localCfg, [], configForUpload);
175
+ source.functionsSourceV1 = packagedSource?.pathToSource;
176
+ source.functionsSourceV1Hash = packagedSource?.hash;
167
177
  }
168
178
  context.sources[codebase] = source;
169
179
  }
@@ -197,17 +207,18 @@ async function prepare(context, options, payload) {
197
207
  updateEndpointTargetedStatus(wantBackends, context.filters || []);
198
208
  (0, applyHash_1.applyBackendHashToBackends)(wantBackends, context);
199
209
  }
200
- exports.prepare = prepare;
201
210
  function inferDetailsFromExisting(want, have, usedDotenv) {
202
- var _a;
203
211
  for (const wantE of backend.allEndpoints(want)) {
204
- const haveE = (_a = have.endpoints[wantE.region]) === null || _a === void 0 ? void 0 : _a[wantE.id];
212
+ const haveE = have.endpoints[wantE.region]?.[wantE.id];
205
213
  if (!haveE) {
206
214
  continue;
207
215
  }
208
216
  wantE.runServiceId = haveE.runServiceId;
209
217
  if (!usedDotenv) {
210
- wantE.environmentVariables = Object.assign(Object.assign({}, haveE.environmentVariables), wantE.environmentVariables);
218
+ wantE.environmentVariables = {
219
+ ...haveE.environmentVariables,
220
+ ...wantE.environmentVariables,
221
+ };
211
222
  }
212
223
  if (typeof wantE.availableMemoryMb === "undefined" && haveE.availableMemoryMb) {
213
224
  wantE.availableMemoryMb = haveE.availableMemoryMb;
@@ -219,7 +230,6 @@ function inferDetailsFromExisting(want, have, usedDotenv) {
219
230
  maybeCopyTriggerRegion(wantE, haveE);
220
231
  }
221
232
  }
222
- exports.inferDetailsFromExisting = inferDetailsFromExisting;
223
233
  function maybeCopyTriggerRegion(wantE, haveE) {
224
234
  if (!backend.isEventTriggered(wantE) || !backend.isEventTriggered(haveE)) {
225
235
  return;
@@ -240,9 +250,7 @@ function updateEndpointTargetedStatus(wantBackends, endpointFilters) {
240
250
  }
241
251
  }
242
252
  }
243
- exports.updateEndpointTargetedStatus = updateEndpointTargetedStatus;
244
253
  function inferBlockingDetails(want) {
245
- var _a, _b, _c;
246
254
  const authBlockingEndpoints = backend
247
255
  .allEndpoints(want)
248
256
  .filter((ep) => backend.isBlockingTriggered(ep) &&
@@ -254,9 +262,9 @@ function inferBlockingDetails(want) {
254
262
  let idToken = false;
255
263
  let refreshToken = false;
256
264
  for (const blockingEp of authBlockingEndpoints) {
257
- accessToken || (accessToken = !!((_a = blockingEp.blockingTrigger.options) === null || _a === void 0 ? void 0 : _a.accessToken));
258
- idToken || (idToken = !!((_b = blockingEp.blockingTrigger.options) === null || _b === void 0 ? void 0 : _b.idToken));
259
- refreshToken || (refreshToken = !!((_c = blockingEp.blockingTrigger.options) === null || _c === void 0 ? void 0 : _c.refreshToken));
265
+ accessToken || (accessToken = !!blockingEp.blockingTrigger.options?.accessToken);
266
+ idToken || (idToken = !!blockingEp.blockingTrigger.options?.idToken);
267
+ refreshToken || (refreshToken = !!blockingEp.blockingTrigger.options?.refreshToken);
260
268
  }
261
269
  for (const blockingEp of authBlockingEndpoints) {
262
270
  if (!blockingEp.blockingTrigger.options) {
@@ -267,7 +275,6 @@ function inferBlockingDetails(want) {
267
275
  blockingEp.blockingTrigger.options.refreshToken = refreshToken;
268
276
  }
269
277
  }
270
- exports.inferBlockingDetails = inferBlockingDetails;
271
278
  function resolveCpuAndConcurrency(want) {
272
279
  for (const e of backend.allEndpoints(want)) {
273
280
  if (e.platform === "gcfv1") {
@@ -284,7 +291,6 @@ function resolveCpuAndConcurrency(want) {
284
291
  }
285
292
  }
286
293
  }
287
- exports.resolveCpuAndConcurrency = resolveCpuAndConcurrency;
288
294
  async function loadCodebases(config, options, firebaseConfig, runtimeConfig, filters) {
289
295
  const codebases = (0, functionsDeployHelper_1.targetCodebases)(config, filters);
290
296
  const projectId = (0, projectUtils_1.needProjectId)(options);
@@ -321,24 +327,25 @@ async function loadCodebases(config, options, firebaseConfig, runtimeConfig, fil
321
327
  const codebaseRuntimeConfig = (0, projectConfig_1.shouldUseRuntimeConfig)(codebaseConfig)
322
328
  ? runtimeConfig
323
329
  : { firebase: firebaseConfig };
324
- const discoveredBuild = await runtimeDelegate.discoverBuild(codebaseRuntimeConfig, Object.assign(Object.assign({}, firebaseEnvs), { GOOGLE_CLOUD_QUOTA_PROJECT: projectId }));
330
+ const discoveredBuild = await runtimeDelegate.discoverBuild(codebaseRuntimeConfig, {
331
+ ...firebaseEnvs,
332
+ GOOGLE_CLOUD_QUOTA_PROJECT: projectId,
333
+ });
325
334
  discoveredBuild.runtime = codebaseConfig.runtime;
326
335
  build.applyPrefix(discoveredBuild, codebaseConfig.prefix || "");
327
336
  wantBuilds[codebase] = discoveredBuild;
328
337
  }
329
338
  return wantBuilds;
330
339
  }
331
- exports.loadCodebases = loadCodebases;
332
340
  async function warnIfNewGenkitFunctionIsMissingSecrets(have, want, options) {
333
341
  if (options.force) {
334
342
  return;
335
343
  }
336
344
  const newAndMissingSecrets = backend.allEndpoints(backend.matchingBackend(want, (e) => {
337
- var _a;
338
345
  if (!backend.isCallableTriggered(e) || !e.callableTrigger.genkitAction) {
339
346
  return false;
340
347
  }
341
- if ((_a = e.secretEnvironmentVariables) === null || _a === void 0 ? void 0 : _a.length) {
348
+ if (e.secretEnvironmentVariables?.length) {
342
349
  return false;
343
350
  }
344
351
  return !backend.hasEndpoint(have)(e);
@@ -352,7 +359,6 @@ async function warnIfNewGenkitFunctionIsMissingSecrets(have, want, options) {
352
359
  }
353
360
  }
354
361
  }
355
- exports.warnIfNewGenkitFunctionIsMissingSecrets = warnIfNewGenkitFunctionIsMissingSecrets;
356
362
  async function ensureAllRequiredAPIsEnabled(projectNumber, wantBackend) {
357
363
  await Promise.all(Object.values(wantBackend.requiredAPIs).map(({ api }) => {
358
364
  return ensureApiEnabled.ensure(projectNumber, api, "functions", false);
@@ -373,4 +379,3 @@ async function ensureAllRequiredAPIsEnabled(projectNumber, wantBackend) {
373
379
  await ensureApiEnabled.ensure(projectNumber, (0, api_1.secretManagerOrigin)(), "functions", false);
374
380
  }
375
381
  }
376
- exports.ensureAllRequiredAPIsEnabled = ensureAllRequiredAPIsEnabled;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertToSortedKeyValueArray = exports.prepareFunctionsUpload = exports.getFunctionsConfig = void 0;
3
+ exports.getFunctionsConfig = getFunctionsConfig;
4
+ exports.prepareFunctionsUpload = prepareFunctionsUpload;
5
+ exports.convertToSortedKeyValueArray = convertToSortedKeyValueArray;
4
6
  const archiver = require("archiver");
5
7
  const clc = require("colorette");
6
8
  const filesize = require("filesize");
@@ -15,13 +17,12 @@ const utils = require("../../utils");
15
17
  const fsAsync = require("../../fsAsync");
16
18
  const CONFIG_DEST_FILE = ".runtimeconfig.json";
17
19
  async function getFunctionsConfig(projectId) {
18
- var _a, _b;
19
20
  try {
20
21
  return await functionsConfig.materializeAll(projectId);
21
22
  }
22
23
  catch (err) {
23
24
  logger_1.logger.debug(err);
24
- let errorCode = (_b = (_a = err === null || err === void 0 ? void 0 : err.context) === null || _a === void 0 ? void 0 : _a.response) === null || _b === void 0 ? void 0 : _b.statusCode;
25
+ let errorCode = err?.context?.response?.statusCode;
25
26
  if (!errorCode) {
26
27
  logger_1.logger.debug("Got unexpected error from Runtime Config; it has no status code:", err);
27
28
  errorCode = 500;
@@ -35,16 +36,15 @@ async function getFunctionsConfig(projectId) {
35
36
  }
36
37
  return {};
37
38
  }
38
- exports.getFunctionsConfig = getFunctionsConfig;
39
39
  async function pipeAsync(from, to) {
40
40
  from.pipe(to);
41
41
  await from.finalize();
42
42
  return new Promise((resolve, reject) => {
43
- to.on("finish", resolve);
43
+ to.on("finish", () => resolve());
44
44
  to.on("error", reject);
45
45
  });
46
46
  }
47
- async function packageSource(sourceDir, config, runtimeConfig) {
47
+ async function packageSource(projectDir, sourceDir, config, additionalSources, runtimeConfig) {
48
48
  const tmpFile = tmp.fileSync({ prefix: "firebase-functions-", postfix: ".zip" }).name;
49
49
  const fileStream = fs.createWriteStream(tmpFile, {
50
50
  flags: "w",
@@ -65,6 +65,19 @@ async function packageSource(sourceDir, config, runtimeConfig) {
65
65
  mode: file.mode,
66
66
  });
67
67
  }
68
+ for (const name of additionalSources) {
69
+ const absPath = utils.resolveWithin(projectDir, name);
70
+ if (!fs.existsSync(absPath)) {
71
+ throw new error_1.FirebaseError(clc.bold(absPath) + " does not exist.", { exit: 1 });
72
+ }
73
+ const mode = fs.statSync(absPath).mode;
74
+ const fileHash = await (0, hash_1.getSourceHash)(absPath);
75
+ hashes.push(fileHash);
76
+ archive.file(absPath, {
77
+ name,
78
+ mode,
79
+ });
80
+ }
68
81
  if (typeof runtimeConfig !== "undefined") {
69
82
  const runtimeConfigHashString = JSON.stringify(convertToSortedKeyValueArray(runtimeConfig));
70
83
  hashes.push(runtimeConfigHashString);
@@ -80,6 +93,9 @@ async function packageSource(sourceDir, config, runtimeConfig) {
80
93
  await pipeAsync(archive, fileStream);
81
94
  }
82
95
  catch (err) {
96
+ if (err instanceof error_1.FirebaseError) {
97
+ throw err;
98
+ }
83
99
  throw new error_1.FirebaseError("Could not read source directory. Remove links and shortcuts and try again.", {
84
100
  original: err,
85
101
  exit: 1,
@@ -94,10 +110,9 @@ async function packageSource(sourceDir, config, runtimeConfig) {
94
110
  const hash = hashes.join(".");
95
111
  return { pathToSource: tmpFile, hash };
96
112
  }
97
- async function prepareFunctionsUpload(sourceDir, config, runtimeConfig) {
98
- return packageSource(sourceDir, config, runtimeConfig);
113
+ async function prepareFunctionsUpload(projectDir, sourceDir, config, additionalSources, runtimeConfig) {
114
+ return packageSource(projectDir, sourceDir, config, additionalSources, runtimeConfig);
99
115
  }
100
- exports.prepareFunctionsUpload = prepareFunctionsUpload;
101
116
  function convertToSortedKeyValueArray(config) {
102
117
  if (typeof config !== "object" || config === null)
103
118
  return config;
@@ -107,4 +122,3 @@ function convertToSortedKeyValueArray(config) {
107
122
  return { key, value: convertToSortedKeyValueArray(config[key]) };
108
123
  });
109
124
  }
110
- exports.convertToSortedKeyValueArray = convertToSortedKeyValueArray;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.monthlyMinInstanceCost = exports.canCalculateMinInstanceCost = exports.V2_FREE_TIER = exports.V1_FREE_TIER = exports.V2_RATES = exports.V1_RATES = void 0;
3
+ exports.V2_FREE_TIER = exports.V1_FREE_TIER = exports.V2_RATES = exports.V1_RATES = void 0;
4
+ exports.canCalculateMinInstanceCost = canCalculateMinInstanceCost;
5
+ exports.monthlyMinInstanceCost = monthlyMinInstanceCost;
4
6
  const backend = require("./backend");
5
7
  const V1_REGION_TO_TIER = {
6
8
  "us-central1": 1,
@@ -124,7 +126,6 @@ function canCalculateMinInstanceCost(endpoint) {
124
126
  }
125
127
  return true;
126
128
  }
127
- exports.canCalculateMinInstanceCost = canCalculateMinInstanceCost;
128
129
  const SECONDS_PER_MONTH = 30 * 24 * 60 * 60;
129
130
  function monthlyMinInstanceCost(endpoints) {
130
131
  const usage = {
@@ -175,4 +176,3 @@ function monthlyMinInstanceCost(endpoints) {
175
176
  runCpuBill = Math.max(runCpuBill, 0);
176
177
  return v1MemoryBill + v1CpuBill + v2MemoryBill + v2CpuBill + runMemoryBill + runCpuBill;
177
178
  }
178
- exports.monthlyMinInstanceCost = monthlyMinInstanceCost;
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.promptForCleanupPolicyDays = exports.promptForMinInstances = exports.promptForUnsafeMigration = exports.promptForFunctionDeletion = exports.promptForFailurePolicies = void 0;
3
+ exports.promptForFailurePolicies = promptForFailurePolicies;
4
+ exports.promptForFunctionDeletion = promptForFunctionDeletion;
5
+ exports.promptForUnsafeMigration = promptForUnsafeMigration;
6
+ exports.promptForMinInstances = promptForMinInstances;
7
+ exports.promptForCleanupPolicyDays = promptForCleanupPolicyDays;
4
8
  const clc = require("colorette");
5
9
  const functionsDeployHelper_1 = require("./functionsDeployHelper");
6
10
  const error_1 = require("../../error");
@@ -18,8 +22,7 @@ async function promptForFailurePolicies(options, want, have) {
18
22
  return;
19
23
  }
20
24
  const newRetryEndpoints = retryEndpoints.filter((endpoint) => {
21
- var _a;
22
- const existing = (_a = have.endpoints[endpoint.region]) === null || _a === void 0 ? void 0 : _a[endpoint.id];
25
+ const existing = have.endpoints[endpoint.region]?.[endpoint.id];
23
26
  return !(existing && backend.isEventTriggered(existing) && existing.eventTrigger.retry);
24
27
  });
25
28
  if (newRetryEndpoints.length === 0) {
@@ -44,7 +47,6 @@ async function promptForFailurePolicies(options, want, have) {
44
47
  throw new error_1.FirebaseError("Deployment canceled.", { exit: 1 });
45
48
  }
46
49
  }
47
- exports.promptForFailurePolicies = promptForFailurePolicies;
48
50
  async function promptForFunctionDeletion(functionsToDelete, options) {
49
51
  let shouldDeleteFns = true;
50
52
  if (functionsToDelete.length === 0 || options.force) {
@@ -78,7 +80,6 @@ async function promptForFunctionDeletion(functionsToDelete, options) {
78
80
  }
79
81
  return shouldDeleteFns;
80
82
  }
81
- exports.promptForFunctionDeletion = promptForFunctionDeletion;
82
83
  async function promptForUnsafeMigration(fnsToUpdate, options) {
83
84
  const unsafeUpdates = fnsToUpdate.filter((eu) => eu.unsafe);
84
85
  if (unsafeUpdates.length === 0 || options.force) {
@@ -109,18 +110,16 @@ async function promptForUnsafeMigration(fnsToUpdate, options) {
109
110
  }
110
111
  return safeUpdates;
111
112
  }
112
- exports.promptForUnsafeMigration = promptForUnsafeMigration;
113
113
  async function promptForMinInstances(options, want, have) {
114
114
  if (options.force) {
115
115
  return;
116
116
  }
117
117
  const increasesCost = backend.someEndpoint(want, (wantE) => {
118
- var _a;
119
118
  if (!pricing.canCalculateMinInstanceCost(wantE)) {
120
119
  return true;
121
120
  }
122
121
  const wantCost = pricing.monthlyMinInstanceCost([wantE]);
123
- const haveE = (_a = have.endpoints[wantE.region]) === null || _a === void 0 ? void 0 : _a[wantE.id];
122
+ const haveE = have.endpoints[wantE.region]?.[wantE.id];
124
123
  let haveCost;
125
124
  if (!haveE) {
126
125
  haveCost = 0;
@@ -174,7 +173,6 @@ async function promptForMinInstances(options, want, have) {
174
173
  throw new error_1.FirebaseError("Deployment canceled.", { exit: 1 });
175
174
  }
176
175
  }
177
- exports.promptForMinInstances = promptForMinInstances;
178
176
  async function promptForCleanupPolicyDays(options, locations) {
179
177
  utils.logLabeledWarning("functions", `No cleanup policy detected for repositories in ${locations.join(", ")}. ` +
180
178
  "This may result in a small monthly bill as container images accumulate over time.");
@@ -193,4 +191,3 @@ async function promptForCleanupPolicyDays(options, locations) {
193
191
  validate: (days) => !days || isNaN(days) || days < 0 ? "Please enter a non-negative number" : true,
194
192
  });
195
193
  }
196
- exports.promptForCleanupPolicyDays = promptForCleanupPolicyDays;
@@ -4,12 +4,11 @@ exports.InlineExecutor = exports.QueueExecutor = exports.DEFAULT_RETRY_CODES = v
4
4
  const queue_1 = require("../../../throttler/queue");
5
5
  exports.DEFAULT_RETRY_CODES = [429, 409, 503];
6
6
  function parseErrorCode(err) {
7
- var _a, _b, _c, _d, _e, _f;
8
7
  return (err.status ||
9
8
  err.code ||
10
- ((_b = (_a = err.context) === null || _a === void 0 ? void 0 : _a.response) === null || _b === void 0 ? void 0 : _b.statusCode) ||
11
- ((_c = err.original) === null || _c === void 0 ? void 0 : _c.code) ||
12
- ((_f = (_e = (_d = err.original) === null || _d === void 0 ? void 0 : _d.context) === null || _e === void 0 ? void 0 : _e.response) === null || _f === void 0 ? void 0 : _f.statusCode));
9
+ err.context?.response?.statusCode ||
10
+ err.original?.code ||
11
+ err.original?.context?.response?.statusCode);
13
12
  }
14
13
  async function handler(op) {
15
14
  try {
@@ -27,10 +26,10 @@ async function handler(op) {
27
26
  }
28
27
  class QueueExecutor {
29
28
  constructor(options) {
30
- this.queue = new queue_1.Queue(Object.assign(Object.assign({}, options), { handler }));
29
+ this.queue = new queue_1.Queue({ ...options, handler });
31
30
  }
32
31
  async run(func, opts) {
33
- const retryCodes = (opts === null || opts === void 0 ? void 0 : opts.retryCodes) || exports.DEFAULT_RETRY_CODES;
32
+ const retryCodes = opts?.retryCodes || exports.DEFAULT_RETRY_CODES;
34
33
  const op = {
35
34
  func,
36
35
  retryCodes,