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,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.detectFromOutputPath = exports.detectFromPort = exports.detectFromYaml = exports.yamlToBuild = exports.getFunctionDiscoveryTimeout = void 0;
3
+ exports.getFunctionDiscoveryTimeout = getFunctionDiscoveryTimeout;
4
+ exports.yamlToBuild = yamlToBuild;
5
+ exports.detectFromYaml = detectFromYaml;
6
+ exports.detectFromPort = detectFromPort;
7
+ exports.detectFromOutputPath = detectFromOutputPath;
4
8
  const node_fetch_1 = require("node-fetch");
5
9
  const fs = require("fs");
6
10
  const path = require("path");
@@ -13,7 +17,6 @@ const TIMEOUT_OVERRIDE_ENV_VAR = "FUNCTIONS_DISCOVERY_TIMEOUT";
13
17
  function getFunctionDiscoveryTimeout() {
14
18
  return +(process.env[TIMEOUT_OVERRIDE_ENV_VAR] || 0) * 1000;
15
19
  }
16
- exports.getFunctionDiscoveryTimeout = getFunctionDiscoveryTimeout;
17
20
  function yamlToBuild(yaml, project, region, runtime) {
18
21
  try {
19
22
  if (!yaml.specVersion) {
@@ -28,7 +31,6 @@ function yamlToBuild(yaml, project, region, runtime) {
28
31
  throw new error_1.FirebaseError("Failed to parse build specification", { children: [err] });
29
32
  }
30
33
  }
31
- exports.yamlToBuild = yamlToBuild;
32
34
  async function detectFromYaml(directory, project, runtime) {
33
35
  let text;
34
36
  try {
@@ -47,7 +49,6 @@ async function detectFromYaml(directory, project, runtime) {
47
49
  const parsed = yaml.parse(text);
48
50
  return yamlToBuild(parsed, project, api.functionsDefaultRegion(), runtime);
49
51
  }
50
- exports.detectFromYaml = detectFromYaml;
51
52
  async function detectFromPort(port, project, runtime, initialDelay = 0, timeout = 10000) {
52
53
  let res;
53
54
  const discoveryTimeout = getFunctionDiscoveryTimeout() || timeout;
@@ -68,8 +69,8 @@ async function detectFromPort(port, project, runtime, initialDelay = 0, timeout
68
69
  break;
69
70
  }
70
71
  catch (err) {
71
- if ((err === null || err === void 0 ? void 0 : err.name) === "FetchError" ||
72
- ["ECONNREFUSED", "ECONNRESET", "ETIMEDOUT"].includes(err === null || err === void 0 ? void 0 : err.code)) {
72
+ if (err?.name === "FetchError" ||
73
+ ["ECONNREFUSED", "ECONNRESET", "ETIMEDOUT"].includes(err?.code)) {
73
74
  continue;
74
75
  }
75
76
  throw err;
@@ -93,10 +94,8 @@ async function detectFromPort(port, project, runtime, initialDelay = 0, timeout
93
94
  }
94
95
  return yamlToBuild(parsed, project, api.functionsDefaultRegion(), runtime);
95
96
  }
96
- exports.detectFromPort = detectFromPort;
97
97
  async function detectFromOutputPath(childProcess, manifestPath, project, runtime, timeout = 10000) {
98
98
  return new Promise((resolve, reject) => {
99
- var _a;
100
99
  let stderrBuffer = "";
101
100
  let resolved = false;
102
101
  const discoveryTimeout = getFunctionDiscoveryTimeout() || timeout;
@@ -106,16 +105,15 @@ async function detectFromOutputPath(childProcess, manifestPath, project, runtime
106
105
  reject(new error_1.FirebaseError(`User code failed to load. Cannot determine backend specification. Timeout after ${discoveryTimeout}ms`));
107
106
  }
108
107
  }, discoveryTimeout);
109
- (_a = childProcess.stderr) === null || _a === void 0 ? void 0 : _a.on("data", (chunk) => {
108
+ childProcess.stderr?.on("data", (chunk) => {
110
109
  stderrBuffer += chunk.toString();
111
110
  });
112
111
  childProcess.on("exit", async (code) => {
113
- var _a;
114
112
  if (!resolved) {
115
113
  clearTimeout(timer);
116
114
  resolved = true;
117
115
  if (code !== 0 && code !== null) {
118
- const errorMessage = (_a = stderrBuffer.trim()) !== null && _a !== void 0 ? _a : `Discovery process exited with code ${code}`;
116
+ const errorMessage = stderrBuffer.trim() ?? `Discovery process exited with code ${code}`;
119
117
  reject(new error_1.FirebaseError(`User code failed to load. Cannot determine backend specification.\n${errorMessage}`));
120
118
  }
121
119
  else {
@@ -144,4 +142,3 @@ async function detectFromOutputPath(childProcess, manifestPath, project, runtime
144
142
  });
145
143
  });
146
144
  }
147
- exports.detectFromOutputPath = detectFromOutputPath;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assertKeyTypes = exports.requireKeys = void 0;
3
+ exports.requireKeys = requireKeys;
4
+ exports.assertKeyTypes = assertKeyTypes;
4
5
  const error_1 = require("../../../../error");
5
6
  function requireKeys(prefix, yaml, ...keys) {
6
7
  if (prefix) {
@@ -12,7 +13,6 @@ function requireKeys(prefix, yaml, ...keys) {
12
13
  }
13
14
  }
14
15
  }
15
- exports.requireKeys = requireKeys;
16
16
  function assertKeyTypes(prefix, yaml, schema) {
17
17
  if (!yaml) {
18
18
  return;
@@ -92,4 +92,3 @@ function assertKeyTypes(prefix, yaml, schema) {
92
92
  }
93
93
  }
94
94
  }
95
- exports.assertKeyTypes = assertKeyTypes;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildFromV1Alpha1 = void 0;
3
+ exports.buildFromV1Alpha1 = buildFromV1Alpha1;
4
4
  const build = require("../../build");
5
5
  const backend = require("../../backend");
6
6
  const proto_1 = require("../../../../gcp/proto");
@@ -43,7 +43,6 @@ function buildFromV1Alpha1(yaml, project, region, runtime) {
43
43
  }
44
44
  return bd;
45
45
  }
46
- exports.buildFromV1Alpha1 = buildFromV1Alpha1;
47
46
  function parseRequiredAPIs(manifest) {
48
47
  const requiredAPIs = manifest.requiredAPIs || [];
49
48
  for (const { api, reason } of requiredAPIs) {
@@ -76,6 +75,7 @@ function assertBuildEndpoint(ep, id) {
76
75
  environmentVariables: "object?",
77
76
  secretEnvironmentVariables: "array?",
78
77
  httpsTrigger: "object",
78
+ dataConnectGraphqlTrigger: "object",
79
79
  callableTrigger: "object",
80
80
  eventTrigger: "object",
81
81
  scheduleTrigger: "object",
@@ -94,6 +94,9 @@ function assertBuildEndpoint(ep, id) {
94
94
  if (ep.httpsTrigger) {
95
95
  triggerCount++;
96
96
  }
97
+ if (ep.dataConnectGraphqlTrigger) {
98
+ triggerCount++;
99
+ }
97
100
  if (ep.callableTrigger) {
98
101
  triggerCount++;
99
102
  }
@@ -133,6 +136,12 @@ function assertBuildEndpoint(ep, id) {
133
136
  invoker: "array?",
134
137
  });
135
138
  }
139
+ else if (build.isDataConnectGraphqlTriggered(ep)) {
140
+ (0, parsing_1.assertKeyTypes)(prefix + ".dataConnectGraphqlTrigger", ep.dataConnectGraphqlTrigger, {
141
+ invoker: "array?",
142
+ schemaFilePath: "string?",
143
+ });
144
+ }
136
145
  else if (build.isCallableTriggered(ep)) {
137
146
  (0, parsing_1.assertKeyTypes)(prefix + ".callableTrigger", ep.callableTrigger, {
138
147
  genkitAction: "string?",
@@ -192,7 +201,6 @@ function assertBuildEndpoint(ep, id) {
192
201
  }
193
202
  }
194
203
  function parseEndpointForBuild(id, ep, project, defaultRegion, runtime) {
195
- var _a;
196
204
  let triggered;
197
205
  if (build.isEventTriggered(ep)) {
198
206
  const eventTrigger = {
@@ -205,7 +213,7 @@ function parseEndpointForBuild(id, ep, project, defaultRegion, runtime) {
205
213
  (0, proto_1.copyIfPresent)(eventTrigger, ep.eventTrigger, "serviceAccount", "eventFilterPathPatterns", "region");
206
214
  (0, proto_1.convertIfPresent)(eventTrigger, ep.eventTrigger, "channel", (c) => resolveChannelName(project, c, defaultRegion));
207
215
  (0, proto_1.convertIfPresent)(eventTrigger, ep.eventTrigger, "eventFilters", (filters) => {
208
- const copy = Object.assign({}, filters);
216
+ const copy = { ...filters };
209
217
  if (copy["topic"] && !copy["topic"].startsWith("projects/")) {
210
218
  copy["topic"] = `projects/${project}/topics/${copy["topic"]}`;
211
219
  }
@@ -217,6 +225,11 @@ function parseEndpointForBuild(id, ep, project, defaultRegion, runtime) {
217
225
  triggered = { httpsTrigger: {} };
218
226
  (0, proto_1.copyIfPresent)(triggered.httpsTrigger, ep.httpsTrigger, "invoker");
219
227
  }
228
+ else if (build.isDataConnectGraphqlTriggered(ep)) {
229
+ triggered = { dataConnectGraphqlTrigger: {} };
230
+ (0, proto_1.copyIfPresent)(triggered.dataConnectGraphqlTrigger, ep.dataConnectGraphqlTrigger, "invoker");
231
+ (0, proto_1.copyIfPresent)(triggered.dataConnectGraphqlTrigger, ep.dataConnectGraphqlTrigger, "schemaFilePath");
232
+ }
220
233
  else if (build.isCallableTriggered(ep)) {
221
234
  triggered = { callableTrigger: {} };
222
235
  (0, proto_1.copyIfPresent)(triggered.callableTrigger, ep.callableTrigger, "genkitAction");
@@ -224,7 +237,7 @@ function parseEndpointForBuild(id, ep, project, defaultRegion, runtime) {
224
237
  else if (build.isScheduleTriggered(ep)) {
225
238
  const st = {
226
239
  schedule: ep.scheduleTrigger.schedule || "",
227
- timeZone: (_a = ep.scheduleTrigger.timeZone) !== null && _a !== void 0 ? _a : null,
240
+ timeZone: ep.scheduleTrigger.timeZone ?? null,
228
241
  };
229
242
  if (ep.scheduleTrigger.retryConfig) {
230
243
  st.retryConfig = {};
@@ -250,13 +263,13 @@ function parseEndpointForBuild(id, ep, project, defaultRegion, runtime) {
250
263
  tq.invoker = null;
251
264
  }
252
265
  if (ep.taskQueueTrigger.retryConfig) {
253
- tq.retryConfig = Object.assign({}, ep.taskQueueTrigger.retryConfig);
266
+ tq.retryConfig = { ...ep.taskQueueTrigger.retryConfig };
254
267
  }
255
268
  else if (ep.taskQueueTrigger.retryConfig === null) {
256
269
  tq.retryConfig = null;
257
270
  }
258
271
  if (ep.taskQueueTrigger.rateLimits) {
259
- tq.rateLimits = Object.assign({}, ep.taskQueueTrigger.rateLimits);
272
+ tq.rateLimits = { ...ep.taskQueueTrigger.rateLimits };
260
273
  }
261
274
  else if (ep.taskQueueTrigger.rateLimits === null) {
262
275
  tq.rateLimits = null;
@@ -270,8 +283,14 @@ function parseEndpointForBuild(id, ep, project, defaultRegion, runtime) {
270
283
  throw new error_1.FirebaseError(`Do not recognize trigger type for endpoint ${id}. Try upgrading ` +
271
284
  "firebase-tools with npm install -g firebase-tools@latest");
272
285
  }
273
- const parsed = Object.assign({ platform: ep.platform || "gcfv2", region: ep.region || [defaultRegion], project,
274
- runtime, entryPoint: ep.entryPoint }, triggered);
286
+ const parsed = {
287
+ platform: ep.platform || "gcfv2",
288
+ region: ep.region || [defaultRegion],
289
+ project,
290
+ runtime,
291
+ entryPoint: ep.entryPoint,
292
+ ...triggered,
293
+ };
275
294
  if ("serviceAccountEmail" in ep) {
276
295
  parsed.serviceAccount = ep.serviceAccountEmail;
277
296
  }
@@ -329,7 +348,7 @@ function resolveChannelName(projectId, channel, defaultRegion) {
329
348
  return "projects/" + projectId + "/locations/" + location + "/channels/" + channelId;
330
349
  }
331
350
  const match = CHANNEL_NAME_REGEX.exec(channel);
332
- if (!(match === null || match === void 0 ? void 0 : match.groups)) {
351
+ if (!match?.groups) {
333
352
  throw new error_1.FirebaseError("Invalid channel name format.");
334
353
  }
335
354
  const matchedProjectId = match.groups.project;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getRuntimeDelegate = void 0;
3
+ exports.getRuntimeDelegate = getRuntimeDelegate;
4
4
  const node = require("./node");
5
5
  const python = require("./python");
6
6
  const validate = require("../validate");
@@ -21,4 +21,3 @@ async function getRuntimeDelegate(context) {
21
21
  }
22
22
  throw new error_1.FirebaseError(`Could not detect runtime for functions at ${sourceDir}`);
23
23
  }
24
- exports.getRuntimeDelegate = getRuntimeDelegate;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Delegate = exports.tryCreateDelegate = void 0;
3
+ exports.Delegate = void 0;
4
+ exports.tryCreateDelegate = tryCreateDelegate;
4
5
  const os = require("os");
5
6
  const fs = require("fs");
6
7
  const path = require("path");
@@ -24,7 +25,7 @@ async function tryCreateDelegate(context) {
24
25
  try {
25
26
  await fs.promises.access(packageJsonPath);
26
27
  }
27
- catch (_a) {
28
+ catch {
28
29
  logger_1.logger.debug("Customer code is not Node");
29
30
  return undefined;
30
31
  }
@@ -35,7 +36,6 @@ async function tryCreateDelegate(context) {
35
36
  }
36
37
  return new Delegate(context.projectId, context.projectDir, context.sourceDir, runtime);
37
38
  }
38
- exports.tryCreateDelegate = tryCreateDelegate;
39
39
  class Delegate {
40
40
  constructor(projectId, projectDir, sourceDir, runtime) {
41
41
  this.projectId = projectId;
@@ -117,8 +117,14 @@ class Delegate {
117
117
  "Please file a bug on Github (https://github.com/firebase/firebase-tools/).");
118
118
  }
119
119
  spawnFunctionsProcess(config, envs) {
120
- var _a, _b;
121
- const env = Object.assign(Object.assign({}, envs), { FUNCTIONS_CONTROL_API: "true", HOME: process.env.HOME, PATH: process.env.PATH, NODE_ENV: process.env.NODE_ENV, __FIREBASE_FRAMEWORKS_ENTRY__: process.env.__FIREBASE_FRAMEWORKS_ENTRY__ });
120
+ const env = {
121
+ ...envs,
122
+ FUNCTIONS_CONTROL_API: "true",
123
+ HOME: process.env.HOME,
124
+ PATH: process.env.PATH,
125
+ NODE_ENV: process.env.NODE_ENV,
126
+ __FIREBASE_FRAMEWORKS_ENTRY__: process.env.__FIREBASE_FRAMEWORKS_ENTRY__,
127
+ };
122
128
  if (Object.keys(config || {}).length) {
123
129
  env.CLOUD_RUNTIME_CONFIG = JSON.stringify(config);
124
130
  }
@@ -128,19 +134,22 @@ class Delegate {
128
134
  cwd: this.sourceDir,
129
135
  stdio: ["ignore", "pipe", "pipe"],
130
136
  });
131
- (_a = childProcess.stdout) === null || _a === void 0 ? void 0 : _a.on("data", (chunk) => {
137
+ childProcess.stdout?.on("data", (chunk) => {
132
138
  logger_1.logger.info(chunk.toString("utf8"));
133
139
  });
134
- (_b = childProcess.stderr) === null || _b === void 0 ? void 0 : _b.on("data", (chunk) => {
140
+ childProcess.stderr?.on("data", (chunk) => {
135
141
  logger_1.logger.error(chunk.toString("utf8"));
136
142
  });
137
143
  return childProcess;
138
144
  }
139
145
  execAdmin(config, envs, manifestPath) {
140
- return this.spawnFunctionsProcess(config, Object.assign(Object.assign({}, envs), { FUNCTIONS_MANIFEST_OUTPUT_PATH: manifestPath }));
146
+ return this.spawnFunctionsProcess(config, {
147
+ ...envs,
148
+ FUNCTIONS_MANIFEST_OUTPUT_PATH: manifestPath,
149
+ });
141
150
  }
142
151
  serveAdmin(config, envs, port) {
143
- const childProcess = this.spawnFunctionsProcess(config, Object.assign(Object.assign({}, envs), { PORT: port }));
152
+ const childProcess = this.spawnFunctionsProcess(config, { ...envs, PORT: port });
144
153
  return Promise.resolve(async () => {
145
154
  const p = new Promise((resolve, reject) => {
146
155
  childProcess.once("exit", resolve);
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getRuntimeChoice = exports.RUNTIME_NOT_SET = void 0;
3
+ exports.RUNTIME_NOT_SET = void 0;
4
+ exports.getRuntimeChoice = getRuntimeChoice;
4
5
  const path = require("path");
5
6
  const error_1 = require("../../../../error");
6
7
  const supported = require("../supported");
@@ -35,4 +36,3 @@ function getRuntimeChoiceFromPackageJson(sourceDir) {
35
36
  function getRuntimeChoice(sourceDir, runtimeFromConfig) {
36
37
  return runtimeFromConfig || getRuntimeChoiceFromPackageJson(sourceDir);
37
38
  }
38
- exports.getRuntimeChoice = getRuntimeChoice;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.packageJsonIsValid = void 0;
3
+ exports.packageJsonIsValid = packageJsonIsValid;
4
4
  const path = require("path");
5
5
  const error_1 = require("../../../../error");
6
6
  const logger_1 = require("../../../../logger");
@@ -31,4 +31,3 @@ function packageJsonIsValid(sourceDirName, sourceDir, projectDir) {
31
31
  throw new error_1.FirebaseError(msg);
32
32
  }
33
33
  }
34
- exports.packageJsonIsValid = packageJsonIsValid;
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkFunctionsSDKVersion = exports.getLatestSDKVersion = exports.getFunctionsSDKVersion = exports.findModuleVersion = exports.FUNCTIONS_SDK_VERSION_TOO_OLD_WARNING = void 0;
3
+ exports.FUNCTIONS_SDK_VERSION_TOO_OLD_WARNING = void 0;
4
+ exports.findModuleVersion = findModuleVersion;
5
+ exports.getFunctionsSDKVersion = getFunctionsSDKVersion;
6
+ exports.getLatestSDKVersion = getLatestSDKVersion;
7
+ exports.checkFunctionsSDKVersion = checkFunctionsSDKVersion;
4
8
  const fs = require("fs");
5
9
  const path = require("path");
6
10
  const clc = require("colorette");
@@ -35,7 +39,6 @@ function findModuleVersion(name, resolvedPath) {
35
39
  searchPath = path.dirname(searchPath);
36
40
  }
37
41
  }
38
- exports.findModuleVersion = findModuleVersion;
39
42
  function getFunctionsSDKVersion(sourceDir) {
40
43
  try {
41
44
  return findModuleVersion("firebase-functions", require.resolve("firebase-functions", { paths: [sourceDir] }));
@@ -48,9 +51,7 @@ function getFunctionsSDKVersion(sourceDir) {
48
51
  return;
49
52
  }
50
53
  }
51
- exports.getFunctionsSDKVersion = getFunctionsSDKVersion;
52
54
  function getLatestSDKVersion() {
53
- var _a;
54
55
  const child = spawn.sync("npm", ["show", "firebase-functions", "--json=true"], {
55
56
  encoding: "utf8",
56
57
  timeout: NPM_COMMAND_TIMEOUT_MILLIES,
@@ -63,9 +64,8 @@ function getLatestSDKVersion() {
63
64
  if (Object.keys(output).length === 0) {
64
65
  return;
65
66
  }
66
- return (_a = output["dist-tags"]) === null || _a === void 0 ? void 0 : _a["latest"];
67
+ return output["dist-tags"]?.["latest"];
67
68
  }
68
- exports.getLatestSDKVersion = getLatestSDKVersion;
69
69
  function checkFunctionsSDKVersion(currentVersion) {
70
70
  try {
71
71
  if (semver.lt(currentVersion, MIN_SDK_VERSION)) {
@@ -92,4 +92,3 @@ function checkFunctionsSDKVersion(currentVersion) {
92
92
  return;
93
93
  }
94
94
  }
95
- exports.checkFunctionsSDKVersion = checkFunctionsSDKVersion;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Delegate = exports.getPythonBinary = exports.tryCreateDelegate = void 0;
3
+ exports.Delegate = void 0;
4
+ exports.tryCreateDelegate = tryCreateDelegate;
5
+ exports.getPythonBinary = getPythonBinary;
4
6
  const fs = require("fs");
5
7
  const path = require("path");
6
8
  const node_fetch_1 = require("node-fetch");
@@ -13,13 +15,12 @@ const python_1 = require("../../../../functions/python");
13
15
  const error_1 = require("../../../../error");
14
16
  const functional_1 = require("../../../../functional");
15
17
  async function tryCreateDelegate(context) {
16
- var _a;
17
18
  const requirementsTextPath = path.join(context.sourceDir, "requirements.txt");
18
19
  if (!(await (0, util_1.promisify)(fs.exists)(requirementsTextPath))) {
19
20
  logger_1.logger.debug("Customer code is not Python code.");
20
21
  return;
21
22
  }
22
- const runtime = (_a = context.runtime) !== null && _a !== void 0 ? _a : supported.latest("python");
23
+ const runtime = context.runtime ?? supported.latest("python");
23
24
  if (!supported.isRuntime(runtime)) {
24
25
  throw new error_1.FirebaseError(`Runtime ${runtime} is not a valid Python runtime`);
25
26
  }
@@ -28,7 +29,6 @@ async function tryCreateDelegate(context) {
28
29
  }
29
30
  return Promise.resolve(new Delegate(context.projectId, context.sourceDir, runtime));
30
31
  }
31
- exports.tryCreateDelegate = tryCreateDelegate;
32
32
  function getPythonBinary(runtime) {
33
33
  if (process.platform === "win32") {
34
34
  return "python.exe";
@@ -47,7 +47,6 @@ function getPythonBinary(runtime) {
47
47
  }
48
48
  (0, functional_1.assertExhaustive)(runtime, `Unhandled python runtime ${runtime}`);
49
49
  }
50
- exports.getPythonBinary = getPythonBinary;
51
50
  class Delegate {
52
51
  constructor(projectId, sourceDir, runtime) {
53
52
  this.projectId = projectId;
@@ -64,7 +63,6 @@ class Delegate {
64
63
  return this._bin;
65
64
  }
66
65
  async modulesDir() {
67
- var _a, _b;
68
66
  if (!this._modulesDir) {
69
67
  let out = "";
70
68
  let stderr = "";
@@ -73,12 +71,12 @@ class Delegate {
73
71
  "-c",
74
72
  '"import firebase_functions; import os; print(os.path.dirname(firebase_functions.__file__))"',
75
73
  ], this.sourceDir, {});
76
- (_a = child.stderr) === null || _a === void 0 ? void 0 : _a.on("data", (chunk) => {
74
+ child.stderr?.on("data", (chunk) => {
77
75
  const chunkString = chunk.toString();
78
76
  stderr = stderr + chunkString;
79
77
  logger_1.logger.debug(`stderr: ${chunkString}`);
80
78
  });
81
- (_b = child.stdout) === null || _b === void 0 ? void 0 : _b.on("data", (chunk) => {
79
+ child.stdout?.on("data", (chunk) => {
82
80
  const chunkString = chunk.toString();
83
81
  out = out + chunkString;
84
82
  logger_1.logger.debug(`stdout: ${chunkString}`);
@@ -113,16 +111,18 @@ class Delegate {
113
111
  return Promise.resolve();
114
112
  }
115
113
  async serveAdmin(port, envs) {
116
- var _a, _b;
117
114
  const modulesDir = await this.modulesDir();
118
- const envWithAdminPort = Object.assign(Object.assign({}, envs), { ADMIN_PORT: port.toString() });
115
+ const envWithAdminPort = {
116
+ ...envs,
117
+ ADMIN_PORT: port.toString(),
118
+ };
119
119
  const args = [this.bin, `"${path.join(modulesDir, "private", "serving.py")}"`];
120
120
  logger_1.logger.debug(`Running admin server with args: ${JSON.stringify(args)} and env: ${JSON.stringify(envWithAdminPort)} in ${this.sourceDir}`);
121
121
  const childProcess = (0, python_1.runWithVirtualEnv)(args, this.sourceDir, envWithAdminPort);
122
- (_a = childProcess.stdout) === null || _a === void 0 ? void 0 : _a.on("data", (chunk) => {
122
+ childProcess.stdout?.on("data", (chunk) => {
123
123
  logger_1.logger.info(chunk.toString("utf8"));
124
124
  });
125
- (_b = childProcess.stderr) === null || _b === void 0 ? void 0 : _b.on("data", (chunk) => {
125
+ childProcess.stderr?.on("data", (chunk) => {
126
126
  logger_1.logger.error(chunk.toString("utf8"));
127
127
  });
128
128
  return Promise.resolve(async () => {
@@ -14,7 +14,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.guardVersionSupport = exports.isDecommissioned = exports.latest = exports.runtimeIsLanguage = exports.isRuntime = void 0;
17
+ exports.isRuntime = isRuntime;
18
+ exports.runtimeIsLanguage = runtimeIsLanguage;
19
+ exports.latest = latest;
20
+ exports.isDecommissioned = isDecommissioned;
21
+ exports.guardVersionSupport = guardVersionSupport;
18
22
  const error_1 = require("../../../../error");
19
23
  const utils = require("../../../../utils");
20
24
  const types_1 = require("./types");
@@ -22,11 +26,9 @@ __exportStar(require("./types"), exports);
22
26
  function isRuntime(maybe) {
23
27
  return maybe in types_1.RUNTIMES;
24
28
  }
25
- exports.isRuntime = isRuntime;
26
29
  function runtimeIsLanguage(runtime, language) {
27
30
  return runtime.startsWith(language);
28
31
  }
29
- exports.runtimeIsLanguage = runtimeIsLanguage;
30
32
  function latest(language, runtimes = Object.keys(types_1.RUNTIMES)) {
31
33
  const sorted = runtimes
32
34
  .filter((s) => runtimeIsLanguage(s, language))
@@ -46,12 +48,10 @@ function latest(language, runtimes = Object.keys(types_1.RUNTIMES)) {
46
48
  }
47
49
  return latest;
48
50
  }
49
- exports.latest = latest;
50
51
  function isDecommissioned(runtime, now = new Date()) {
51
52
  const cutoff = new Date(types_1.RUNTIMES[runtime].decommissionDate);
52
53
  return cutoff < now;
53
54
  }
54
- exports.isDecommissioned = isDecommissioned;
55
55
  function guardVersionSupport(runtime, now = new Date()) {
56
56
  const { deprecationDate, decommissionDate } = types_1.RUNTIMES[runtime];
57
57
  const decommission = new Date(decommissionDate);
@@ -77,4 +77,3 @@ function guardVersionSupport(runtime, now = new Date()) {
77
77
  "details on the lifecycle policy");
78
78
  }
79
79
  }
80
- exports.guardVersionSupport = guardVersionSupport;
@@ -27,22 +27,21 @@ class AuthBlockingService {
27
27
  }
28
28
  }
29
29
  configChanged(newConfig, config) {
30
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
31
- if (((_b = (_a = newConfig.triggers) === null || _a === void 0 ? void 0 : _a.beforeCreate) === null || _b === void 0 ? void 0 : _b.functionUri) !==
32
- ((_d = (_c = config.triggers) === null || _c === void 0 ? void 0 : _c.beforeCreate) === null || _d === void 0 ? void 0 : _d.functionUri) ||
33
- ((_f = (_e = newConfig.triggers) === null || _e === void 0 ? void 0 : _e.beforeSignIn) === null || _f === void 0 ? void 0 : _f.functionUri) !==
34
- ((_h = (_g = config.triggers) === null || _g === void 0 ? void 0 : _g.beforeSignIn) === null || _h === void 0 ? void 0 : _h.functionUri) ||
35
- ((_k = (_j = newConfig.triggers) === null || _j === void 0 ? void 0 : _j.beforeSendEmail) === null || _k === void 0 ? void 0 : _k.functionUri) !==
36
- ((_m = (_l = config.triggers) === null || _l === void 0 ? void 0 : _l.beforeSendEmail) === null || _m === void 0 ? void 0 : _m.functionUri) ||
37
- ((_p = (_o = newConfig.triggers) === null || _o === void 0 ? void 0 : _o.beforeSendSms) === null || _p === void 0 ? void 0 : _p.functionUri) !== ((_r = (_q = config.triggers) === null || _q === void 0 ? void 0 : _q.beforeSendSms) === null || _r === void 0 ? void 0 : _r.functionUri)) {
30
+ if (newConfig.triggers?.beforeCreate?.functionUri !==
31
+ config.triggers?.beforeCreate?.functionUri ||
32
+ newConfig.triggers?.beforeSignIn?.functionUri !==
33
+ config.triggers?.beforeSignIn?.functionUri ||
34
+ newConfig.triggers?.beforeSendEmail?.functionUri !==
35
+ config.triggers?.beforeSendEmail?.functionUri ||
36
+ newConfig.triggers?.beforeSendSms?.functionUri !== config.triggers?.beforeSendSms?.functionUri) {
38
37
  return true;
39
38
  }
40
- if (!!((_s = newConfig.forwardInboundCredentials) === null || _s === void 0 ? void 0 : _s.accessToken) !==
41
- !!((_t = config.forwardInboundCredentials) === null || _t === void 0 ? void 0 : _t.accessToken) ||
42
- !!((_u = newConfig.forwardInboundCredentials) === null || _u === void 0 ? void 0 : _u.idToken) !==
43
- !!((_v = config.forwardInboundCredentials) === null || _v === void 0 ? void 0 : _v.idToken) ||
44
- !!((_w = newConfig.forwardInboundCredentials) === null || _w === void 0 ? void 0 : _w.refreshToken) !==
45
- !!((_x = config.forwardInboundCredentials) === null || _x === void 0 ? void 0 : _x.refreshToken)) {
39
+ if (!!newConfig.forwardInboundCredentials?.accessToken !==
40
+ !!config.forwardInboundCredentials?.accessToken ||
41
+ !!newConfig.forwardInboundCredentials?.idToken !==
42
+ !!config.forwardInboundCredentials?.idToken ||
43
+ !!newConfig.forwardInboundCredentials?.refreshToken !==
44
+ !!config.forwardInboundCredentials?.refreshToken) {
46
45
  return true;
47
46
  }
48
47
  return false;
@@ -51,29 +50,44 @@ class AuthBlockingService {
51
50
  const newBlockingConfig = await identityPlatform.getBlockingFunctionsConfig(endpoint.project);
52
51
  const oldBlockingConfig = (0, utils_1.cloneDeep)(newBlockingConfig);
53
52
  if (endpoint.blockingTrigger.eventType === events.v1.BEFORE_CREATE_EVENT) {
54
- newBlockingConfig.triggers = Object.assign(Object.assign({}, newBlockingConfig.triggers), { beforeCreate: {
53
+ newBlockingConfig.triggers = {
54
+ ...newBlockingConfig.triggers,
55
+ beforeCreate: {
55
56
  functionUri: endpoint.uri,
56
- } });
57
+ },
58
+ };
57
59
  }
58
60
  else if (endpoint.blockingTrigger.eventType === events.v1.BEFORE_SIGN_IN_EVENT) {
59
- newBlockingConfig.triggers = Object.assign(Object.assign({}, newBlockingConfig.triggers), { beforeSignIn: {
61
+ newBlockingConfig.triggers = {
62
+ ...newBlockingConfig.triggers,
63
+ beforeSignIn: {
60
64
  functionUri: endpoint.uri,
61
- } });
65
+ },
66
+ };
62
67
  }
63
68
  else if (endpoint.blockingTrigger.eventType === events.v1.BEFORE_SEND_EMAIL_EVENT) {
64
- newBlockingConfig.triggers = Object.assign(Object.assign({}, newBlockingConfig.triggers), { beforeSendEmail: {
69
+ newBlockingConfig.triggers = {
70
+ ...newBlockingConfig.triggers,
71
+ beforeSendEmail: {
65
72
  functionUri: endpoint.uri,
66
- } });
73
+ },
74
+ };
67
75
  }
68
76
  else if (endpoint.blockingTrigger.eventType === events.v1.BEFORE_SEND_SMS_EVENT) {
69
- newBlockingConfig.triggers = Object.assign(Object.assign({}, newBlockingConfig.triggers), { beforeSendSms: {
77
+ newBlockingConfig.triggers = {
78
+ ...newBlockingConfig.triggers,
79
+ beforeSendSms: {
70
80
  functionUri: endpoint.uri,
71
- } });
81
+ },
82
+ };
72
83
  }
73
84
  else {
74
85
  throw new error_1.FirebaseError(`Received invalid blocking trigger event type ${endpoint.blockingTrigger.eventType}`);
75
86
  }
76
- newBlockingConfig.forwardInboundCredentials = Object.assign(Object.assign({}, oldBlockingConfig.forwardInboundCredentials), endpoint.blockingTrigger.options);
87
+ newBlockingConfig.forwardInboundCredentials = {
88
+ ...oldBlockingConfig.forwardInboundCredentials,
89
+ ...endpoint.blockingTrigger.options,
90
+ };
77
91
  if (!this.configChanged(newBlockingConfig, oldBlockingConfig)) {
78
92
  return;
79
93
  }
@@ -87,25 +101,24 @@ class AuthBlockingService {
87
101
  return this.triggerQueue;
88
102
  }
89
103
  async unregisterTriggerLocked(endpoint) {
90
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
91
104
  const blockingConfig = await identityPlatform.getBlockingFunctionsConfig(endpoint.project);
92
- if (endpoint.uri !== ((_b = (_a = blockingConfig.triggers) === null || _a === void 0 ? void 0 : _a.beforeCreate) === null || _b === void 0 ? void 0 : _b.functionUri) &&
93
- endpoint.uri !== ((_d = (_c = blockingConfig.triggers) === null || _c === void 0 ? void 0 : _c.beforeSignIn) === null || _d === void 0 ? void 0 : _d.functionUri) &&
94
- endpoint.uri !== ((_f = (_e = blockingConfig.triggers) === null || _e === void 0 ? void 0 : _e.beforeSendEmail) === null || _f === void 0 ? void 0 : _f.functionUri) &&
95
- endpoint.uri !== ((_h = (_g = blockingConfig.triggers) === null || _g === void 0 ? void 0 : _g.beforeSendSms) === null || _h === void 0 ? void 0 : _h.functionUri)) {
105
+ if (endpoint.uri !== blockingConfig.triggers?.beforeCreate?.functionUri &&
106
+ endpoint.uri !== blockingConfig.triggers?.beforeSignIn?.functionUri &&
107
+ endpoint.uri !== blockingConfig.triggers?.beforeSendEmail?.functionUri &&
108
+ endpoint.uri !== blockingConfig.triggers?.beforeSendSms?.functionUri) {
96
109
  return;
97
110
  }
98
- if (endpoint.uri === ((_k = (_j = blockingConfig.triggers) === null || _j === void 0 ? void 0 : _j.beforeCreate) === null || _k === void 0 ? void 0 : _k.functionUri)) {
99
- (_l = blockingConfig.triggers) === null || _l === void 0 ? true : delete _l.beforeCreate;
111
+ if (endpoint.uri === blockingConfig.triggers?.beforeCreate?.functionUri) {
112
+ delete blockingConfig.triggers?.beforeCreate;
100
113
  }
101
- if (endpoint.uri === ((_o = (_m = blockingConfig.triggers) === null || _m === void 0 ? void 0 : _m.beforeSignIn) === null || _o === void 0 ? void 0 : _o.functionUri)) {
102
- (_p = blockingConfig.triggers) === null || _p === void 0 ? true : delete _p.beforeSignIn;
114
+ if (endpoint.uri === blockingConfig.triggers?.beforeSignIn?.functionUri) {
115
+ delete blockingConfig.triggers?.beforeSignIn;
103
116
  }
104
- if (endpoint.uri === ((_r = (_q = blockingConfig.triggers) === null || _q === void 0 ? void 0 : _q.beforeSendEmail) === null || _r === void 0 ? void 0 : _r.functionUri)) {
105
- (_s = blockingConfig.triggers) === null || _s === void 0 ? true : delete _s.beforeSendEmail;
117
+ if (endpoint.uri === blockingConfig.triggers?.beforeSendEmail?.functionUri) {
118
+ delete blockingConfig.triggers?.beforeSendEmail;
106
119
  }
107
- if (endpoint.uri === ((_u = (_t = blockingConfig.triggers) === null || _t === void 0 ? void 0 : _t.beforeSendSms) === null || _u === void 0 ? void 0 : _u.functionUri)) {
108
- (_v = blockingConfig.triggers) === null || _v === void 0 ? true : delete _v.beforeSendSms;
120
+ if (endpoint.uri === blockingConfig.triggers?.beforeSendSms?.functionUri) {
121
+ delete blockingConfig.triggers?.beforeSendSms;
109
122
  }
110
123
  await identityPlatform.setBlockingFunctionsConfig(endpoint.project, blockingConfig);
111
124
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureDatabaseTriggerRegion = void 0;
3
+ exports.ensureDatabaseTriggerRegion = ensureDatabaseTriggerRegion;
4
4
  const error_1 = require("../../../error");
5
5
  function ensureDatabaseTriggerRegion(endpoint) {
6
6
  if (!endpoint.eventTrigger.region) {
@@ -11,4 +11,3 @@ function ensureDatabaseTriggerRegion(endpoint) {
11
11
  }
12
12
  return Promise.resolve();
13
13
  }
14
- exports.ensureDatabaseTriggerRegion = ensureDatabaseTriggerRegion;