firebase-tools 15.0.0 → 15.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (523) hide show
  1. package/lib/accountExporter.js +3 -5
  2. package/lib/accountImporter.js +4 -5
  3. package/lib/api.js +3 -3
  4. package/lib/apiv2.js +9 -13
  5. package/lib/appUtils.js +33 -36
  6. package/lib/appdistribution/client.js +4 -8
  7. package/lib/appdistribution/distribution.js +4 -4
  8. package/lib/appdistribution/options-parser-util.js +8 -9
  9. package/lib/appdistribution/types.js +2 -2
  10. package/lib/appdistribution/yaml_helper.js +33 -17
  11. package/lib/apphosting/app.js +8 -13
  12. package/lib/apphosting/backend.js +34 -24
  13. package/lib/apphosting/config.js +14 -14
  14. package/lib/apphosting/githubConnections.js +38 -35
  15. package/lib/apphosting/localbuilds.js +4 -6
  16. package/lib/apphosting/repo.js +24 -20
  17. package/lib/apphosting/rollout.js +12 -5
  18. package/lib/apphosting/secrets/dialogs.js +9 -9
  19. package/lib/apphosting/secrets/index.js +9 -11
  20. package/lib/apphosting/utils.js +2 -3
  21. package/lib/apphosting/yaml.js +12 -11
  22. package/lib/apptesting/ensureProjectConfigured.js +1 -2
  23. package/lib/apptesting/invokeTests.js +2 -3
  24. package/lib/apptesting/parseTestFiles.js +5 -6
  25. package/lib/apptesting/types.js +2 -2
  26. package/lib/archiveDirectory.js +1 -2
  27. package/lib/auth.js +36 -40
  28. package/lib/bin/cli.js +2 -3
  29. package/lib/bin/mcp.js +47 -10
  30. package/lib/checkMinRequiredVersion.js +1 -2
  31. package/lib/checkValidTargetFilters.js +1 -2
  32. package/lib/command.js +6 -9
  33. package/lib/commands/appdistribution-testers-list.js +2 -3
  34. package/lib/commands/apphosting-backends-list.js +4 -6
  35. package/lib/commands/apphosting-builds-create.js +2 -3
  36. package/lib/commands/apphosting-builds-get.js +1 -2
  37. package/lib/commands/apphosting-rollouts-list.js +1 -2
  38. package/lib/commands/apps-init.js +1 -1
  39. package/lib/commands/{apptesting-execute.js → apptesting-wata.js} +3 -4
  40. package/lib/commands/crashlytics-symbols-upload.js +2 -2
  41. package/lib/commands/dataconnect-execute.js +4 -4
  42. package/lib/commands/dataconnect-sdk-generate.js +5 -6
  43. package/lib/commands/dataconnect-services-list.js +7 -8
  44. package/lib/commands/dataconnect-sql-diff.js +1 -2
  45. package/lib/commands/dataconnect-sql-migrate.js +4 -3
  46. package/lib/commands/dataconnect-sql-setup.js +2 -2
  47. package/lib/commands/dataconnect-sql-shell.js +5 -1
  48. package/lib/commands/emulators-start.js +1 -2
  49. package/lib/commands/ext-configure.js +6 -4
  50. package/lib/commands/ext-dev-list.js +2 -3
  51. package/lib/commands/ext-dev-upload.js +2 -2
  52. package/lib/commands/ext-export.js +1 -1
  53. package/lib/commands/ext-info.js +2 -3
  54. package/lib/commands/ext-install.js +5 -7
  55. package/lib/commands/firestore-backups-list.js +1 -2
  56. package/lib/commands/firestore-backups-schedules-list.js +1 -2
  57. package/lib/commands/firestore-indexes-list.js +1 -2
  58. package/lib/commands/firestore-utils.js +1 -2
  59. package/lib/commands/functions-artifacts-setpolicy.js +1 -2
  60. package/lib/commands/functions-config-export.js +2 -3
  61. package/lib/commands/hosting-channel-deploy.js +2 -2
  62. package/lib/commands/hosting-clone.js +2 -3
  63. package/lib/commands/hosting-sites-create.js +1 -1
  64. package/lib/commands/index.js +2 -3
  65. package/lib/commands/init.js +4 -5
  66. package/lib/commands/internaltesting-functions-discover.js +1 -1
  67. package/lib/commands/login.js +4 -5
  68. package/lib/commands/logout.js +3 -3
  69. package/lib/commands/projects-create.js +1 -1
  70. package/lib/commands/remoteconfig-experiments-list.js +2 -3
  71. package/lib/commands/remoteconfig-get.js +1 -1
  72. package/lib/commands/remoteconfig-rollback.js +1 -2
  73. package/lib/commands/remoteconfig-rollouts-list.js +2 -3
  74. package/lib/commands/remoteconfig-versions-list.js +3 -4
  75. package/lib/commands/use.js +3 -3
  76. package/lib/config.js +4 -5
  77. package/lib/crashlytics/buildToolsJarHelper.js +3 -5
  78. package/lib/crashlytics/events.js +4 -7
  79. package/lib/crashlytics/filters.js +10 -12
  80. package/lib/crashlytics/issues.js +2 -3
  81. package/lib/crashlytics/notes.js +3 -4
  82. package/lib/crashlytics/reports.js +21 -15
  83. package/lib/crashlytics/types.js +7 -7
  84. package/lib/crashlytics/utils.js +4 -4
  85. package/lib/database/api.js +2 -3
  86. package/lib/database/import.js +4 -4
  87. package/lib/database/metadata.js +5 -6
  88. package/lib/database/rulesConfig.js +2 -3
  89. package/lib/dataconnect/build.js +10 -13
  90. package/lib/dataconnect/checkIam.js +1 -2
  91. package/lib/dataconnect/client.js +15 -18
  92. package/lib/dataconnect/dataplaneClient.js +6 -6
  93. package/lib/dataconnect/ensureApis.js +2 -3
  94. package/lib/dataconnect/errors.js +8 -11
  95. package/lib/dataconnect/filters.js +2 -3
  96. package/lib/dataconnect/freeTrial.js +3 -4
  97. package/lib/dataconnect/graphqlError.js +5 -8
  98. package/lib/dataconnect/load.js +10 -11
  99. package/lib/dataconnect/names.js +14 -18
  100. package/lib/dataconnect/prompts.js +1 -2
  101. package/lib/dataconnect/provisionCloudSql.js +13 -17
  102. package/lib/dataconnect/schemaMigration.js +60 -27
  103. package/lib/dataconnect/types.js +10 -12
  104. package/lib/dataconnect/webhook.js +3 -3
  105. package/lib/defaultCredentials.js +3 -4
  106. package/lib/deploy/apphosting/deploy.js +2 -3
  107. package/lib/deploy/apphosting/prepare.js +3 -5
  108. package/lib/deploy/apphosting/release.js +1 -1
  109. package/lib/deploy/apphosting/util.js +1 -2
  110. package/lib/deploy/database/deploy.js +1 -2
  111. package/lib/deploy/database/prepare.js +1 -2
  112. package/lib/deploy/database/release.js +1 -2
  113. package/lib/deploy/dataconnect/context.js +15 -4
  114. package/lib/deploy/dataconnect/deploy.js +5 -6
  115. package/lib/deploy/dataconnect/prepare.js +7 -9
  116. package/lib/deploy/dataconnect/release.js +7 -10
  117. package/lib/deploy/extensions/deploy.js +7 -9
  118. package/lib/deploy/extensions/deploymentSummary.js +6 -7
  119. package/lib/deploy/extensions/planner.js +15 -18
  120. package/lib/deploy/extensions/prepare.js +9 -11
  121. package/lib/deploy/extensions/release.js +10 -12
  122. package/lib/deploy/extensions/secrets.js +8 -11
  123. package/lib/deploy/extensions/tasks.js +6 -8
  124. package/lib/deploy/extensions/v2FunctionHelper.js +2 -3
  125. package/lib/deploy/extensions/validate.js +1 -2
  126. package/lib/deploy/firestore/deploy.js +3 -5
  127. package/lib/deploy/firestore/prepare.js +2 -3
  128. package/lib/deploy/firestore/release.js +3 -4
  129. package/lib/deploy/functions/backend.js +52 -42
  130. package/lib/deploy/functions/build.js +41 -15
  131. package/lib/deploy/functions/cache/applyHash.js +3 -5
  132. package/lib/deploy/functions/cache/hash.js +4 -5
  133. package/lib/deploy/functions/cel.js +3 -3
  134. package/lib/deploy/functions/checkIam.js +8 -8
  135. package/lib/deploy/functions/containerCleaner.js +10 -6
  136. package/lib/deploy/functions/deploy.js +6 -8
  137. package/lib/deploy/functions/ensure.js +6 -9
  138. package/lib/deploy/functions/functionsDeployHelper.js +10 -11
  139. package/lib/deploy/functions/params.js +10 -10
  140. package/lib/deploy/functions/prepare.js +41 -36
  141. package/lib/deploy/functions/prepareFunctionsUpload.js +24 -10
  142. package/lib/deploy/functions/pricing.js +3 -3
  143. package/lib/deploy/functions/prompts.js +7 -10
  144. package/lib/deploy/functions/release/executor.js +5 -6
  145. package/lib/deploy/functions/release/fabricator.js +76 -29
  146. package/lib/deploy/functions/release/index.js +23 -14
  147. package/lib/deploy/functions/release/planner.js +15 -14
  148. package/lib/deploy/functions/release/reporter.js +20 -20
  149. package/lib/deploy/functions/release/sourceTokenScraper.js +4 -5
  150. package/lib/deploy/functions/remoteSource.js +3 -4
  151. package/lib/deploy/functions/runtimes/discovery/index.js +9 -12
  152. package/lib/deploy/functions/runtimes/discovery/parsing.js +2 -3
  153. package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +29 -10
  154. package/lib/deploy/functions/runtimes/index.js +1 -2
  155. package/lib/deploy/functions/runtimes/node/index.js +18 -9
  156. package/lib/deploy/functions/runtimes/node/parseRuntimeAndValidateSDK.js +2 -2
  157. package/lib/deploy/functions/runtimes/node/validate.js +1 -2
  158. package/lib/deploy/functions/runtimes/node/versioning.js +6 -7
  159. package/lib/deploy/functions/runtimes/python/index.js +12 -12
  160. package/lib/deploy/functions/runtimes/supported/index.js +5 -6
  161. package/lib/deploy/functions/services/auth.js +49 -36
  162. package/lib/deploy/functions/services/database.js +1 -2
  163. package/lib/deploy/functions/services/dataconnect.js +16 -2
  164. package/lib/deploy/functions/services/firebaseAlerts.js +1 -2
  165. package/lib/deploy/functions/services/firestore.js +3 -5
  166. package/lib/deploy/functions/services/index.js +2 -2
  167. package/lib/deploy/functions/services/remoteConfig.js +1 -2
  168. package/lib/deploy/functions/services/storage.js +3 -5
  169. package/lib/deploy/functions/services/testLab.js +1 -2
  170. package/lib/deploy/functions/triggerRegionHelper.js +1 -2
  171. package/lib/deploy/functions/validate.js +12 -11
  172. package/lib/deploy/hosting/convertConfig.js +38 -22
  173. package/lib/deploy/hosting/deploy.js +4 -7
  174. package/lib/deploy/hosting/hashcache.js +2 -3
  175. package/lib/deploy/hosting/prepare.js +14 -14
  176. package/lib/deploy/hosting/release.js +1 -2
  177. package/lib/deploy/index.js +7 -8
  178. package/lib/deploy/lifecycleHooks.js +3 -5
  179. package/lib/deploy/remoteconfig/deploy.js +1 -1
  180. package/lib/deploy/remoteconfig/functions.js +5 -6
  181. package/lib/deploy/remoteconfig/prepare.js +2 -3
  182. package/lib/deploy/remoteconfig/release.js +2 -2
  183. package/lib/deploy/storage/deploy.js +1 -1
  184. package/lib/deploy/storage/prepare.js +1 -1
  185. package/lib/deploy/storage/release.js +1 -1
  186. package/lib/deploymentTool.js +5 -6
  187. package/lib/detectProjectRoot.js +1 -2
  188. package/lib/downloadUtils.js +2 -3
  189. package/lib/emulator/adminSdkConfig.js +2 -3
  190. package/lib/emulator/apphosting/config.js +1 -2
  191. package/lib/emulator/apphosting/developmentServer.js +3 -3
  192. package/lib/emulator/apphosting/serve.js +20 -14
  193. package/lib/emulator/auth/cloudFunctions.js +2 -3
  194. package/lib/emulator/auth/errors.js +2 -2
  195. package/lib/emulator/auth/handlers.js +3 -4
  196. package/lib/emulator/auth/index.js +6 -6
  197. package/lib/emulator/auth/operations.js +171 -129
  198. package/lib/emulator/auth/server.js +30 -22
  199. package/lib/emulator/auth/state.js +26 -36
  200. package/lib/emulator/auth/utils.js +12 -13
  201. package/lib/emulator/commandUtils.js +20 -20
  202. package/lib/emulator/controller.js +32 -29
  203. package/lib/emulator/databaseEmulator.js +1 -2
  204. package/lib/emulator/dataconnect/pgliteServer.js +48 -104
  205. package/lib/emulator/dataconnectEmulator.js +6 -9
  206. package/lib/emulator/download.js +2 -3
  207. package/lib/emulator/downloadableEmulatorInfo.json +31 -31
  208. package/lib/emulator/downloadableEmulators.js +49 -24
  209. package/lib/emulator/emulatorLogger.js +19 -4
  210. package/lib/emulator/env.js +6 -8
  211. package/lib/emulator/eventarcEmulator.js +2 -3
  212. package/lib/emulator/eventarcEmulatorUtils.js +3 -6
  213. package/lib/emulator/extensions/postinstall.js +1 -2
  214. package/lib/emulator/extensions/validation.js +4 -7
  215. package/lib/emulator/extensionsEmulator.js +6 -9
  216. package/lib/emulator/functionsEmulator.js +89 -46
  217. package/lib/emulator/functionsEmulatorRuntime.js +1 -1
  218. package/lib/emulator/functionsEmulatorShared.js +30 -30
  219. package/lib/emulator/functionsEmulatorShell.js +4 -6
  220. package/lib/emulator/functionsEmulatorUtils.js +8 -9
  221. package/lib/emulator/functionsRuntimeWorker.js +18 -9
  222. package/lib/emulator/hub.js +41 -34
  223. package/lib/emulator/hubClient.js +1 -1
  224. package/lib/emulator/initEmulators.js +2 -3
  225. package/lib/emulator/loggingEmulator.js +2 -2
  226. package/lib/emulator/portUtils.js +4 -5
  227. package/lib/emulator/registry.js +10 -4
  228. package/lib/emulator/shared/request.js +1 -2
  229. package/lib/emulator/storage/apis/firebase.js +16 -20
  230. package/lib/emulator/storage/apis/gcloud.js +6 -9
  231. package/lib/emulator/storage/apis/shared.js +1 -2
  232. package/lib/emulator/storage/crc.js +2 -3
  233. package/lib/emulator/storage/files.js +18 -41
  234. package/lib/emulator/storage/metadata.js +10 -4
  235. package/lib/emulator/storage/multipart.js +1 -2
  236. package/lib/emulator/storage/rfc.js +1 -2
  237. package/lib/emulator/storage/rules/config.js +1 -2
  238. package/lib/emulator/storage/rules/manager.js +3 -5
  239. package/lib/emulator/storage/rules/runtime.js +15 -13
  240. package/lib/emulator/storage/rules/types.js +2 -2
  241. package/lib/emulator/storage/rules/utils.js +5 -6
  242. package/lib/emulator/storage/server.js +1 -2
  243. package/lib/emulator/storage/upload.js +3 -4
  244. package/lib/emulator/taskQueue.js +11 -4
  245. package/lib/emulator/tasksEmulator.js +11 -12
  246. package/lib/emulator/types.js +6 -6
  247. package/lib/emulator/ui.js +6 -1
  248. package/lib/ensureApiEnabled.js +7 -9
  249. package/lib/env.js +2 -3
  250. package/lib/error.js +11 -13
  251. package/lib/errorOut.js +1 -2
  252. package/lib/experiments.js +15 -18
  253. package/lib/extensions/askUserForEventsConfig.js +12 -13
  254. package/lib/extensions/askUserForParam.js +11 -12
  255. package/lib/extensions/change-log.js +4 -5
  256. package/lib/extensions/checkProjectBilling.js +1 -2
  257. package/lib/extensions/diagnose.js +1 -2
  258. package/lib/extensions/displayExtensionInfo.js +25 -32
  259. package/lib/extensions/emulator/optionsHelper.js +6 -8
  260. package/lib/extensions/emulator/specHelper.js +15 -16
  261. package/lib/extensions/emulator/triggerHelper.js +3 -5
  262. package/lib/extensions/etags.js +2 -3
  263. package/lib/extensions/export.js +7 -9
  264. package/lib/extensions/extensionsApi.js +23 -29
  265. package/lib/extensions/extensionsHelper.js +52 -80
  266. package/lib/extensions/listExtensions.js +3 -5
  267. package/lib/extensions/localHelper.js +5 -5
  268. package/lib/extensions/manifest.js +15 -16
  269. package/lib/extensions/metricsUtils.js +3 -4
  270. package/lib/extensions/paramHelper.js +21 -18
  271. package/lib/extensions/provisioningHelper.js +17 -21
  272. package/lib/extensions/publishHelpers.js +1 -2
  273. package/lib/extensions/publisherApi.js +11 -13
  274. package/lib/extensions/refs.js +6 -7
  275. package/lib/extensions/runtimes/common.js +18 -19
  276. package/lib/extensions/runtimes/node.js +5 -6
  277. package/lib/extensions/secretsUtils.js +8 -8
  278. package/lib/extensions/tos.js +7 -8
  279. package/lib/extensions/types.js +3 -3
  280. package/lib/extensions/updateHelper.js +6 -7
  281. package/lib/extensions/utils.js +6 -8
  282. package/lib/extensions/versionHelper.js +1 -2
  283. package/lib/extensions/warnings.js +6 -8
  284. package/lib/fetchMOTD.js +1 -2
  285. package/lib/fetchWebSetup.js +3 -4
  286. package/lib/filterTargets.js +1 -2
  287. package/lib/firebaseConfigValidate.js +2 -3
  288. package/lib/firestore/api-sort.js +8 -9
  289. package/lib/firestore/api-types.js +15 -15
  290. package/lib/firestore/api.js +15 -13
  291. package/lib/firestore/backupUtils.js +3 -3
  292. package/lib/firestore/checkDatabaseType.js +1 -2
  293. package/lib/firestore/delete.js +1 -2
  294. package/lib/firestore/encodeFirestoreValue.js +1 -2
  295. package/lib/firestore/fsConfig.js +1 -2
  296. package/lib/firestore/options.js +1 -1
  297. package/lib/firestore/util.js +5 -6
  298. package/lib/firestore/validator.js +4 -5
  299. package/lib/frameworks/angular/index.js +14 -15
  300. package/lib/frameworks/angular/utils.js +21 -23
  301. package/lib/frameworks/astro/index.js +7 -7
  302. package/lib/frameworks/astro/utils.js +4 -6
  303. package/lib/frameworks/compose/discover/filesystem.js +3 -3
  304. package/lib/frameworks/compose/discover/frameworkMatcher.js +4 -5
  305. package/lib/frameworks/compose/discover/index.js +1 -2
  306. package/lib/frameworks/compose/discover/runtime/node.js +8 -11
  307. package/lib/frameworks/compose/driver/docker.js +3 -5
  308. package/lib/frameworks/compose/driver/hooks.js +2 -2
  309. package/lib/frameworks/compose/driver/index.js +2 -2
  310. package/lib/frameworks/compose/driver/local.js +2 -3
  311. package/lib/frameworks/compose/index.js +5 -7
  312. package/lib/frameworks/constants.js +3 -3
  313. package/lib/frameworks/express/index.js +7 -8
  314. package/lib/frameworks/flutter/index.js +6 -7
  315. package/lib/frameworks/flutter/utils.js +4 -5
  316. package/lib/frameworks/index.js +21 -22
  317. package/lib/frameworks/next/constants.js +5 -2
  318. package/lib/frameworks/next/index.js +34 -32
  319. package/lib/frameworks/next/utils.js +40 -39
  320. package/lib/frameworks/nuxt/index.js +9 -9
  321. package/lib/frameworks/nuxt/utils.js +4 -6
  322. package/lib/frameworks/nuxt2/index.js +7 -7
  323. package/lib/frameworks/sveltekit/index.js +6 -8
  324. package/lib/frameworks/utils.js +26 -24
  325. package/lib/frameworks/vite/index.js +8 -9
  326. package/lib/fsAsync.js +1 -2
  327. package/lib/fsutils.js +5 -6
  328. package/lib/functional.js +11 -11
  329. package/lib/functions/artifacts.js +25 -22
  330. package/lib/functions/ensureTargeted.js +1 -2
  331. package/lib/functions/env.js +13 -14
  332. package/lib/functions/functionslog.js +2 -3
  333. package/lib/functions/projectConfig.js +29 -33
  334. package/lib/functions/python.js +10 -4
  335. package/lib/functions/secrets.js +32 -18
  336. package/lib/functionsConfig.js +14 -14
  337. package/lib/functionsConfigClone.js +1 -2
  338. package/lib/functionsShellCommandAction.js +2 -3
  339. package/lib/gcp/apphosting.js +43 -28
  340. package/lib/gcp/apptesting.js +2 -2
  341. package/lib/gcp/artifactregistry.js +5 -5
  342. package/lib/gcp/auth.js +11 -13
  343. package/lib/gcp/cloudbilling.js +4 -5
  344. package/lib/gcp/cloudbuild.js +10 -11
  345. package/lib/gcp/cloudfunctions.js +61 -45
  346. package/lib/gcp/cloudfunctionsv2.js +81 -43
  347. package/lib/gcp/cloudlogging.js +2 -4
  348. package/lib/gcp/cloudmonitoring.js +7 -7
  349. package/lib/gcp/cloudscheduler.js +12 -14
  350. package/lib/gcp/cloudsql/cloudsqladmin.js +19 -21
  351. package/lib/gcp/cloudsql/connect.js +14 -9
  352. package/lib/gcp/cloudsql/fbToolsAuthClient.js +5 -3
  353. package/lib/gcp/cloudsql/interactive.js +2 -3
  354. package/lib/gcp/cloudsql/permissions.js +8 -8
  355. package/lib/gcp/cloudsql/permissionsSetup.js +9 -9
  356. package/lib/gcp/cloudtasks.js +19 -18
  357. package/lib/gcp/computeEngine.js +1 -2
  358. package/lib/gcp/devConnect.js +32 -29
  359. package/lib/gcp/docker.js +2 -4
  360. package/lib/gcp/eventarc.js +5 -5
  361. package/lib/gcp/firedata.js +4 -4
  362. package/lib/gcp/firestore.js +16 -16
  363. package/lib/gcp/iam.js +11 -12
  364. package/lib/gcp/identityPlatform.js +4 -5
  365. package/lib/gcp/k8s.js +1 -2
  366. package/lib/gcp/location.js +2 -2
  367. package/lib/gcp/proto.js +10 -11
  368. package/lib/gcp/pubsub.js +4 -5
  369. package/lib/gcp/resourceManager.js +5 -5
  370. package/lib/gcp/rules.js +13 -14
  371. package/lib/gcp/run.js +24 -31
  372. package/lib/gcp/runv2.js +39 -27
  373. package/lib/gcp/secretManager.js +60 -39
  374. package/lib/gcp/serviceusage.js +8 -4
  375. package/lib/gcp/storage.js +22 -20
  376. package/lib/gemini/fdcExperience.js +5 -5
  377. package/lib/getDefaultDatabaseInstance.js +2 -4
  378. package/lib/getDefaultHostingSite.js +3 -4
  379. package/lib/getProjectNumber.js +1 -2
  380. package/lib/hosting/api.js +32 -36
  381. package/lib/hosting/cloudRunProxy.js +2 -3
  382. package/lib/hosting/config.js +17 -17
  383. package/lib/hosting/expireUtils.js +3 -3
  384. package/lib/hosting/functionsProxy.js +1 -2
  385. package/lib/hosting/implicitInit.js +1 -2
  386. package/lib/hosting/initMiddleware.js +1 -2
  387. package/lib/hosting/interactive.js +1 -2
  388. package/lib/hosting/proxy.js +3 -5
  389. package/lib/hosting/runTags.js +8 -11
  390. package/lib/init/features/account.js +1 -2
  391. package/lib/init/features/ailogic/index.js +3 -5
  392. package/lib/init/features/ailogic/utils.js +6 -8
  393. package/lib/init/features/aitools/claude.js +1 -2
  394. package/lib/init/features/aitools/cursor.js +1 -2
  395. package/lib/init/features/aitools/gemini.js +1 -1
  396. package/lib/init/features/aitools/promptUpdater.js +10 -12
  397. package/lib/init/features/aitools.js +1 -2
  398. package/lib/init/features/apphosting.js +3 -4
  399. package/lib/init/features/apptesting/index.js +9 -9
  400. package/lib/init/features/database.js +4 -5
  401. package/lib/init/features/dataconnect/create_app.js +3 -4
  402. package/lib/init/features/dataconnect/index.js +25 -22
  403. package/lib/init/features/dataconnect/resolver.js +6 -10
  404. package/lib/init/features/dataconnect/sdk.js +31 -24
  405. package/lib/init/features/emulators.js +7 -6
  406. package/lib/init/features/extensions/index.js +3 -5
  407. package/lib/init/features/firestore/index.js +7 -9
  408. package/lib/init/features/firestore/indexes.js +2 -2
  409. package/lib/init/features/firestore/rules.js +3 -3
  410. package/lib/init/features/functions/index.js +3 -5
  411. package/lib/init/features/functions/javascript.js +1 -2
  412. package/lib/init/features/functions/npm-dependencies.js +1 -2
  413. package/lib/init/features/functions/python.js +1 -2
  414. package/lib/init/features/functions/typescript.js +1 -2
  415. package/lib/init/features/genkit/index.js +44 -18
  416. package/lib/init/features/hosting/github.js +6 -8
  417. package/lib/init/features/hosting/index.js +10 -13
  418. package/lib/init/features/project.js +4 -7
  419. package/lib/init/features/remoteconfig.js +1 -2
  420. package/lib/init/features/storage.js +3 -5
  421. package/lib/init/index.js +4 -7
  422. package/lib/init/spawn.js +7 -9
  423. package/lib/listFiles.js +1 -2
  424. package/lib/loadCJSON.js +1 -2
  425. package/lib/localFunction.js +14 -15
  426. package/lib/logError.js +1 -2
  427. package/lib/logger.js +7 -7
  428. package/lib/management/apps.js +22 -22
  429. package/lib/management/database.js +11 -12
  430. package/lib/management/projects.js +57 -56
  431. package/lib/management/provisioning/errorHandler.js +3 -5
  432. package/lib/management/provisioning/provision.js +15 -9
  433. package/lib/management/studio.js +2 -3
  434. package/lib/mcp/errors.js +4 -4
  435. package/lib/mcp/index.js +47 -45
  436. package/lib/mcp/prompt.js +1 -2
  437. package/lib/mcp/prompts/core/consult.js +2 -3
  438. package/lib/mcp/prompts/crashlytics/connect.js +15 -122
  439. package/lib/mcp/prompts/dataconnect/schema.js +3 -3
  440. package/lib/mcp/prompts/index.js +8 -10
  441. package/lib/mcp/resource.js +3 -15
  442. package/lib/mcp/resources/guides/app_id.js +39 -0
  443. package/lib/mcp/resources/guides/crashlytics_connect.js +51 -0
  444. package/lib/mcp/resources/guides/crashlytics_investigations.js +51 -0
  445. package/lib/mcp/resources/guides/crashlytics_issues.js +42 -0
  446. package/lib/mcp/resources/guides/crashlytics_reports.js +112 -0
  447. package/lib/mcp/resources/index.js +11 -3
  448. package/lib/mcp/tool.js +3 -15
  449. package/lib/mcp/tools/apphosting/fetch_logs.js +3 -4
  450. package/lib/mcp/tools/apphosting/list_backends.js +1 -1
  451. package/lib/mcp/tools/auth/get_users.js +5 -16
  452. package/lib/mcp/tools/core/create_android_sha.js +4 -1
  453. package/lib/mcp/tools/core/get_environment.js +7 -4
  454. package/lib/mcp/tools/core/get_sdk_config.js +4 -5
  455. package/lib/mcp/tools/core/get_security_rules.js +1 -2
  456. package/lib/mcp/tools/core/init.js +2 -2
  457. package/lib/mcp/tools/core/logout.js +1 -1
  458. package/lib/mcp/tools/core/read_resources.js +2 -2
  459. package/lib/mcp/tools/core/validate_security_rules.js +1 -2
  460. package/lib/mcp/tools/crashlytics/events.js +43 -19
  461. package/lib/mcp/tools/crashlytics/index.js +1 -6
  462. package/lib/mcp/tools/crashlytics/issues.js +33 -12
  463. package/lib/mcp/tools/crashlytics/reports.js +66 -117
  464. package/lib/mcp/tools/dataconnect/list_services.js +2 -3
  465. package/lib/mcp/tools/firestore/converter.js +3 -5
  466. package/lib/mcp/tools/firestore/delete_document.js +1 -1
  467. package/lib/mcp/tools/functions/get_logs.js +14 -12
  468. package/lib/mcp/tools/functions/list_functions.js +1 -1
  469. package/lib/mcp/tools/index.js +67 -50
  470. package/lib/mcp/util/apptesting/availability.js +1 -2
  471. package/lib/mcp/util/availability.js +1 -2
  472. package/lib/mcp/util/crashlytics/availability.js +1 -2
  473. package/lib/mcp/util/dataconnect/compile.js +7 -6
  474. package/lib/mcp/util/dataconnect/converter.js +7 -10
  475. package/lib/mcp/util/dataconnect/emulator.js +1 -2
  476. package/lib/mcp/util.js +9 -11
  477. package/lib/messaging/sendMessage.js +1 -2
  478. package/lib/metaprogramming.js +1 -2
  479. package/lib/operation-poller.js +2 -2
  480. package/lib/profileReport.js +6 -6
  481. package/lib/profiler.js +1 -2
  482. package/lib/projectPath.js +1 -2
  483. package/lib/projectUtils.js +5 -6
  484. package/lib/prompt.js +22 -13
  485. package/lib/rc.js +5 -7
  486. package/lib/remoteconfig/deleteExperiment.js +1 -2
  487. package/lib/remoteconfig/deleteRollout.js +1 -2
  488. package/lib/remoteconfig/get.js +2 -3
  489. package/lib/remoteconfig/getExperiment.js +2 -2
  490. package/lib/remoteconfig/getRollout.js +2 -2
  491. package/lib/remoteconfig/interfaces.js +1 -1
  492. package/lib/remoteconfig/listExperiments.js +2 -2
  493. package/lib/remoteconfig/listRollouts.js +2 -2
  494. package/lib/remoteconfig/publish.js +1 -2
  495. package/lib/remoteconfig/rollback.js +1 -2
  496. package/lib/remoteconfig/versionslist.js +1 -2
  497. package/lib/requireAuth.js +4 -6
  498. package/lib/requireConfig.js +5 -8
  499. package/lib/requireDatabaseInstance.js +2 -2
  500. package/lib/requireHostingSite.js +1 -2
  501. package/lib/requireInteractive.js +1 -1
  502. package/lib/requirePermissions.js +1 -2
  503. package/lib/requireTosAcceptance.js +1 -2
  504. package/lib/responseToError.js +1 -2
  505. package/lib/rtdb.js +2 -3
  506. package/lib/rulesDeploy.js +3 -4
  507. package/lib/serve/functions.js +9 -1
  508. package/lib/serve/hosting.js +4 -5
  509. package/lib/serve/index.js +1 -2
  510. package/lib/shortenUrl.js +1 -2
  511. package/lib/templates.js +3 -4
  512. package/lib/throttler/throttler.js +3 -3
  513. package/lib/timeout.js +2 -3
  514. package/lib/track.js +23 -14
  515. package/lib/tsconfig.publish.tsbuildinfo +1 -0
  516. package/lib/unzip.js +2 -3
  517. package/lib/utils.js +62 -63
  518. package/lib/vsCodeUtils.js +2 -3
  519. package/package.json +6 -6
  520. package/templates/extensions/typescript/index.ts +1 -1
  521. package/templates/extensions/typescript/package.lint.json +1 -1
  522. package/templates/extensions/typescript/package.nolint.json +1 -1
  523. package/templates/extensions/typescript/tsconfig.json +2 -1
@@ -1,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;
@@ -1,6 +1,34 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.compareFunctions = exports.missingEndpoint = exports.hasEndpoint = exports.regionalEndpoints = exports.matchingBackend = exports.findEndpoint = exports.someEndpoint = exports.allEndpoints = exports.checkAvailability = exports.existingBackend = exports.scheduleIdForFunction = exports.functionName = exports.isEmptyBackend = exports.merge = exports.of = exports.empty = exports.isBlockingTriggered = exports.isTaskQueueTriggered = exports.isScheduleTriggered = exports.isEventTriggered = exports.isCallableTriggered = exports.isHttpsTriggered = exports.AllFunctionsPlatforms = exports.secretVersionName = exports.SCHEDULED_FUNCTION_LABEL = exports.MIN_CPU_FOR_CONCURRENCY = exports.DEFAULT_MEMORY = exports.DEFAULT_CONCURRENCY = exports.memoryToGen2Cpu = exports.memoryToGen1Cpu = exports.memoryOptionDisplayName = exports.isValidEgressSetting = exports.isValidMemoryOption = exports.AllIngressSettings = exports.AllVpcEgressSettings = exports.endpointTriggerType = void 0;
3
+ exports.missingEndpoint = exports.hasEndpoint = exports.AllFunctionsPlatforms = exports.SCHEDULED_FUNCTION_LABEL = exports.MIN_CPU_FOR_CONCURRENCY = exports.DEFAULT_MEMORY = exports.DEFAULT_CONCURRENCY = exports.AllIngressSettings = exports.AllVpcEgressSettings = void 0;
4
+ exports.endpointTriggerType = endpointTriggerType;
5
+ exports.isValidMemoryOption = isValidMemoryOption;
6
+ exports.isValidEgressSetting = isValidEgressSetting;
7
+ exports.memoryOptionDisplayName = memoryOptionDisplayName;
8
+ exports.memoryToGen1Cpu = memoryToGen1Cpu;
9
+ exports.memoryToGen2Cpu = memoryToGen2Cpu;
10
+ exports.secretVersionName = secretVersionName;
11
+ exports.isHttpsTriggered = isHttpsTriggered;
12
+ exports.isDataConnectGraphqlTriggered = isDataConnectGraphqlTriggered;
13
+ exports.isCallableTriggered = isCallableTriggered;
14
+ exports.isEventTriggered = isEventTriggered;
15
+ exports.isScheduleTriggered = isScheduleTriggered;
16
+ exports.isTaskQueueTriggered = isTaskQueueTriggered;
17
+ exports.isBlockingTriggered = isBlockingTriggered;
18
+ exports.empty = empty;
19
+ exports.of = of;
20
+ exports.merge = merge;
21
+ exports.isEmptyBackend = isEmptyBackend;
22
+ exports.functionName = functionName;
23
+ exports.scheduleIdForFunction = scheduleIdForFunction;
24
+ exports.existingBackend = existingBackend;
25
+ exports.checkAvailability = checkAvailability;
26
+ exports.allEndpoints = allEndpoints;
27
+ exports.someEndpoint = someEndpoint;
28
+ exports.findEndpoint = findEndpoint;
29
+ exports.matchingBackend = matchingBackend;
30
+ exports.regionalEndpoints = regionalEndpoints;
31
+ exports.compareFunctions = compareFunctions;
4
32
  const gcf = require("../../gcp/cloudfunctions");
5
33
  const gcfV2 = require("../../gcp/cloudfunctionsv2");
6
34
  const run = require("../../gcp/runv2");
@@ -16,6 +44,9 @@ function endpointTriggerType(endpoint) {
16
44
  else if (isHttpsTriggered(endpoint)) {
17
45
  return "https";
18
46
  }
47
+ else if (isDataConnectGraphqlTriggered(endpoint)) {
48
+ return "dataConnectGraphql";
49
+ }
19
50
  else if (isCallableTriggered(endpoint)) {
20
51
  return "callable";
21
52
  }
@@ -30,7 +61,6 @@ function endpointTriggerType(endpoint) {
30
61
  }
31
62
  (0, functional_1.assertExhaustive)(endpoint);
32
63
  }
33
- exports.endpointTriggerType = endpointTriggerType;
34
64
  exports.AllVpcEgressSettings = ["PRIVATE_RANGES_ONLY", "ALL_TRAFFIC"];
35
65
  exports.AllIngressSettings = [
36
66
  "ALLOW_ALL",
@@ -41,11 +71,9 @@ const allMemoryOptions = [128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768];
41
71
  function isValidMemoryOption(mem) {
42
72
  return allMemoryOptions.includes(mem);
43
73
  }
44
- exports.isValidMemoryOption = isValidMemoryOption;
45
74
  function isValidEgressSetting(egress) {
46
75
  return egress === "PRIVATE_RANGES_ONLY" || egress === "ALL_TRAFFIC";
47
76
  }
48
- exports.isValidEgressSetting = isValidEgressSetting;
49
77
  function memoryOptionDisplayName(option) {
50
78
  return {
51
79
  128: "128MB",
@@ -59,7 +87,6 @@ function memoryOptionDisplayName(option) {
59
87
  32768: "32GB",
60
88
  }[option];
61
89
  }
62
- exports.memoryOptionDisplayName = memoryOptionDisplayName;
63
90
  function memoryToGen1Cpu(memory) {
64
91
  return {
65
92
  128: 0.0833,
@@ -73,7 +100,6 @@ function memoryToGen1Cpu(memory) {
73
100
  32768: 8,
74
101
  }[memory];
75
102
  }
76
- exports.memoryToGen1Cpu = memoryToGen1Cpu;
77
103
  function memoryToGen2Cpu(memory) {
78
104
  return {
79
105
  128: 1,
@@ -87,41 +113,35 @@ function memoryToGen2Cpu(memory) {
87
113
  32768: 8,
88
114
  }[memory];
89
115
  }
90
- exports.memoryToGen2Cpu = memoryToGen2Cpu;
91
116
  exports.DEFAULT_CONCURRENCY = 80;
92
117
  exports.DEFAULT_MEMORY = 256;
93
118
  exports.MIN_CPU_FOR_CONCURRENCY = 1;
94
119
  exports.SCHEDULED_FUNCTION_LABEL = Object.freeze({ deployment: "firebase-schedule" });
95
120
  function secretVersionName(s) {
96
- var _a;
97
- return `projects/${s.projectId}/secrets/${s.secret}/versions/${(_a = s.version) !== null && _a !== void 0 ? _a : "latest"}`;
121
+ return `projects/${s.projectId}/secrets/${s.secret}/versions/${s.version ?? "latest"}`;
98
122
  }
99
- exports.secretVersionName = secretVersionName;
100
123
  exports.AllFunctionsPlatforms = ["gcfv1", "gcfv2", "run"];
101
124
  function isHttpsTriggered(triggered) {
102
125
  return {}.hasOwnProperty.call(triggered, "httpsTrigger");
103
126
  }
104
- exports.isHttpsTriggered = isHttpsTriggered;
127
+ function isDataConnectGraphqlTriggered(triggered) {
128
+ return {}.hasOwnProperty.call(triggered, "dataConnectGraphqlTrigger");
129
+ }
105
130
  function isCallableTriggered(triggered) {
106
131
  return {}.hasOwnProperty.call(triggered, "callableTrigger");
107
132
  }
108
- exports.isCallableTriggered = isCallableTriggered;
109
133
  function isEventTriggered(triggered) {
110
134
  return {}.hasOwnProperty.call(triggered, "eventTrigger");
111
135
  }
112
- exports.isEventTriggered = isEventTriggered;
113
136
  function isScheduleTriggered(triggered) {
114
137
  return {}.hasOwnProperty.call(triggered, "scheduleTrigger");
115
138
  }
116
- exports.isScheduleTriggered = isScheduleTriggered;
117
139
  function isTaskQueueTriggered(triggered) {
118
140
  return {}.hasOwnProperty.call(triggered, "taskQueueTrigger");
119
141
  }
120
- exports.isTaskQueueTriggered = isTaskQueueTriggered;
121
142
  function isBlockingTriggered(triggered) {
122
143
  return {}.hasOwnProperty.call(triggered, "blockingTrigger");
123
144
  }
124
- exports.isBlockingTriggered = isBlockingTriggered;
125
145
  function empty() {
126
146
  return {
127
147
  requiredAPIs: [],
@@ -129,9 +149,8 @@ function empty() {
129
149
  environmentVariables: {},
130
150
  };
131
151
  }
132
- exports.empty = empty;
133
152
  function of(...endpoints) {
134
- const bkend = Object.assign({}, empty());
153
+ const bkend = { ...empty() };
135
154
  for (const endpoint of endpoints) {
136
155
  bkend.endpoints[endpoint.region] = bkend.endpoints[endpoint.region] || {};
137
156
  if (bkend.endpoints[endpoint.region][endpoint.id]) {
@@ -141,7 +160,6 @@ function of(...endpoints) {
141
160
  }
142
161
  return bkend;
143
162
  }
144
- exports.of = of;
145
163
  function merge(...backends) {
146
164
  const merged = of(...(0, functional_1.flattenArray)(backends.map((b) => allEndpoints(b))));
147
165
  const apiToReasons = {};
@@ -153,35 +171,32 @@ function merge(...backends) {
153
171
  }
154
172
  apiToReasons[api] = reasons;
155
173
  }
156
- merged.environmentVariables = Object.assign(Object.assign({}, merged.environmentVariables), b.environmentVariables);
174
+ merged.environmentVariables = { ...merged.environmentVariables, ...b.environmentVariables };
157
175
  }
158
176
  for (const [api, reasons] of Object.entries(apiToReasons)) {
159
177
  merged.requiredAPIs.push({ api, reason: Array.from(reasons).join(" ") });
160
178
  }
161
179
  return merged;
162
180
  }
163
- exports.merge = merge;
164
181
  function isEmptyBackend(backend) {
165
182
  return (Object.keys(backend.requiredAPIs).length === 0 && Object.keys(backend.endpoints).length === 0);
166
183
  }
167
- exports.isEmptyBackend = isEmptyBackend;
168
184
  function functionName(cloudFunction) {
169
185
  return `projects/${cloudFunction.project}/locations/${cloudFunction.region}/functions/${cloudFunction.id}`;
170
186
  }
171
- exports.functionName = functionName;
172
187
  function scheduleIdForFunction(cloudFunction) {
173
188
  return `firebase-schedule-${cloudFunction.id}-${cloudFunction.region}`;
174
189
  }
175
- exports.scheduleIdForFunction = scheduleIdForFunction;
176
190
  function existingBackend(context, forceRefresh) {
177
191
  if (!context.existingBackendPromise || forceRefresh) {
178
192
  context.existingBackendPromise = loadExistingBackend(context);
179
193
  }
180
194
  return context.existingBackendPromise;
181
195
  }
182
- exports.existingBackend = existingBackend;
183
196
  async function loadExistingBackend(ctx) {
184
- const existingBackend = Object.assign({}, empty());
197
+ const existingBackend = {
198
+ ...empty(),
199
+ };
185
200
  const unreachableRegions = {
186
201
  gcfV1: [],
187
202
  gcfV2: [],
@@ -223,7 +238,6 @@ async function loadExistingBackend(ctx) {
223
238
  return ctx.existingBackend;
224
239
  }
225
240
  async function checkAvailability(context, want) {
226
- var _a, _b, _c, _d, _e;
227
241
  await existingBackend(context);
228
242
  const gcfV1Regions = new Set();
229
243
  const gcfV2Regions = new Set();
@@ -235,41 +249,39 @@ async function checkAvailability(context, want) {
235
249
  gcfV2Regions.add(ep.region);
236
250
  }
237
251
  }
238
- const neededUnreachableV1 = (_a = context.unreachableRegions) === null || _a === void 0 ? void 0 : _a.gcfV1.filter((region) => gcfV1Regions.has(region));
239
- const neededUnreachableV2 = (_b = context.unreachableRegions) === null || _b === void 0 ? void 0 : _b.gcfV2.filter((region) => gcfV2Regions.has(region));
240
- if (neededUnreachableV1 === null || neededUnreachableV1 === void 0 ? void 0 : neededUnreachableV1.length) {
252
+ const neededUnreachableV1 = context.unreachableRegions?.gcfV1.filter((region) => gcfV1Regions.has(region));
253
+ const neededUnreachableV2 = context.unreachableRegions?.gcfV2.filter((region) => gcfV2Regions.has(region));
254
+ if (neededUnreachableV1?.length) {
241
255
  throw new error_1.FirebaseError("The following Cloud Functions regions are currently unreachable:\n\t" +
242
256
  neededUnreachableV1.join("\n\t") +
243
257
  "\nThis deployment contains functions in those regions. Please try again in a few minutes, or exclude these regions from your deployment.");
244
258
  }
245
- if (neededUnreachableV2 === null || neededUnreachableV2 === void 0 ? void 0 : neededUnreachableV2.length) {
259
+ if (neededUnreachableV2?.length) {
246
260
  throw new error_1.FirebaseError("The following Cloud Functions V2 regions are currently unreachable:\n\t" +
247
261
  neededUnreachableV2.join("\n\t") +
248
262
  "\nThis deployment contains functions in those regions. Please try again in a few minutes, or exclude these regions from your deployment.");
249
263
  }
250
- if ((_c = context.unreachableRegions) === null || _c === void 0 ? void 0 : _c.gcfV1.length) {
264
+ if (context.unreachableRegions?.gcfV1.length) {
251
265
  utils.logLabeledWarning("functions", "The following Cloud Functions regions are currently unreachable:\n" +
252
266
  context.unreachableRegions.gcfV1.join("\n") +
253
267
  "\nCloud Functions in these regions won't be deleted.");
254
268
  }
255
- if ((_d = context.unreachableRegions) === null || _d === void 0 ? void 0 : _d.gcfV2.length) {
269
+ if (context.unreachableRegions?.gcfV2.length) {
256
270
  utils.logLabeledWarning("functions", "The following Cloud Functions V2 regions are currently unreachable:\n" +
257
271
  context.unreachableRegions.gcfV2.join("\n") +
258
272
  "\nCloud Functions in these regions won't be deleted.");
259
273
  }
260
- if ((_e = context.unreachableRegions) === null || _e === void 0 ? void 0 : _e.run.length) {
274
+ if (context.unreachableRegions?.run.length) {
261
275
  utils.logLabeledWarning("functions", "The following Cloud Run regions are currently unreachable:\n" +
262
276
  context.unreachableRegions.run.join("\n") +
263
277
  "\nCloud Run services in these regions won't be deleted.");
264
278
  }
265
279
  }
266
- exports.checkAvailability = checkAvailability;
267
280
  function allEndpoints(backend) {
268
281
  return Object.values(backend.endpoints).reduce((accum, perRegion) => {
269
282
  return [...accum, ...Object.values(perRegion)];
270
283
  }, []);
271
284
  }
272
- exports.allEndpoints = allEndpoints;
273
285
  function someEndpoint(backend, predicate) {
274
286
  for (const endpoints of Object.values(backend.endpoints)) {
275
287
  if (Object.values(endpoints).some(predicate)) {
@@ -278,7 +290,6 @@ function someEndpoint(backend, predicate) {
278
290
  }
279
291
  return false;
280
292
  }
281
- exports.someEndpoint = someEndpoint;
282
293
  function findEndpoint(backend, predicate) {
283
294
  for (const endpoints of Object.values(backend.endpoints)) {
284
295
  const endpoint = Object.values(endpoints).find(predicate);
@@ -286,9 +297,11 @@ function findEndpoint(backend, predicate) {
286
297
  return endpoint;
287
298
  }
288
299
  }
289
- exports.findEndpoint = findEndpoint;
290
300
  function matchingBackend(backend, predicate) {
291
- const filtered = Object.assign(Object.assign({}, backend), { endpoints: {} });
301
+ const filtered = {
302
+ ...backend,
303
+ endpoints: {},
304
+ };
292
305
  for (const endpoint of allEndpoints(backend)) {
293
306
  if (!predicate(endpoint)) {
294
307
  continue;
@@ -298,11 +311,9 @@ function matchingBackend(backend, predicate) {
298
311
  }
299
312
  return filtered;
300
313
  }
301
- exports.matchingBackend = matchingBackend;
302
314
  function regionalEndpoints(backend, region) {
303
315
  return backend.endpoints[region] ? Object.values(backend.endpoints[region]) : [];
304
316
  }
305
- exports.regionalEndpoints = regionalEndpoints;
306
317
  const hasEndpoint = (backend) => (endpoint) => {
307
318
  return (!!backend.endpoints[endpoint.region] && !!backend.endpoints[endpoint.region][endpoint.id]);
308
319
  };
@@ -329,4 +340,3 @@ function compareFunctions(left, right) {
329
340
  }
330
341
  return 0;
331
342
  }
332
- exports.compareFunctions = compareFunctions;
@@ -1,6 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.applyPrefix = exports.toBackend = exports.envWithTypes = exports.resolveBackend = exports.AllIngressSettings = exports.AllVpcEgressSettings = exports.AllFunctionsPlatforms = exports.isBlockingTriggered = exports.isTaskQueueTriggered = exports.isScheduleTriggered = exports.isEventTriggered = exports.isCallableTriggered = exports.isHttpsTriggered = exports.of = exports.empty = void 0;
3
+ exports.AllIngressSettings = exports.AllVpcEgressSettings = exports.AllFunctionsPlatforms = void 0;
4
+ exports.empty = empty;
5
+ exports.of = of;
6
+ exports.isHttpsTriggered = isHttpsTriggered;
7
+ exports.isDataConnectGraphqlTriggered = isDataConnectGraphqlTriggered;
8
+ exports.isCallableTriggered = isCallableTriggered;
9
+ exports.isEventTriggered = isEventTriggered;
10
+ exports.isScheduleTriggered = isScheduleTriggered;
11
+ exports.isTaskQueueTriggered = isTaskQueueTriggered;
12
+ exports.isBlockingTriggered = isBlockingTriggered;
13
+ exports.resolveBackend = resolveBackend;
14
+ exports.envWithTypes = envWithTypes;
15
+ exports.toBackend = toBackend;
16
+ exports.applyPrefix = applyPrefix;
4
17
  const backend = require("./backend");
5
18
  const proto = require("../../gcp/proto");
6
19
  const api = require("../../api");
@@ -15,37 +28,32 @@ function empty() {
15
28
  params: [],
16
29
  };
17
30
  }
18
- exports.empty = empty;
19
31
  function of(endpoints) {
20
32
  const build = empty();
21
33
  build.endpoints = endpoints;
22
34
  return build;
23
35
  }
24
- exports.of = of;
25
36
  function isHttpsTriggered(triggered) {
26
37
  return {}.hasOwnProperty.call(triggered, "httpsTrigger");
27
38
  }
28
- exports.isHttpsTriggered = isHttpsTriggered;
39
+ function isDataConnectGraphqlTriggered(triggered) {
40
+ return {}.hasOwnProperty.call(triggered, "dataConnectGraphqlTrigger");
41
+ }
29
42
  function isCallableTriggered(triggered) {
30
43
  return {}.hasOwnProperty.call(triggered, "callableTrigger");
31
44
  }
32
- exports.isCallableTriggered = isCallableTriggered;
33
45
  function isEventTriggered(triggered) {
34
46
  return {}.hasOwnProperty.call(triggered, "eventTrigger");
35
47
  }
36
- exports.isEventTriggered = isEventTriggered;
37
48
  function isScheduleTriggered(triggered) {
38
49
  return {}.hasOwnProperty.call(triggered, "scheduleTrigger");
39
50
  }
40
- exports.isScheduleTriggered = isScheduleTriggered;
41
51
  function isTaskQueueTriggered(triggered) {
42
52
  return {}.hasOwnProperty.call(triggered, "taskQueueTrigger");
43
53
  }
44
- exports.isTaskQueueTriggered = isTaskQueueTriggered;
45
54
  function isBlockingTriggered(triggered) {
46
55
  return {}.hasOwnProperty.call(triggered, "blockingTrigger");
47
56
  }
48
- exports.isBlockingTriggered = isBlockingTriggered;
49
57
  const allMemoryOptions = [128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768];
50
58
  exports.AllFunctionsPlatforms = ["gcfv1", "gcfv2"];
51
59
  exports.AllVpcEgressSettings = ["PRIVATE_RANGES_ONLY", "ALL_TRAFFIC"];
@@ -58,7 +66,6 @@ async function resolveBackend(opts) {
58
66
  const paramValues = await params.resolveParams(opts.build.params, opts.firebaseConfig, envWithTypes(opts.build.params, opts.userEnvs), opts.nonInteractive, opts.isEmulator);
59
67
  return { backend: toBackend(opts.build, paramValues), envs: paramValues };
60
68
  }
61
- exports.resolveBackend = resolveBackend;
62
69
  function envWithTypes(definedParams, rawEnvs) {
63
70
  const out = {};
64
71
  for (const envName of Object.keys(rawEnvs)) {
@@ -117,7 +124,6 @@ function envWithTypes(definedParams, rawEnvs) {
117
124
  }
118
125
  return out;
119
126
  }
120
- exports.envWithTypes = envWithTypes;
121
127
  class Resolver {
122
128
  constructor(paramValues) {
123
129
  this.paramValues = paramValues;
@@ -192,7 +198,15 @@ function toBackend(build, paramValues) {
192
198
  if (typeof bdEndpoint.platform === "undefined") {
193
199
  throw new error_1.FirebaseError("platform can't be undefined");
194
200
  }
195
- const bkEndpoint = Object.assign({ id: endpointId, project: bdEndpoint.project, region: region, entryPoint: bdEndpoint.entryPoint, platform: bdEndpoint.platform, runtime: bdEndpoint.runtime }, trigger);
201
+ const bkEndpoint = {
202
+ id: endpointId,
203
+ project: bdEndpoint.project,
204
+ region: region,
205
+ entryPoint: bdEndpoint.entryPoint,
206
+ platform: bdEndpoint.platform,
207
+ runtime: bdEndpoint.runtime,
208
+ ...trigger,
209
+ };
196
210
  proto.copyIfPresent(bkEndpoint, bdEndpoint, "environmentVariables", "labels", "secretEnvironmentVariables");
197
211
  r.resolveStrings(bkEndpoint, bdEndpoint, "serviceAccount");
198
212
  proto.convertIfPresent(bkEndpoint, bdEndpoint, "ingressSettings", (from) => {
@@ -236,7 +250,6 @@ function toBackend(build, paramValues) {
236
250
  bkend.requiredAPIs = build.requiredAPIs;
237
251
  return bkend;
238
252
  }
239
- exports.toBackend = toBackend;
240
253
  function discoverTrigger(endpoint, region, r) {
241
254
  if (isHttpsTriggered(endpoint)) {
242
255
  const httpsTrigger = {};
@@ -248,6 +261,17 @@ function discoverTrigger(endpoint, region, r) {
248
261
  }
249
262
  return { httpsTrigger };
250
263
  }
264
+ else if (isDataConnectGraphqlTriggered(endpoint)) {
265
+ const dataConnectGraphqlTrigger = {};
266
+ if (endpoint.dataConnectGraphqlTrigger.invoker === null) {
267
+ dataConnectGraphqlTrigger.invoker = null;
268
+ }
269
+ else if (typeof endpoint.dataConnectGraphqlTrigger.invoker !== "undefined") {
270
+ dataConnectGraphqlTrigger.invoker = endpoint.dataConnectGraphqlTrigger.invoker.map(r.resolveString);
271
+ }
272
+ proto.copyIfPresent(dataConnectGraphqlTrigger, endpoint.dataConnectGraphqlTrigger, "schemaFilePath");
273
+ return { dataConnectGraphqlTrigger };
274
+ }
251
275
  else if (isCallableTriggered(endpoint)) {
252
276
  const trigger = { callableTrigger: {} };
253
277
  proto.copyIfPresent(trigger.callableTrigger, endpoint.callableTrigger, "genkitAction");
@@ -329,9 +353,11 @@ function applyPrefix(build, prefix) {
329
353
  }
330
354
  newEndpoints[newId] = endpoint;
331
355
  if (endpoint.secretEnvironmentVariables) {
332
- endpoint.secretEnvironmentVariables = endpoint.secretEnvironmentVariables.map((secret) => (Object.assign(Object.assign({}, secret), { secret: `${prefix}-${secret.secret}` })));
356
+ endpoint.secretEnvironmentVariables = endpoint.secretEnvironmentVariables.map((secret) => ({
357
+ ...secret,
358
+ secret: `${prefix}-${secret.secret}`,
359
+ }));
333
360
  }
334
361
  }
335
362
  build.endpoints = newEndpoints;
336
363
  }
337
- exports.applyPrefix = applyPrefix;
@@ -1,17 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.applyBackendHashToBackends = void 0;
3
+ exports.applyBackendHashToBackends = applyBackendHashToBackends;
4
4
  const backend_1 = require("../backend");
5
5
  const hash_1 = require("./hash");
6
6
  function applyBackendHashToBackends(wantBackends, context) {
7
- var _a;
8
7
  for (const [codebase, wantBackend] of Object.entries(wantBackends)) {
9
- const source = (_a = context === null || context === void 0 ? void 0 : context.sources) === null || _a === void 0 ? void 0 : _a[codebase];
8
+ const source = context?.sources?.[codebase];
10
9
  const envHash = (0, hash_1.getEnvironmentVariablesHash)(wantBackend);
11
- applyBackendHashToEndpoints(wantBackend, envHash, source === null || source === void 0 ? void 0 : source.functionsSourceV1Hash, source === null || source === void 0 ? void 0 : source.functionsSourceV2Hash);
10
+ applyBackendHashToEndpoints(wantBackend, envHash, source?.functionsSourceV1Hash, source?.functionsSourceV2Hash);
12
11
  }
13
12
  }
14
- exports.applyBackendHashToBackends = applyBackendHashToBackends;
15
13
  function applyBackendHashToEndpoints(wantBackend, envHash, sourceV1Hash, sourceV2Hash) {
16
14
  for (const endpoint of (0, backend_1.allEndpoints)(wantBackend)) {
17
15
  const secretsHash = (0, hash_1.getSecretsHash)(endpoint);
@@ -1,28 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getEndpointHash = exports.getSecretsHash = exports.getSourceHash = exports.getEnvironmentVariablesHash = void 0;
3
+ exports.getEnvironmentVariablesHash = getEnvironmentVariablesHash;
4
+ exports.getSourceHash = getSourceHash;
5
+ exports.getSecretsHash = getSecretsHash;
6
+ exports.getEndpointHash = getEndpointHash;
4
7
  const promises_1 = require("node:fs/promises");
5
8
  const crypto = require("crypto");
6
9
  const secrets_1 = require("../../../functions/secrets");
7
10
  function getEnvironmentVariablesHash(backend) {
8
11
  return createHash(JSON.stringify(backend.environmentVariables || {}));
9
12
  }
10
- exports.getEnvironmentVariablesHash = getEnvironmentVariablesHash;
11
13
  async function getSourceHash(pathToFile) {
12
14
  const data = await (0, promises_1.readFile)(pathToFile);
13
15
  return createHash(data);
14
16
  }
15
- exports.getSourceHash = getSourceHash;
16
17
  function getSecretsHash(endpoint) {
17
18
  const secretVersions = (0, secrets_1.getSecretVersions)(endpoint);
18
19
  return createHash(JSON.stringify(secretVersions || {}));
19
20
  }
20
- exports.getSecretsHash = getSecretsHash;
21
21
  function getEndpointHash(sourceHash, envHash, secretsHash) {
22
22
  const combined = [sourceHash, envHash, secretsHash].filter((hash) => !!hash).join("");
23
23
  return createHash(combined);
24
24
  }
25
- exports.getEndpointHash = getEndpointHash;
26
25
  function createHash(data, algorithm = "sha1") {
27
26
  const hash = crypto.createHash(algorithm);
28
27
  hash.update(data);
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveExpression = exports.ExprParseError = exports.isCelExpression = void 0;
3
+ exports.ExprParseError = void 0;
4
+ exports.isCelExpression = isCelExpression;
5
+ exports.resolveExpression = resolveExpression;
4
6
  const error_1 = require("../../error");
5
7
  const functional_1 = require("../../functional");
6
8
  const paramRegexp = /params\.(\S+)/;
@@ -17,7 +19,6 @@ function listEquals(a, b) {
17
19
  function isCelExpression(value) {
18
20
  return typeof value === "string" && value.includes("{{") && value.includes("}}");
19
21
  }
20
- exports.isCelExpression = isCelExpression;
21
22
  function isIdentityExpression(value) {
22
23
  return identityRegexp.test(value);
23
24
  }
@@ -63,7 +64,6 @@ function resolveExpression(wantType, expr, params) {
63
64
  throw new ExprParseError("CEL expression '" + expr + "' is of an unsupported form");
64
65
  }
65
66
  }
66
- exports.resolveExpression = resolveExpression;
67
67
  function preprocessLists(wantType, expr, params) {
68
68
  let rv = expr;
69
69
  const listMatcher = /\[[^\[\]]*\]/g;
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureServiceAgentRoles = exports.ensureGenkitMonitoringRoles = exports.obtainDefaultComputeServiceAgentBindings = exports.obtainPubSubServiceAgentBindings = exports.checkHttpIam = exports.checkServiceAccountIam = exports.GENKIT_MONITORING_ROLES = exports.EVENTARC_EVENT_RECEIVER_ROLE = exports.RUN_INVOKER_ROLE = exports.SERVICE_ACCOUNT_TOKEN_CREATOR_ROLE = void 0;
3
+ exports.GENKIT_MONITORING_ROLES = exports.EVENTARC_EVENT_RECEIVER_ROLE = exports.RUN_INVOKER_ROLE = exports.SERVICE_ACCOUNT_TOKEN_CREATOR_ROLE = void 0;
4
+ exports.checkServiceAccountIam = checkServiceAccountIam;
5
+ exports.checkHttpIam = checkHttpIam;
6
+ exports.obtainPubSubServiceAgentBindings = obtainPubSubServiceAgentBindings;
7
+ exports.obtainDefaultComputeServiceAgentBindings = obtainDefaultComputeServiceAgentBindings;
8
+ exports.ensureGenkitMonitoringRoles = ensureGenkitMonitoringRoles;
9
+ exports.ensureServiceAgentRoles = ensureServiceAgentRoles;
4
10
  const colorette_1 = require("colorette");
5
11
  const logger_1 = require("../../logger");
6
12
  const functionsDeployHelper_1 = require("./functionsDeployHelper");
@@ -39,7 +45,6 @@ async function checkServiceAccountIam(projectId) {
39
45
  `https://console.cloud.google.com/iam-admin/iam?project=${projectId}`);
40
46
  }
41
47
  }
42
- exports.checkServiceAccountIam = checkServiceAccountIam;
43
48
  async function checkHttpIam(context, options, payload) {
44
49
  if (!payload.functions) {
45
50
  return;
@@ -47,7 +52,7 @@ async function checkHttpIam(context, options, payload) {
47
52
  const filters = context.filters || (0, functionsDeployHelper_1.getEndpointFilters)(options, context.config);
48
53
  const wantBackends = Object.values(payload.functions).map(({ wantBackend }) => wantBackend);
49
54
  const httpEndpoints = [...(0, functional_1.flattenArray)(wantBackends.map((b) => backend.allEndpoints(b)))]
50
- .filter(backend.isHttpsTriggered)
55
+ .filter(backend.isHttpsTriggered || backend.isDataConnectGraphqlTriggered)
51
56
  .filter((f) => (0, functionsDeployHelper_1.endpointMatchesAnyFilter)(f, filters));
52
57
  const existing = await backend.existingBackend(context);
53
58
  const newHttpsEndpoints = httpEndpoints.filter(backend.missingEndpoint(existing));
@@ -75,7 +80,6 @@ async function checkHttpIam(context, options, payload) {
75
80
  }
76
81
  logger_1.logger.debug("[functions] found setIamPolicy permission, proceeding with deploy");
77
82
  }
78
- exports.checkHttpIam = checkHttpIam;
79
83
  function getPubsubServiceAgent(projectNumber) {
80
84
  return `service-${projectNumber}@gcp-sa-pubsub.iam.gserviceaccount.com`;
81
85
  }
@@ -96,7 +100,6 @@ function obtainPubSubServiceAgentBindings(projectNumber) {
96
100
  };
97
101
  return [serviceAccountTokenCreatorBinding];
98
102
  }
99
- exports.obtainPubSubServiceAgentBindings = obtainPubSubServiceAgentBindings;
100
103
  async function obtainDefaultComputeServiceAgentBindings(projectNumber) {
101
104
  const defaultComputeServiceAgent = `serviceAccount:${await gce.getDefaultServiceAccount(projectNumber)}`;
102
105
  const runInvokerBinding = {
@@ -109,7 +112,6 @@ async function obtainDefaultComputeServiceAgentBindings(projectNumber) {
109
112
  };
110
113
  return [runInvokerBinding, eventarcEventReceiverBinding];
111
114
  }
112
- exports.obtainDefaultComputeServiceAgentBindings = obtainDefaultComputeServiceAgentBindings;
113
115
  async function ensureGenkitMonitoringRoles(projectId, projectNumber, want, have, dryRun) {
114
116
  const wantEndpoints = backend.allEndpoints(want).filter(isGenkitEndpoint);
115
117
  const newEndpoints = wantEndpoints.filter(backend.missingEndpoint(have));
@@ -133,7 +135,6 @@ async function ensureGenkitMonitoringRoles(projectId, projectNumber, want, have,
133
135
  }
134
136
  await ensureBindings(projectId, projectNumber, requiredBindings, newEndpoints.map((endpoint) => endpoint.id), dryRun);
135
137
  }
136
- exports.ensureGenkitMonitoringRoles = ensureGenkitMonitoringRoles;
137
138
  async function ensureServiceAgentRoles(projectId, projectNumber, want, have, dryRun) {
138
139
  const wantServices = backend.allEndpoints(want).reduce(reduceEventsToServices, []);
139
140
  const haveServices = backend.allEndpoints(have).reduce(reduceEventsToServices, []);
@@ -156,7 +157,6 @@ async function ensureServiceAgentRoles(projectId, projectNumber, want, have, dry
156
157
  }
157
158
  await ensureBindings(projectId, projectNumber, requiredBindings, newServices.map((service) => service.api), dryRun);
158
159
  }
159
- exports.ensureServiceAgentRoles = ensureServiceAgentRoles;
160
160
  async function ensureBindings(projectId, projectNumber, requiredBindings, newServicesOrEndpoints, dryRun) {
161
161
  let policy;
162
162
  try {