firebase-tools 15.1.0 → 15.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (523) hide show
  1. package/lib/accountExporter.js +3 -5
  2. package/lib/accountImporter.js +4 -5
  3. package/lib/api.js +3 -3
  4. package/lib/apiv2.js +9 -13
  5. package/lib/appUtils.js +19 -21
  6. package/lib/appdistribution/client.js +4 -8
  7. package/lib/appdistribution/distribution.js +4 -4
  8. package/lib/appdistribution/options-parser-util.js +8 -9
  9. package/lib/appdistribution/types.js +2 -2
  10. package/lib/appdistribution/yaml_helper.js +33 -17
  11. package/lib/apphosting/app.js +8 -13
  12. package/lib/apphosting/backend.js +34 -24
  13. package/lib/apphosting/config.js +14 -14
  14. package/lib/apphosting/githubConnections.js +38 -35
  15. package/lib/apphosting/localbuilds.js +4 -6
  16. package/lib/apphosting/repo.js +24 -20
  17. package/lib/apphosting/rollout.js +12 -5
  18. package/lib/apphosting/secrets/dialogs.js +9 -9
  19. package/lib/apphosting/secrets/index.js +9 -11
  20. package/lib/apphosting/utils.js +2 -3
  21. package/lib/apphosting/yaml.js +12 -11
  22. package/lib/apptesting/ensureProjectConfigured.js +1 -2
  23. package/lib/apptesting/invokeTests.js +2 -3
  24. package/lib/apptesting/parseTestFiles.js +5 -6
  25. package/lib/apptesting/types.js +2 -2
  26. package/lib/archiveDirectory.js +1 -2
  27. package/lib/auth.js +36 -40
  28. package/lib/bin/cli.js +2 -3
  29. package/lib/bin/mcp.js +1 -2
  30. package/lib/checkMinRequiredVersion.js +1 -2
  31. package/lib/checkValidTargetFilters.js +1 -2
  32. package/lib/command.js +6 -9
  33. package/lib/commands/appdistribution-testers-list.js +2 -3
  34. package/lib/commands/apphosting-backends-list.js +4 -6
  35. package/lib/commands/apphosting-builds-create.js +2 -3
  36. package/lib/commands/apphosting-builds-get.js +1 -2
  37. package/lib/commands/apphosting-rollouts-list.js +1 -2
  38. package/lib/commands/apps-init.js +1 -1
  39. package/lib/commands/{apptesting-execute.js → apptesting-wata.js} +3 -4
  40. package/lib/commands/crashlytics-symbols-upload.js +2 -2
  41. package/lib/commands/dataconnect-execute.js +4 -4
  42. package/lib/commands/dataconnect-sdk-generate.js +5 -6
  43. package/lib/commands/dataconnect-services-list.js +7 -8
  44. package/lib/commands/dataconnect-sql-diff.js +1 -2
  45. package/lib/commands/dataconnect-sql-migrate.js +4 -3
  46. package/lib/commands/dataconnect-sql-setup.js +2 -2
  47. package/lib/commands/dataconnect-sql-shell.js +5 -1
  48. package/lib/commands/emulators-start.js +1 -2
  49. package/lib/commands/ext-configure.js +6 -4
  50. package/lib/commands/ext-dev-list.js +2 -3
  51. package/lib/commands/ext-dev-upload.js +2 -2
  52. package/lib/commands/ext-export.js +1 -1
  53. package/lib/commands/ext-info.js +2 -3
  54. package/lib/commands/ext-install.js +5 -7
  55. package/lib/commands/firestore-backups-list.js +1 -2
  56. package/lib/commands/firestore-backups-schedules-list.js +1 -2
  57. package/lib/commands/firestore-indexes-list.js +1 -2
  58. package/lib/commands/firestore-utils.js +1 -2
  59. package/lib/commands/functions-artifacts-setpolicy.js +1 -2
  60. package/lib/commands/functions-config-export.js +2 -3
  61. package/lib/commands/hosting-channel-deploy.js +2 -2
  62. package/lib/commands/hosting-clone.js +2 -3
  63. package/lib/commands/hosting-sites-create.js +1 -1
  64. package/lib/commands/index.js +2 -3
  65. package/lib/commands/init.js +4 -5
  66. package/lib/commands/internaltesting-functions-discover.js +1 -1
  67. package/lib/commands/login.js +4 -5
  68. package/lib/commands/logout.js +3 -3
  69. package/lib/commands/projects-create.js +1 -1
  70. package/lib/commands/remoteconfig-experiments-list.js +2 -3
  71. package/lib/commands/remoteconfig-get.js +1 -1
  72. package/lib/commands/remoteconfig-rollback.js +1 -2
  73. package/lib/commands/remoteconfig-rollouts-list.js +2 -3
  74. package/lib/commands/remoteconfig-versions-list.js +3 -4
  75. package/lib/commands/use.js +3 -3
  76. package/lib/config.js +4 -5
  77. package/lib/crashlytics/buildToolsJarHelper.js +3 -5
  78. package/lib/crashlytics/events.js +4 -7
  79. package/lib/crashlytics/filters.js +10 -12
  80. package/lib/crashlytics/issues.js +2 -3
  81. package/lib/crashlytics/notes.js +3 -4
  82. package/lib/crashlytics/reports.js +21 -15
  83. package/lib/crashlytics/types.js +7 -7
  84. package/lib/crashlytics/utils.js +4 -4
  85. package/lib/database/api.js +2 -3
  86. package/lib/database/import.js +4 -4
  87. package/lib/database/metadata.js +5 -6
  88. package/lib/database/rulesConfig.js +2 -3
  89. package/lib/dataconnect/build.js +10 -13
  90. package/lib/dataconnect/checkIam.js +1 -2
  91. package/lib/dataconnect/client.js +15 -18
  92. package/lib/dataconnect/dataplaneClient.js +6 -6
  93. package/lib/dataconnect/ensureApis.js +2 -3
  94. package/lib/dataconnect/errors.js +8 -11
  95. package/lib/dataconnect/filters.js +2 -3
  96. package/lib/dataconnect/freeTrial.js +3 -4
  97. package/lib/dataconnect/graphqlError.js +5 -8
  98. package/lib/dataconnect/load.js +10 -11
  99. package/lib/dataconnect/names.js +14 -18
  100. package/lib/dataconnect/prompts.js +1 -2
  101. package/lib/dataconnect/provisionCloudSql.js +13 -17
  102. package/lib/dataconnect/schemaMigration.js +60 -27
  103. package/lib/dataconnect/types.js +10 -12
  104. package/lib/dataconnect/webhook.js +3 -3
  105. package/lib/defaultCredentials.js +3 -4
  106. package/lib/deploy/apphosting/deploy.js +2 -3
  107. package/lib/deploy/apphosting/prepare.js +3 -5
  108. package/lib/deploy/apphosting/release.js +1 -1
  109. package/lib/deploy/apphosting/util.js +1 -2
  110. package/lib/deploy/database/deploy.js +1 -2
  111. package/lib/deploy/database/prepare.js +1 -2
  112. package/lib/deploy/database/release.js +1 -2
  113. package/lib/deploy/dataconnect/context.js +15 -4
  114. package/lib/deploy/dataconnect/deploy.js +5 -6
  115. package/lib/deploy/dataconnect/prepare.js +7 -9
  116. package/lib/deploy/dataconnect/release.js +7 -10
  117. package/lib/deploy/extensions/deploy.js +7 -9
  118. package/lib/deploy/extensions/deploymentSummary.js +6 -7
  119. package/lib/deploy/extensions/planner.js +15 -18
  120. package/lib/deploy/extensions/prepare.js +9 -11
  121. package/lib/deploy/extensions/release.js +10 -12
  122. package/lib/deploy/extensions/secrets.js +8 -11
  123. package/lib/deploy/extensions/tasks.js +6 -8
  124. package/lib/deploy/extensions/v2FunctionHelper.js +2 -3
  125. package/lib/deploy/extensions/validate.js +1 -2
  126. package/lib/deploy/firestore/deploy.js +3 -5
  127. package/lib/deploy/firestore/prepare.js +2 -3
  128. package/lib/deploy/firestore/release.js +3 -4
  129. package/lib/deploy/functions/backend.js +52 -42
  130. package/lib/deploy/functions/build.js +41 -15
  131. package/lib/deploy/functions/cache/applyHash.js +3 -5
  132. package/lib/deploy/functions/cache/hash.js +4 -5
  133. package/lib/deploy/functions/cel.js +3 -3
  134. package/lib/deploy/functions/checkIam.js +8 -8
  135. package/lib/deploy/functions/containerCleaner.js +10 -6
  136. package/lib/deploy/functions/deploy.js +6 -8
  137. package/lib/deploy/functions/ensure.js +6 -9
  138. package/lib/deploy/functions/functionsDeployHelper.js +10 -11
  139. package/lib/deploy/functions/params.js +10 -10
  140. package/lib/deploy/functions/prepare.js +41 -36
  141. package/lib/deploy/functions/prepareFunctionsUpload.js +24 -10
  142. package/lib/deploy/functions/pricing.js +3 -3
  143. package/lib/deploy/functions/prompts.js +7 -10
  144. package/lib/deploy/functions/release/executor.js +5 -6
  145. package/lib/deploy/functions/release/fabricator.js +76 -29
  146. package/lib/deploy/functions/release/index.js +23 -14
  147. package/lib/deploy/functions/release/planner.js +15 -14
  148. package/lib/deploy/functions/release/reporter.js +20 -20
  149. package/lib/deploy/functions/release/sourceTokenScraper.js +4 -5
  150. package/lib/deploy/functions/remoteSource.js +3 -4
  151. package/lib/deploy/functions/runtimes/discovery/index.js +9 -12
  152. package/lib/deploy/functions/runtimes/discovery/parsing.js +2 -3
  153. package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +29 -10
  154. package/lib/deploy/functions/runtimes/index.js +1 -2
  155. package/lib/deploy/functions/runtimes/node/index.js +18 -9
  156. package/lib/deploy/functions/runtimes/node/parseRuntimeAndValidateSDK.js +2 -2
  157. package/lib/deploy/functions/runtimes/node/validate.js +1 -2
  158. package/lib/deploy/functions/runtimes/node/versioning.js +6 -7
  159. package/lib/deploy/functions/runtimes/python/index.js +12 -12
  160. package/lib/deploy/functions/runtimes/supported/index.js +5 -6
  161. package/lib/deploy/functions/services/auth.js +49 -36
  162. package/lib/deploy/functions/services/database.js +1 -2
  163. package/lib/deploy/functions/services/dataconnect.js +16 -2
  164. package/lib/deploy/functions/services/firebaseAlerts.js +1 -2
  165. package/lib/deploy/functions/services/firestore.js +3 -5
  166. package/lib/deploy/functions/services/index.js +2 -2
  167. package/lib/deploy/functions/services/remoteConfig.js +1 -2
  168. package/lib/deploy/functions/services/storage.js +3 -5
  169. package/lib/deploy/functions/services/testLab.js +1 -2
  170. package/lib/deploy/functions/triggerRegionHelper.js +1 -2
  171. package/lib/deploy/functions/validate.js +12 -11
  172. package/lib/deploy/hosting/convertConfig.js +38 -22
  173. package/lib/deploy/hosting/deploy.js +4 -7
  174. package/lib/deploy/hosting/hashcache.js +2 -3
  175. package/lib/deploy/hosting/prepare.js +14 -14
  176. package/lib/deploy/hosting/release.js +1 -2
  177. package/lib/deploy/index.js +7 -8
  178. package/lib/deploy/lifecycleHooks.js +3 -5
  179. package/lib/deploy/remoteconfig/deploy.js +1 -1
  180. package/lib/deploy/remoteconfig/functions.js +5 -6
  181. package/lib/deploy/remoteconfig/prepare.js +2 -3
  182. package/lib/deploy/remoteconfig/release.js +2 -2
  183. package/lib/deploy/storage/deploy.js +1 -1
  184. package/lib/deploy/storage/prepare.js +1 -1
  185. package/lib/deploy/storage/release.js +1 -1
  186. package/lib/deploymentTool.js +5 -6
  187. package/lib/detectProjectRoot.js +1 -2
  188. package/lib/downloadUtils.js +2 -3
  189. package/lib/emulator/adminSdkConfig.js +2 -3
  190. package/lib/emulator/apphosting/config.js +1 -2
  191. package/lib/emulator/apphosting/developmentServer.js +3 -3
  192. package/lib/emulator/apphosting/serve.js +20 -14
  193. package/lib/emulator/auth/cloudFunctions.js +2 -3
  194. package/lib/emulator/auth/errors.js +2 -2
  195. package/lib/emulator/auth/handlers.js +3 -4
  196. package/lib/emulator/auth/index.js +6 -6
  197. package/lib/emulator/auth/operations.js +171 -129
  198. package/lib/emulator/auth/server.js +30 -22
  199. package/lib/emulator/auth/state.js +26 -36
  200. package/lib/emulator/auth/utils.js +12 -13
  201. package/lib/emulator/commandUtils.js +20 -20
  202. package/lib/emulator/controller.js +32 -29
  203. package/lib/emulator/databaseEmulator.js +1 -2
  204. package/lib/emulator/dataconnect/pgliteServer.js +48 -104
  205. package/lib/emulator/dataconnectEmulator.js +6 -9
  206. package/lib/emulator/download.js +2 -3
  207. package/lib/emulator/downloadableEmulatorInfo.json +7 -7
  208. package/lib/emulator/downloadableEmulators.js +49 -24
  209. package/lib/emulator/emulatorLogger.js +19 -4
  210. package/lib/emulator/env.js +6 -8
  211. package/lib/emulator/eventarcEmulator.js +2 -3
  212. package/lib/emulator/eventarcEmulatorUtils.js +3 -6
  213. package/lib/emulator/extensions/postinstall.js +1 -2
  214. package/lib/emulator/extensions/validation.js +4 -7
  215. package/lib/emulator/extensionsEmulator.js +6 -9
  216. package/lib/emulator/functionsEmulator.js +89 -46
  217. package/lib/emulator/functionsEmulatorRuntime.js +1 -1
  218. package/lib/emulator/functionsEmulatorShared.js +30 -30
  219. package/lib/emulator/functionsEmulatorShell.js +4 -6
  220. package/lib/emulator/functionsEmulatorUtils.js +8 -9
  221. package/lib/emulator/functionsRuntimeWorker.js +18 -9
  222. package/lib/emulator/hub.js +41 -34
  223. package/lib/emulator/hubClient.js +1 -1
  224. package/lib/emulator/initEmulators.js +2 -3
  225. package/lib/emulator/loggingEmulator.js +2 -2
  226. package/lib/emulator/portUtils.js +4 -5
  227. package/lib/emulator/registry.js +10 -4
  228. package/lib/emulator/shared/request.js +1 -2
  229. package/lib/emulator/storage/apis/firebase.js +16 -20
  230. package/lib/emulator/storage/apis/gcloud.js +6 -9
  231. package/lib/emulator/storage/apis/shared.js +1 -2
  232. package/lib/emulator/storage/crc.js +2 -3
  233. package/lib/emulator/storage/files.js +18 -41
  234. package/lib/emulator/storage/metadata.js +10 -4
  235. package/lib/emulator/storage/multipart.js +1 -2
  236. package/lib/emulator/storage/rfc.js +1 -2
  237. package/lib/emulator/storage/rules/config.js +1 -2
  238. package/lib/emulator/storage/rules/manager.js +3 -5
  239. package/lib/emulator/storage/rules/runtime.js +15 -13
  240. package/lib/emulator/storage/rules/types.js +2 -2
  241. package/lib/emulator/storage/rules/utils.js +5 -6
  242. package/lib/emulator/storage/server.js +1 -2
  243. package/lib/emulator/storage/upload.js +3 -4
  244. package/lib/emulator/taskQueue.js +11 -4
  245. package/lib/emulator/tasksEmulator.js +11 -12
  246. package/lib/emulator/types.js +6 -6
  247. package/lib/emulator/ui.js +6 -1
  248. package/lib/ensureApiEnabled.js +7 -9
  249. package/lib/env.js +2 -3
  250. package/lib/error.js +11 -13
  251. package/lib/errorOut.js +1 -2
  252. package/lib/experiments.js +15 -18
  253. package/lib/extensions/askUserForEventsConfig.js +12 -13
  254. package/lib/extensions/askUserForParam.js +11 -12
  255. package/lib/extensions/change-log.js +4 -5
  256. package/lib/extensions/checkProjectBilling.js +1 -2
  257. package/lib/extensions/diagnose.js +1 -2
  258. package/lib/extensions/displayExtensionInfo.js +25 -32
  259. package/lib/extensions/emulator/optionsHelper.js +6 -8
  260. package/lib/extensions/emulator/specHelper.js +15 -16
  261. package/lib/extensions/emulator/triggerHelper.js +3 -5
  262. package/lib/extensions/etags.js +2 -3
  263. package/lib/extensions/export.js +7 -9
  264. package/lib/extensions/extensionsApi.js +23 -29
  265. package/lib/extensions/extensionsHelper.js +52 -80
  266. package/lib/extensions/listExtensions.js +3 -5
  267. package/lib/extensions/localHelper.js +5 -5
  268. package/lib/extensions/manifest.js +15 -16
  269. package/lib/extensions/metricsUtils.js +3 -4
  270. package/lib/extensions/paramHelper.js +21 -18
  271. package/lib/extensions/provisioningHelper.js +17 -21
  272. package/lib/extensions/publishHelpers.js +1 -2
  273. package/lib/extensions/publisherApi.js +11 -13
  274. package/lib/extensions/refs.js +6 -7
  275. package/lib/extensions/runtimes/common.js +18 -19
  276. package/lib/extensions/runtimes/node.js +5 -6
  277. package/lib/extensions/secretsUtils.js +8 -8
  278. package/lib/extensions/tos.js +7 -8
  279. package/lib/extensions/types.js +3 -3
  280. package/lib/extensions/updateHelper.js +6 -7
  281. package/lib/extensions/utils.js +6 -8
  282. package/lib/extensions/versionHelper.js +1 -2
  283. package/lib/extensions/warnings.js +6 -8
  284. package/lib/fetchMOTD.js +1 -2
  285. package/lib/fetchWebSetup.js +3 -4
  286. package/lib/filterTargets.js +1 -2
  287. package/lib/firebaseConfigValidate.js +2 -3
  288. package/lib/firestore/api-sort.js +8 -9
  289. package/lib/firestore/api-types.js +15 -15
  290. package/lib/firestore/api.js +15 -13
  291. package/lib/firestore/backupUtils.js +3 -3
  292. package/lib/firestore/checkDatabaseType.js +1 -2
  293. package/lib/firestore/delete.js +1 -2
  294. package/lib/firestore/encodeFirestoreValue.js +1 -2
  295. package/lib/firestore/fsConfig.js +1 -2
  296. package/lib/firestore/options.js +1 -1
  297. package/lib/firestore/util.js +5 -6
  298. package/lib/firestore/validator.js +4 -5
  299. package/lib/frameworks/angular/index.js +14 -15
  300. package/lib/frameworks/angular/utils.js +21 -23
  301. package/lib/frameworks/astro/index.js +7 -7
  302. package/lib/frameworks/astro/utils.js +4 -6
  303. package/lib/frameworks/compose/discover/filesystem.js +3 -3
  304. package/lib/frameworks/compose/discover/frameworkMatcher.js +4 -5
  305. package/lib/frameworks/compose/discover/index.js +1 -2
  306. package/lib/frameworks/compose/discover/runtime/node.js +8 -11
  307. package/lib/frameworks/compose/driver/docker.js +3 -5
  308. package/lib/frameworks/compose/driver/hooks.js +2 -2
  309. package/lib/frameworks/compose/driver/index.js +2 -2
  310. package/lib/frameworks/compose/driver/local.js +2 -3
  311. package/lib/frameworks/compose/index.js +5 -7
  312. package/lib/frameworks/constants.js +3 -3
  313. package/lib/frameworks/express/index.js +7 -8
  314. package/lib/frameworks/flutter/index.js +6 -7
  315. package/lib/frameworks/flutter/utils.js +4 -5
  316. package/lib/frameworks/index.js +21 -22
  317. package/lib/frameworks/next/constants.js +5 -2
  318. package/lib/frameworks/next/index.js +34 -32
  319. package/lib/frameworks/next/utils.js +40 -39
  320. package/lib/frameworks/nuxt/index.js +9 -9
  321. package/lib/frameworks/nuxt/utils.js +4 -6
  322. package/lib/frameworks/nuxt2/index.js +7 -7
  323. package/lib/frameworks/sveltekit/index.js +6 -8
  324. package/lib/frameworks/utils.js +26 -24
  325. package/lib/frameworks/vite/index.js +8 -9
  326. package/lib/fsAsync.js +1 -2
  327. package/lib/fsutils.js +5 -6
  328. package/lib/functional.js +11 -11
  329. package/lib/functions/artifacts.js +25 -22
  330. package/lib/functions/ensureTargeted.js +1 -2
  331. package/lib/functions/env.js +13 -14
  332. package/lib/functions/functionslog.js +2 -3
  333. package/lib/functions/projectConfig.js +29 -33
  334. package/lib/functions/python.js +10 -4
  335. package/lib/functions/secrets.js +32 -18
  336. package/lib/functionsConfig.js +14 -14
  337. package/lib/functionsConfigClone.js +1 -2
  338. package/lib/functionsShellCommandAction.js +2 -3
  339. package/lib/gcp/apphosting.js +43 -28
  340. package/lib/gcp/apptesting.js +2 -2
  341. package/lib/gcp/artifactregistry.js +5 -5
  342. package/lib/gcp/auth.js +11 -13
  343. package/lib/gcp/cloudbilling.js +4 -5
  344. package/lib/gcp/cloudbuild.js +10 -11
  345. package/lib/gcp/cloudfunctions.js +61 -45
  346. package/lib/gcp/cloudfunctionsv2.js +81 -43
  347. package/lib/gcp/cloudlogging.js +2 -4
  348. package/lib/gcp/cloudmonitoring.js +7 -7
  349. package/lib/gcp/cloudscheduler.js +12 -14
  350. package/lib/gcp/cloudsql/cloudsqladmin.js +18 -20
  351. package/lib/gcp/cloudsql/connect.js +14 -9
  352. package/lib/gcp/cloudsql/fbToolsAuthClient.js +5 -3
  353. package/lib/gcp/cloudsql/interactive.js +2 -3
  354. package/lib/gcp/cloudsql/permissions.js +8 -8
  355. package/lib/gcp/cloudsql/permissionsSetup.js +9 -9
  356. package/lib/gcp/cloudtasks.js +19 -18
  357. package/lib/gcp/computeEngine.js +1 -2
  358. package/lib/gcp/devConnect.js +32 -29
  359. package/lib/gcp/docker.js +2 -4
  360. package/lib/gcp/eventarc.js +5 -5
  361. package/lib/gcp/firedata.js +4 -4
  362. package/lib/gcp/firestore.js +16 -16
  363. package/lib/gcp/iam.js +11 -12
  364. package/lib/gcp/identityPlatform.js +4 -5
  365. package/lib/gcp/k8s.js +1 -2
  366. package/lib/gcp/location.js +2 -2
  367. package/lib/gcp/proto.js +10 -11
  368. package/lib/gcp/pubsub.js +4 -5
  369. package/lib/gcp/resourceManager.js +5 -5
  370. package/lib/gcp/rules.js +13 -14
  371. package/lib/gcp/run.js +24 -31
  372. package/lib/gcp/runv2.js +39 -27
  373. package/lib/gcp/secretManager.js +60 -39
  374. package/lib/gcp/serviceusage.js +8 -4
  375. package/lib/gcp/storage.js +22 -20
  376. package/lib/gemini/fdcExperience.js +5 -5
  377. package/lib/getDefaultDatabaseInstance.js +2 -4
  378. package/lib/getDefaultHostingSite.js +3 -4
  379. package/lib/getProjectNumber.js +1 -2
  380. package/lib/hosting/api.js +32 -36
  381. package/lib/hosting/cloudRunProxy.js +2 -3
  382. package/lib/hosting/config.js +17 -17
  383. package/lib/hosting/expireUtils.js +3 -3
  384. package/lib/hosting/functionsProxy.js +1 -2
  385. package/lib/hosting/implicitInit.js +1 -2
  386. package/lib/hosting/initMiddleware.js +1 -2
  387. package/lib/hosting/interactive.js +1 -2
  388. package/lib/hosting/proxy.js +3 -5
  389. package/lib/hosting/runTags.js +8 -11
  390. package/lib/init/features/account.js +1 -2
  391. package/lib/init/features/ailogic/index.js +3 -5
  392. package/lib/init/features/ailogic/utils.js +6 -8
  393. package/lib/init/features/aitools/claude.js +1 -2
  394. package/lib/init/features/aitools/cursor.js +1 -2
  395. package/lib/init/features/aitools/gemini.js +1 -1
  396. package/lib/init/features/aitools/promptUpdater.js +10 -12
  397. package/lib/init/features/aitools.js +1 -2
  398. package/lib/init/features/apphosting.js +3 -4
  399. package/lib/init/features/apptesting/index.js +9 -9
  400. package/lib/init/features/database.js +4 -5
  401. package/lib/init/features/dataconnect/create_app.js +3 -4
  402. package/lib/init/features/dataconnect/index.js +25 -22
  403. package/lib/init/features/dataconnect/resolver.js +6 -10
  404. package/lib/init/features/dataconnect/sdk.js +31 -24
  405. package/lib/init/features/emulators.js +7 -6
  406. package/lib/init/features/extensions/index.js +3 -5
  407. package/lib/init/features/firestore/index.js +7 -9
  408. package/lib/init/features/firestore/indexes.js +2 -2
  409. package/lib/init/features/firestore/rules.js +3 -3
  410. package/lib/init/features/functions/index.js +3 -5
  411. package/lib/init/features/functions/javascript.js +1 -2
  412. package/lib/init/features/functions/npm-dependencies.js +1 -2
  413. package/lib/init/features/functions/python.js +1 -2
  414. package/lib/init/features/functions/typescript.js +1 -2
  415. package/lib/init/features/genkit/index.js +44 -18
  416. package/lib/init/features/hosting/github.js +6 -8
  417. package/lib/init/features/hosting/index.js +10 -13
  418. package/lib/init/features/project.js +4 -7
  419. package/lib/init/features/remoteconfig.js +1 -2
  420. package/lib/init/features/storage.js +3 -5
  421. package/lib/init/index.js +4 -7
  422. package/lib/init/spawn.js +7 -9
  423. package/lib/listFiles.js +1 -2
  424. package/lib/loadCJSON.js +1 -2
  425. package/lib/localFunction.js +14 -15
  426. package/lib/logError.js +1 -2
  427. package/lib/logger.js +7 -7
  428. package/lib/management/apps.js +22 -22
  429. package/lib/management/database.js +11 -12
  430. package/lib/management/projects.js +57 -56
  431. package/lib/management/provisioning/errorHandler.js +3 -5
  432. package/lib/management/provisioning/provision.js +15 -9
  433. package/lib/management/studio.js +2 -3
  434. package/lib/mcp/errors.js +4 -4
  435. package/lib/mcp/index.js +16 -23
  436. package/lib/mcp/prompt.js +1 -2
  437. package/lib/mcp/prompts/core/consult.js +2 -3
  438. package/lib/mcp/prompts/crashlytics/connect.js +15 -122
  439. package/lib/mcp/prompts/dataconnect/schema.js +3 -3
  440. package/lib/mcp/prompts/index.js +8 -10
  441. package/lib/mcp/resource.js +3 -15
  442. package/lib/mcp/resources/guides/app_id.js +39 -0
  443. package/lib/mcp/resources/guides/crashlytics_connect.js +51 -0
  444. package/lib/mcp/resources/guides/crashlytics_investigations.js +51 -0
  445. package/lib/mcp/resources/guides/crashlytics_issues.js +42 -0
  446. package/lib/mcp/resources/guides/crashlytics_reports.js +112 -0
  447. package/lib/mcp/resources/index.js +11 -3
  448. package/lib/mcp/tool.js +3 -15
  449. package/lib/mcp/tools/apphosting/fetch_logs.js +3 -4
  450. package/lib/mcp/tools/apphosting/list_backends.js +1 -1
  451. package/lib/mcp/tools/auth/get_users.js +5 -16
  452. package/lib/mcp/tools/core/create_android_sha.js +4 -1
  453. package/lib/mcp/tools/core/get_environment.js +3 -3
  454. package/lib/mcp/tools/core/get_sdk_config.js +4 -5
  455. package/lib/mcp/tools/core/get_security_rules.js +1 -2
  456. package/lib/mcp/tools/core/init.js +2 -2
  457. package/lib/mcp/tools/core/logout.js +1 -1
  458. package/lib/mcp/tools/core/read_resources.js +2 -2
  459. package/lib/mcp/tools/core/validate_security_rules.js +1 -2
  460. package/lib/mcp/tools/crashlytics/events.js +43 -19
  461. package/lib/mcp/tools/crashlytics/index.js +1 -6
  462. package/lib/mcp/tools/crashlytics/issues.js +33 -12
  463. package/lib/mcp/tools/crashlytics/reports.js +66 -117
  464. package/lib/mcp/tools/dataconnect/list_services.js +2 -3
  465. package/lib/mcp/tools/firestore/converter.js +3 -5
  466. package/lib/mcp/tools/firestore/delete_document.js +1 -1
  467. package/lib/mcp/tools/functions/get_logs.js +14 -12
  468. package/lib/mcp/tools/functions/list_functions.js +1 -1
  469. package/lib/mcp/tools/index.js +17 -9
  470. package/lib/mcp/util/apptesting/availability.js +1 -2
  471. package/lib/mcp/util/availability.js +1 -2
  472. package/lib/mcp/util/crashlytics/availability.js +1 -2
  473. package/lib/mcp/util/dataconnect/compile.js +7 -6
  474. package/lib/mcp/util/dataconnect/converter.js +7 -10
  475. package/lib/mcp/util/dataconnect/emulator.js +1 -2
  476. package/lib/mcp/util.js +9 -11
  477. package/lib/messaging/sendMessage.js +1 -2
  478. package/lib/metaprogramming.js +1 -2
  479. package/lib/operation-poller.js +2 -2
  480. package/lib/profileReport.js +6 -6
  481. package/lib/profiler.js +1 -2
  482. package/lib/projectPath.js +1 -2
  483. package/lib/projectUtils.js +5 -6
  484. package/lib/prompt.js +22 -13
  485. package/lib/rc.js +5 -7
  486. package/lib/remoteconfig/deleteExperiment.js +1 -2
  487. package/lib/remoteconfig/deleteRollout.js +1 -2
  488. package/lib/remoteconfig/get.js +2 -3
  489. package/lib/remoteconfig/getExperiment.js +2 -2
  490. package/lib/remoteconfig/getRollout.js +2 -2
  491. package/lib/remoteconfig/interfaces.js +1 -1
  492. package/lib/remoteconfig/listExperiments.js +2 -2
  493. package/lib/remoteconfig/listRollouts.js +2 -2
  494. package/lib/remoteconfig/publish.js +1 -2
  495. package/lib/remoteconfig/rollback.js +1 -2
  496. package/lib/remoteconfig/versionslist.js +1 -2
  497. package/lib/requireAuth.js +4 -6
  498. package/lib/requireConfig.js +5 -8
  499. package/lib/requireDatabaseInstance.js +2 -2
  500. package/lib/requireHostingSite.js +1 -2
  501. package/lib/requireInteractive.js +1 -1
  502. package/lib/requirePermissions.js +1 -2
  503. package/lib/requireTosAcceptance.js +1 -2
  504. package/lib/responseToError.js +1 -2
  505. package/lib/rtdb.js +2 -3
  506. package/lib/rulesDeploy.js +3 -4
  507. package/lib/serve/functions.js +9 -1
  508. package/lib/serve/hosting.js +4 -5
  509. package/lib/serve/index.js +1 -2
  510. package/lib/shortenUrl.js +1 -2
  511. package/lib/templates.js +3 -4
  512. package/lib/throttler/throttler.js +3 -3
  513. package/lib/timeout.js +2 -3
  514. package/lib/track.js +23 -14
  515. package/lib/tsconfig.publish.tsbuildinfo +1 -0
  516. package/lib/unzip.js +2 -3
  517. package/lib/utils.js +62 -63
  518. package/lib/vsCodeUtils.js +2 -3
  519. package/package.json +6 -6
  520. package/templates/extensions/typescript/index.ts +1 -1
  521. package/templates/extensions/typescript/package.lint.json +1 -1
  522. package/templates/extensions/typescript/package.nolint.json +1 -1
  523. package/templates/extensions/typescript/tsconfig.json +2 -1
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.runWithVirtualEnv = exports.virtualEnvCmd = exports.DEFAULT_VENV_DIR = void 0;
3
+ exports.DEFAULT_VENV_DIR = void 0;
4
+ exports.virtualEnvCmd = virtualEnvCmd;
5
+ exports.runWithVirtualEnv = runWithVirtualEnv;
4
6
  const path = require("path");
5
7
  const spawn = require("cross-spawn");
6
8
  const logger_1 = require("../logger");
@@ -14,11 +16,15 @@ function virtualEnvCmd(cwd, venvDir) {
14
16
  args: [utils_1.IS_WINDOWS ? "" : venvActivate],
15
17
  };
16
18
  }
17
- exports.virtualEnvCmd = virtualEnvCmd;
18
19
  function runWithVirtualEnv(commandAndArgs, cwd, envs, spawnOpts = {}, venvDir = exports.DEFAULT_VENV_DIR) {
19
20
  const { command, args } = virtualEnvCmd(cwd, venvDir);
20
21
  args.push("&&", ...commandAndArgs);
21
22
  logger_1.logger.debug(`Running command with virtualenv: command=${command}, args=${JSON.stringify(args)}`);
22
- return spawn(command, args, Object.assign(Object.assign({ shell: true, cwd, stdio: ["pipe", "pipe", "pipe", "pipe"] }, spawnOpts), { env: envs }));
23
+ return spawn(command, args, {
24
+ shell: true,
25
+ cwd,
26
+ stdio: ["pipe", "pipe", "pipe", "pipe"],
27
+ ...spawnOpts,
28
+ env: envs,
29
+ });
23
30
  }
24
- exports.runWithVirtualEnv = runWithVirtualEnv;
@@ -1,6 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.describeSecret = exports.updateEndpointSecret = exports.pruneAndDestroySecrets = exports.pruneSecrets = exports.versionInUse = exports.inUse = exports.getSecretVersions = exports.of = exports.ensureSecret = exports.validateJsonSecret = exports.ensureValidKey = void 0;
3
+ exports.ensureValidKey = ensureValidKey;
4
+ exports.validateJsonSecret = validateJsonSecret;
5
+ exports.ensureSecret = ensureSecret;
6
+ exports.of = of;
7
+ exports.getSecretVersions = getSecretVersions;
8
+ exports.inUse = inUse;
9
+ exports.versionInUse = versionInUse;
10
+ exports.pruneSecrets = pruneSecrets;
11
+ exports.pruneAndDestroySecrets = pruneAndDestroySecrets;
12
+ exports.updateEndpointSecret = updateEndpointSecret;
13
+ exports.describeSecret = describeSecret;
4
14
  const utils = require("../utils");
5
15
  const poller = require("../operation-poller");
6
16
  const gcfV1 = require("../gcp/cloudfunctions");
@@ -60,7 +70,6 @@ async function ensureValidKey(key, options) {
60
70
  }
61
71
  return transformedKey;
62
72
  }
63
- exports.ensureValidKey = ensureValidKey;
64
73
  function validateJsonSecret(secretName, secretValue) {
65
74
  try {
66
75
  JSON.parse(secretValue);
@@ -73,7 +82,6 @@ function validateJsonSecret(secretName, secretValue) {
73
82
  ` cat <file.json> | firebase functions:secrets:set ${secretName} --format=json`);
74
83
  }
75
84
  }
76
- exports.validateJsonSecret = validateJsonSecret;
77
85
  async function ensureSecret(projectId, name, options) {
78
86
  try {
79
87
  const secret = await (0, secretManager_1.getSecret)(projectId, name);
@@ -103,7 +111,10 @@ async function ensureSecret(projectId, name, options) {
103
111
  force: options.force,
104
112
  });
105
113
  if (updateLabels) {
106
- return (0, secretManager_1.patchSecret)(projectId, secret.name, Object.assign(Object.assign({}, secret.labels), (0, secretManager_3.labels)()));
114
+ return (0, secretManager_1.patchSecret)(projectId, secret.name, {
115
+ ...secret.labels,
116
+ ...(0, secretManager_3.labels)(),
117
+ });
107
118
  }
108
119
  }
109
120
  }
@@ -116,18 +127,15 @@ async function ensureSecret(projectId, name, options) {
116
127
  }
117
128
  return await (0, secretManager_1.createSecret)(projectId, name, (0, secretManager_3.labels)());
118
129
  }
119
- exports.ensureSecret = ensureSecret;
120
130
  function of(endpoints) {
121
131
  return endpoints.reduce((envs, endpoint) => [...envs, ...(endpoint.secretEnvironmentVariables || [])], []);
122
132
  }
123
- exports.of = of;
124
133
  function getSecretVersions(endpoint) {
125
134
  return (endpoint.secretEnvironmentVariables || []).reduce((memo, { secret, version }) => {
126
135
  memo[secret] = version || "";
127
136
  return memo;
128
137
  }, {});
129
138
  }
130
- exports.getSecretVersions = getSecretVersions;
131
139
  function inUse(projectInfo, secret, endpoint) {
132
140
  const { projectId, projectNumber } = projectInfo;
133
141
  for (const sev of of([endpoint])) {
@@ -138,7 +146,6 @@ function inUse(projectInfo, secret, endpoint) {
138
146
  }
139
147
  return false;
140
148
  }
141
- exports.inUse = inUse;
142
149
  function versionInUse(projectInfo, sv, endpoint) {
143
150
  const { projectId, projectNumber } = projectInfo;
144
151
  for (const sev of of([endpoint])) {
@@ -150,7 +157,6 @@ function versionInUse(projectInfo, sv, endpoint) {
150
157
  }
151
158
  return false;
152
159
  }
153
- exports.versionInUse = versionInUse;
154
160
  async function pruneSecrets(projectInfo, endpoints) {
155
161
  const { projectId, projectNumber } = projectInfo;
156
162
  const pruneKey = (name, version) => `${name}@${version}`;
@@ -169,7 +175,7 @@ async function pruneSecrets(projectInfo, endpoints) {
169
175
  }
170
176
  if (secret.projectId === projectId || secret.projectId === projectNumber) {
171
177
  if (secret.version) {
172
- secrets.push(Object.assign(Object.assign({}, secret), { version: secret.version }));
178
+ secrets.push({ ...secret, version: secret.version });
173
179
  }
174
180
  }
175
181
  }
@@ -190,7 +196,6 @@ async function pruneSecrets(projectInfo, endpoints) {
190
196
  .map((key) => key.split("@"))
191
197
  .map(([secret, version]) => ({ projectId, version, secret, key: secret }));
192
198
  }
193
- exports.pruneSecrets = pruneSecrets;
194
199
  async function pruneAndDestroySecrets(projectInfo, endpoints) {
195
200
  const { projectId, projectNumber } = projectInfo;
196
201
  logger_1.logger.debug("Pruning secrets to find unused secret versions...");
@@ -216,7 +221,6 @@ async function pruneAndDestroySecrets(projectInfo, endpoints) {
216
221
  }
217
222
  return { destroyed, erred };
218
223
  }
219
- exports.pruneAndDestroySecrets = pruneAndDestroySecrets;
220
224
  async function updateEndpointSecret(projectInfo, secretVersion, endpoint) {
221
225
  const { projectId, projectNumber } = projectInfo;
222
226
  if (!inUse(projectInfo, secretVersion.secret, endpoint)) {
@@ -224,7 +228,7 @@ async function updateEndpointSecret(projectInfo, secretVersion, endpoint) {
224
228
  }
225
229
  const updatedSevs = [];
226
230
  for (const sev of of([endpoint])) {
227
- const updatedSev = Object.assign({}, sev);
231
+ const updatedSev = { ...sev };
228
232
  if ((updatedSev.projectId === projectId || updatedSev.projectId === projectNumber) &&
229
233
  updatedSev.secret === secretVersion.secret.name) {
230
234
  updatedSev.version = secretVersion.versionId;
@@ -239,13 +243,25 @@ async function updateEndpointSecret(projectInfo, secretVersion, endpoint) {
239
243
  entryPoint: fn.entryPoint,
240
244
  secretEnvironmentVariables: updatedSevs,
241
245
  });
242
- const cfn = await poller.pollOperation(Object.assign(Object.assign({}, gcfV1PollerOptions), { operationResourceName: op.name }));
246
+ const cfn = await poller.pollOperation({
247
+ ...gcfV1PollerOptions,
248
+ operationResourceName: op.name,
249
+ });
243
250
  return gcfV1.endpointFromFunction(cfn);
244
251
  }
245
252
  else if (endpoint.platform === "gcfv2") {
246
253
  const fn = gcfV2.functionFromEndpoint(endpoint);
247
- const op = await gcfV2.updateFunction(Object.assign(Object.assign({}, fn), { serviceConfig: Object.assign(Object.assign({}, fn.serviceConfig), { secretEnvironmentVariables: updatedSevs }) }));
248
- const cfn = await poller.pollOperation(Object.assign(Object.assign({}, gcfV2PollerOptions), { operationResourceName: op.name }));
254
+ const op = await gcfV2.updateFunction({
255
+ ...fn,
256
+ serviceConfig: {
257
+ ...fn.serviceConfig,
258
+ secretEnvironmentVariables: updatedSevs,
259
+ },
260
+ });
261
+ const cfn = await poller.pollOperation({
262
+ ...gcfV2PollerOptions,
263
+ operationResourceName: op.name,
264
+ });
249
265
  return gcfV2.endpointFromFunction(cfn);
250
266
  }
251
267
  else if (endpoint.platform === "run") {
@@ -255,7 +271,6 @@ async function updateEndpointSecret(projectInfo, secretVersion, endpoint) {
255
271
  (0, functional_1.assertExhaustive)(endpoint.platform);
256
272
  }
257
273
  }
258
- exports.updateEndpointSecret = updateEndpointSecret;
259
274
  async function describeSecret(key, options) {
260
275
  const projectId = (0, projectUtils_1.needProjectId)(options);
261
276
  const versions = await (0, secretManager_1.listSecretVersions)(projectId, key);
@@ -269,4 +284,3 @@ async function describeSecret(key, options) {
269
284
  logger_1.logger.info(table.toString());
270
285
  return { secrets: versions };
271
286
  }
272
- exports.describeSecret = describeSecret;
@@ -1,6 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseUnsetArgs = exports.parseSetArgs = exports.materializeAll = exports.materializeConfig = exports.setVariablesRecursive = exports.getFirebaseConfig = exports.getAppEngineLocation = exports.idsToVarName = exports.varNameToIds = exports.ensureApi = exports.ensureLegacyRuntimeConfigCommandsEnabled = exports.logFunctionsConfigDeprecationWarning = exports.getFunctionsConfigDeprecationMessage = exports.RESERVED_NAMESPACES = void 0;
3
+ exports.RESERVED_NAMESPACES = void 0;
4
+ exports.getFunctionsConfigDeprecationMessage = getFunctionsConfigDeprecationMessage;
5
+ exports.logFunctionsConfigDeprecationWarning = logFunctionsConfigDeprecationWarning;
6
+ exports.ensureLegacyRuntimeConfigCommandsEnabled = ensureLegacyRuntimeConfigCommandsEnabled;
7
+ exports.ensureApi = ensureApi;
8
+ exports.varNameToIds = varNameToIds;
9
+ exports.idsToVarName = idsToVarName;
10
+ exports.getAppEngineLocation = getAppEngineLocation;
11
+ exports.getFirebaseConfig = getFirebaseConfig;
12
+ exports.setVariablesRecursive = setVariablesRecursive;
13
+ exports.materializeConfig = materializeConfig;
14
+ exports.materializeAll = materializeAll;
15
+ exports.parseSetArgs = parseSetArgs;
16
+ exports.parseUnsetArgs = parseUnsetArgs;
4
17
  const _ = require("lodash");
5
18
  const clc = require("colorette");
6
19
  const api_1 = require("./api");
@@ -37,18 +50,15 @@ To run this legacy command temporarily, run the following command and try again:
37
50
  function getFunctionsConfigDeprecationMessage() {
38
51
  return FUNCTIONS_CONFIG_DEPRECATION_MESSAGE;
39
52
  }
40
- exports.getFunctionsConfigDeprecationMessage = getFunctionsConfigDeprecationMessage;
41
53
  function logFunctionsConfigDeprecationWarning() {
42
54
  (0, utils_1.logWarningToStderr)(FUNCTIONS_CONFIG_DEPRECATION_MESSAGE);
43
55
  }
44
- exports.logFunctionsConfigDeprecationWarning = logFunctionsConfigDeprecationWarning;
45
56
  function ensureLegacyRuntimeConfigCommandsEnabled() {
46
57
  if (experiments.isEnabled(LEGACY_RUNTIME_CONFIG_EXPERIMENT)) {
47
58
  return;
48
59
  }
49
60
  throw new error_1.FirebaseError(LEGACY_GUIDANCE_MESSAGE, { exit: 1 });
50
61
  }
51
- exports.ensureLegacyRuntimeConfigCommandsEnabled = ensureLegacyRuntimeConfigCommandsEnabled;
52
62
  function keyToIds(key) {
53
63
  const keyParts = key.split(".");
54
64
  const variable = keyParts.slice(1).join("/");
@@ -73,18 +83,15 @@ async function ensureApi(options) {
73
83
  const projectId = (0, projectUtils_1.needProjectId)(options);
74
84
  return (0, ensureApiEnabled_1.ensure)(projectId, "runtimeconfig.googleapis.com", "runtimeconfig", true);
75
85
  }
76
- exports.ensureApi = ensureApi;
77
86
  function varNameToIds(varName) {
78
87
  return {
79
88
  config: varName.match(new RegExp("/configs/(.+)/variables/"))[1],
80
89
  variable: varName.match(new RegExp("/variables/(.+)"))[1],
81
90
  };
82
91
  }
83
- exports.varNameToIds = varNameToIds;
84
92
  function idsToVarName(projectId, configId, varId) {
85
93
  return ["projects", projectId, "configs", configId, "variables", varId].join("/");
86
94
  }
87
- exports.idsToVarName = idsToVarName;
88
95
  function getAppEngineLocation(config) {
89
96
  let appEngineLocation = config.locationId;
90
97
  if (appEngineLocation && appEngineLocation.match(/[^\d]$/)) {
@@ -92,13 +99,11 @@ function getAppEngineLocation(config) {
92
99
  }
93
100
  return appEngineLocation || "us-central1";
94
101
  }
95
- exports.getAppEngineLocation = getAppEngineLocation;
96
102
  async function getFirebaseConfig(options) {
97
103
  const projectId = (0, projectUtils_1.needProjectId)(options);
98
104
  const response = await apiClient.get(`/v1beta1/projects/${projectId}/adminSdkConfig`);
99
105
  return response.body;
100
106
  }
101
- exports.getFirebaseConfig = getFirebaseConfig;
102
107
  async function setVariablesRecursive(projectId, configId, varPath, val) {
103
108
  let parsed = val;
104
109
  if (typeof val === "string") {
@@ -116,7 +121,6 @@ async function setVariablesRecursive(projectId, configId, varPath, val) {
116
121
  }
117
122
  return setVariable(projectId, configId, varPath, val);
118
123
  }
119
- exports.setVariablesRecursive = setVariablesRecursive;
120
124
  async function materializeConfig(configName, output) {
121
125
  const materializeVariable = async function (varName) {
122
126
  const variable = await runtimeconfig.variables.get(varName);
@@ -133,7 +137,6 @@ async function materializeConfig(configName, output) {
133
137
  await traverseVariables(variables);
134
138
  return output;
135
139
  }
136
- exports.materializeConfig = materializeConfig;
137
140
  async function materializeAll(projectId) {
138
141
  const output = {};
139
142
  const configs = await runtimeconfig.configs.list(projectId);
@@ -148,7 +151,6 @@ async function materializeAll(projectId) {
148
151
  }));
149
152
  return output;
150
153
  }
151
- exports.materializeAll = materializeAll;
152
154
  function parseSetArgs(args) {
153
155
  const parsed = [];
154
156
  for (const arg of args) {
@@ -173,7 +175,6 @@ function parseSetArgs(args) {
173
175
  }
174
176
  return parsed;
175
177
  }
176
- exports.parseSetArgs = parseSetArgs;
177
178
  function parseUnsetArgs(args) {
178
179
  const parsed = [];
179
180
  let splitArgs = [];
@@ -192,4 +193,3 @@ function parseUnsetArgs(args) {
192
193
  }
193
194
  return parsed;
194
195
  }
195
- exports.parseUnsetArgs = parseUnsetArgs;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.functionsConfigClone = void 0;
3
+ exports.functionsConfigClone = functionsConfigClone;
4
4
  const _ = require("lodash");
5
5
  const clc = require("colorette");
6
6
  const error_1 = require("./error");
@@ -65,4 +65,3 @@ async function functionsConfigClone(fromProject, toProject, only, except = []) {
65
65
  }));
66
66
  });
67
67
  }
68
- exports.functionsConfigClone = functionsConfigClone;
@@ -19,7 +19,6 @@ const localFunction_2 = require("./localFunction");
19
19
  const projectUtils_1 = require("./projectUtils");
20
20
  const serveFunctions = new functions_1.FunctionsServer();
21
21
  const actionFunction = async (options) => {
22
- var _a, _b, _c, _d, _e, _f;
23
22
  if (typeof options.port === "string") {
24
23
  options.port = parseInt(options.port, 10);
25
24
  }
@@ -46,8 +45,8 @@ const actionFunction = async (options) => {
46
45
  utils.logLabeledWarning("functions", `You are already running the Cloud Functions emulator on port ${functionsInfo.port}. Running the emulator and the Functions shell simultaenously can result in unexpected behavior.`);
47
46
  }
48
47
  else if (!options.port) {
49
- port = (_c = (_b = (_a = options.config.src.emulators) === null || _a === void 0 ? void 0 : _a.functions) === null || _b === void 0 ? void 0 : _b.port) !== null && _c !== void 0 ? _c : port;
50
- host = (_f = (_e = (_d = options.config.src.emulators) === null || _d === void 0 ? void 0 : _d.functions) === null || _e === void 0 ? void 0 : _e.host) !== null && _f !== void 0 ? _f : host;
48
+ port = options.config.src.emulators?.functions?.port ?? port;
49
+ host = options.config.src.emulators?.functions?.host ?? host;
51
50
  options.host = host;
52
51
  }
53
52
  const listen = (await (0, portUtils_1.resolveHostAndAssignPorts)({
@@ -1,6 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getNextRolloutId = exports.ensureApiEnabled = exports.listLocations = exports.updateTraffic = exports.listRollouts = exports.createRollout = exports.createBuild = exports.listBuilds = exports.getBuild = exports.deleteBackend = exports.listBackends = exports.listDomains = exports.getTraffic = exports.getBackend = exports.createBackend = exports.parseBackendName = exports.serviceAgentEmail = exports.client = exports.API_VERSION = void 0;
3
+ exports.client = exports.API_VERSION = void 0;
4
+ exports.serviceAgentEmail = serviceAgentEmail;
5
+ exports.parseBackendName = parseBackendName;
6
+ exports.createBackend = createBackend;
7
+ exports.getBackend = getBackend;
8
+ exports.getTraffic = getTraffic;
9
+ exports.listDomains = listDomains;
10
+ exports.listBackends = listBackends;
11
+ exports.deleteBackend = deleteBackend;
12
+ exports.getBuild = getBuild;
13
+ exports.listBuilds = listBuilds;
14
+ exports.createBuild = createBuild;
15
+ exports.createRollout = createRollout;
16
+ exports.listRollouts = listRollouts;
17
+ exports.updateTraffic = updateTraffic;
18
+ exports.listLocations = listLocations;
19
+ exports.ensureApiEnabled = ensureApiEnabled;
20
+ exports.getNextRolloutId = getNextRolloutId;
4
21
  const proto = require("../gcp/proto");
5
22
  const apiv2_1 = require("../apiv2");
6
23
  const projectUtils_1 = require("../projectUtils");
@@ -23,37 +40,36 @@ const P4SA_DOMAIN = (0, api_1.apphostingP4SADomain)();
23
40
  function serviceAgentEmail(projectNumber) {
24
41
  return `service-${projectNumber}@${P4SA_DOMAIN}`;
25
42
  }
26
- exports.serviceAgentEmail = serviceAgentEmail;
27
43
  function parseBackendName(backendName) {
28
44
  const [, projectName, , location, , id] = backendName.split("/");
29
45
  return { projectName, location, id };
30
46
  }
31
- exports.parseBackendName = parseBackendName;
32
47
  async function createBackend(projectId, location, backendReqBoby, backendId) {
33
- const res = await exports.client.post(`projects/${projectId}/locations/${location}/backends`, Object.assign(Object.assign({}, backendReqBoby), { labels: Object.assign(Object.assign({}, backendReqBoby.labels), deploymentTool.labels()) }), { queryParams: { backendId } });
48
+ const res = await exports.client.post(`projects/${projectId}/locations/${location}/backends`, {
49
+ ...backendReqBoby,
50
+ labels: {
51
+ ...backendReqBoby.labels,
52
+ ...deploymentTool.labels(),
53
+ },
54
+ }, { queryParams: { backendId } });
34
55
  return res.body;
35
56
  }
36
- exports.createBackend = createBackend;
37
57
  async function getBackend(projectId, location, backendId) {
38
58
  const name = `projects/${projectId}/locations/${location}/backends/${backendId}`;
39
59
  const res = await exports.client.get(name);
40
60
  return res.body;
41
61
  }
42
- exports.getBackend = getBackend;
43
62
  async function getTraffic(projectId, location, backendId) {
44
63
  const name = `projects/${projectId}/locations/${location}/backends/${backendId}/traffic`;
45
64
  const res = await exports.client.get(name);
46
65
  return res.body;
47
66
  }
48
- exports.getTraffic = getTraffic;
49
67
  async function listDomains(projectId, location, backendId) {
50
68
  const name = `projects/${projectId}/locations/${location}/backends/${backendId}/domains`;
51
69
  const res = await exports.client.get(name, { queryParams: { pageSize: 100 } });
52
70
  return Array.isArray(res.body.domains) ? res.body.domains : [];
53
71
  }
54
- exports.listDomains = listDomains;
55
72
  async function listBackends(projectId, location) {
56
- var _a;
57
73
  const name = `projects/${projectId}/locations/${location}/backends`;
58
74
  let pageToken;
59
75
  const res = {
@@ -64,27 +80,23 @@ async function listBackends(projectId, location) {
64
80
  const queryParams = pageToken ? { pageToken } : {};
65
81
  const int = await exports.client.get(name, { queryParams });
66
82
  res.backends.push(...(int.body.backends || []));
67
- (_a = res.unreachable) === null || _a === void 0 ? void 0 : _a.push(...(int.body.unreachable || []));
83
+ res.unreachable?.push(...(int.body.unreachable || []));
68
84
  pageToken = int.body.nextPageToken;
69
85
  } while (pageToken);
70
86
  res.unreachable = [...new Set(res.unreachable)];
71
87
  return res;
72
88
  }
73
- exports.listBackends = listBackends;
74
89
  async function deleteBackend(projectId, location, backendId) {
75
90
  const name = `projects/${projectId}/locations/${location}/backends/${backendId}`;
76
91
  const res = await exports.client.delete(name, { queryParams: { force: "true" } });
77
92
  return res.body;
78
93
  }
79
- exports.deleteBackend = deleteBackend;
80
94
  async function getBuild(projectId, location, backendId, buildId) {
81
95
  const name = `projects/${projectId}/locations/${location}/backends/${backendId}/builds/${buildId}`;
82
96
  const res = await exports.client.get(name);
83
97
  return res.body;
84
98
  }
85
- exports.getBuild = getBuild;
86
99
  async function listBuilds(projectId, location, backendId) {
87
- var _a;
88
100
  const name = `projects/${projectId}/locations/${location}/backends/${backendId}/builds`;
89
101
  let pageToken;
90
102
  const res = {
@@ -95,23 +107,32 @@ async function listBuilds(projectId, location, backendId) {
95
107
  const queryParams = pageToken ? { pageToken } : {};
96
108
  const int = await exports.client.get(name, { queryParams });
97
109
  res.builds.push(...(int.body.builds || []));
98
- (_a = res.unreachable) === null || _a === void 0 ? void 0 : _a.push(...(int.body.unreachable || []));
110
+ res.unreachable?.push(...(int.body.unreachable || []));
99
111
  pageToken = int.body.nextPageToken;
100
112
  } while (pageToken);
101
113
  res.unreachable = [...new Set(res.unreachable)];
102
114
  return res;
103
115
  }
104
- exports.listBuilds = listBuilds;
105
116
  async function createBuild(projectId, location, backendId, buildId, buildInput) {
106
- const res = await exports.client.post(`projects/${projectId}/locations/${location}/backends/${backendId}/builds`, Object.assign(Object.assign({}, buildInput), { labels: Object.assign(Object.assign({}, buildInput.labels), deploymentTool.labels()) }), { queryParams: { buildId } });
117
+ const res = await exports.client.post(`projects/${projectId}/locations/${location}/backends/${backendId}/builds`, {
118
+ ...buildInput,
119
+ labels: {
120
+ ...buildInput.labels,
121
+ ...deploymentTool.labels(),
122
+ },
123
+ }, { queryParams: { buildId } });
107
124
  return res.body;
108
125
  }
109
- exports.createBuild = createBuild;
110
126
  async function createRollout(projectId, location, backendId, rolloutId, rollout, validateOnly = false) {
111
- const res = await exports.client.post(`projects/${projectId}/locations/${location}/backends/${backendId}/rollouts`, Object.assign(Object.assign({}, rollout), { labels: Object.assign(Object.assign({}, rollout.labels), deploymentTool.labels()) }), { queryParams: { rolloutId, validateOnly: validateOnly ? "true" : "false" } });
127
+ const res = await exports.client.post(`projects/${projectId}/locations/${location}/backends/${backendId}/rollouts`, {
128
+ ...rollout,
129
+ labels: {
130
+ ...rollout.labels,
131
+ ...deploymentTool.labels(),
132
+ },
133
+ }, { queryParams: { rolloutId, validateOnly: validateOnly ? "true" : "false" } });
112
134
  return res.body;
113
135
  }
114
- exports.createRollout = createRollout;
115
136
  async function listRollouts(projectId, location, backendId) {
116
137
  const name = `projects/${projectId}/locations/${location}/backends/${backendId}/rollouts`;
117
138
  let pageToken = undefined;
@@ -129,19 +150,17 @@ async function listRollouts(projectId, location, backendId) {
129
150
  res.unreachable = [...new Set(res.unreachable)];
130
151
  return res;
131
152
  }
132
- exports.listRollouts = listRollouts;
133
153
  async function updateTraffic(projectId, location, backendId, traffic) {
134
154
  const fieldMasks = proto.fieldMasks(traffic, "rolloutPolicy");
135
155
  const queryParams = {
136
156
  updateMask: fieldMasks.join(","),
137
157
  };
138
158
  const name = `projects/${projectId}/locations/${location}/backends/${backendId}/traffic`;
139
- const res = await exports.client.patch(name, Object.assign(Object.assign({}, traffic), { name }), {
159
+ const res = await exports.client.patch(name, { ...traffic, name }, {
140
160
  queryParams,
141
161
  });
142
162
  return res.body;
143
163
  }
144
- exports.updateTraffic = updateTraffic;
145
164
  async function listLocations(projectId) {
146
165
  let pageToken = undefined;
147
166
  let locations = [];
@@ -157,14 +176,11 @@ async function listLocations(projectId) {
157
176
  } while (pageToken);
158
177
  return locations;
159
178
  }
160
- exports.listLocations = listLocations;
161
179
  async function ensureApiEnabled(options) {
162
180
  const projectId = (0, projectUtils_1.needProjectId)(options);
163
181
  return await (0, ensureApiEnabled_1.ensure)(projectId, (0, api_1.apphostingOrigin)(), "app hosting", true);
164
182
  }
165
- exports.ensureApiEnabled = ensureApiEnabled;
166
183
  async function getNextRolloutId(projectId, location, backendId, counter) {
167
- var _a, _b;
168
184
  const date = new Date();
169
185
  const year = date.getUTCFullYear();
170
186
  const month = String(date.getUTCMonth() + 1).padStart(2, "0");
@@ -175,7 +191,7 @@ async function getNextRolloutId(projectId, location, backendId, counter) {
175
191
  const rolloutsPromise = exports.listRollouts(projectId, location, backendId);
176
192
  const buildsPromise = exports.listBuilds(projectId, location, backendId);
177
193
  const [rollouts, builds] = await Promise.all([rolloutsPromise, buildsPromise]);
178
- if (((_a = builds.unreachable) === null || _a === void 0 ? void 0 : _a.includes(location)) || ((_b = rollouts.unreachable) === null || _b === void 0 ? void 0 : _b.includes(location))) {
194
+ if (builds.unreachable?.includes(location) || rollouts.unreachable?.includes(location)) {
179
195
  throw new error_1.FirebaseError(`Firebase App Hosting is currently unreachable in location ${location}`);
180
196
  }
181
197
  const test = new RegExp(`projects/${projectId}/locations/${location}/backends/${backendId}/(rollouts|builds)/build-${year}-${month}-${day}-(\\d+)`);
@@ -196,4 +212,3 @@ async function getNextRolloutId(projectId, location, backendId, counter) {
196
212
  const highest = Math.max(highestId(builds.builds), highestId(rollouts.rollouts));
197
213
  return `build-${year}-${month}-${day}-${String(highest + 1).padStart(3, "0")}`;
198
214
  }
199
- exports.getNextRolloutId = getNextRolloutId;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.testEnvironmentCatalog = exports.client = exports.API_VERSION = void 0;
3
+ exports.client = exports.API_VERSION = void 0;
4
+ exports.testEnvironmentCatalog = testEnvironmentCatalog;
4
5
  const apiv2_1 = require("../apiv2");
5
6
  const api_1 = require("../api");
6
7
  exports.API_VERSION = "v1";
@@ -15,4 +16,3 @@ async function testEnvironmentCatalog(projectId, environmentType) {
15
16
  const res = await exports.client.get(name, { queryParams });
16
17
  return res.body;
17
18
  }
18
- exports.testEnvironmentCatalog = testEnvironmentCatalog;
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateRepository = exports.getRepository = exports.deletePackage = exports.ensureApiEnabled = exports.API_VERSION = void 0;
3
+ exports.API_VERSION = void 0;
4
+ exports.ensureApiEnabled = ensureApiEnabled;
5
+ exports.deletePackage = deletePackage;
6
+ exports.getRepository = getRepository;
7
+ exports.updateRepository = updateRepository;
4
8
  const apiv2_1 = require("../apiv2");
5
9
  const api_1 = require("../api");
6
10
  const metaprogramming_1 = require("../metaprogramming");
@@ -15,18 +19,15 @@ const client = new apiv2_1.Client({
15
19
  function ensureApiEnabled(projectId) {
16
20
  return api.ensure(projectId, (0, api_1.artifactRegistryDomain)(), "artifactregistry", true);
17
21
  }
18
- exports.ensureApiEnabled = ensureApiEnabled;
19
22
  (0, metaprogramming_1.assertImplements)();
20
23
  async function deletePackage(name) {
21
24
  const res = await client.delete(name);
22
25
  return res.body;
23
26
  }
24
- exports.deletePackage = deletePackage;
25
27
  async function getRepository(repoPath) {
26
28
  const res = await client.get(repoPath);
27
29
  return res.body;
28
30
  }
29
- exports.getRepository = getRepository;
30
31
  async function updateRepository(repo) {
31
32
  const updateMask = proto.fieldMasks(repo, "cleanupPolicies", "cleanupPolicyDryRun", "labels");
32
33
  if (updateMask.length === 0) {
@@ -38,4 +39,3 @@ async function updateRepository(repo) {
38
39
  });
39
40
  return res.body;
40
41
  }
41
- exports.updateRepository = updateRepository;
package/lib/gcp/auth.js CHANGED
@@ -1,6 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setDenySmsRegionPolicy = exports.setAllowSmsRegionPolicy = exports.setCustomClaim = exports.toggleUserEnablement = exports.listUsers = exports.findUser = exports.updateAuthDomains = exports.getAuthDomains = void 0;
3
+ exports.getAuthDomains = getAuthDomains;
4
+ exports.updateAuthDomains = updateAuthDomains;
5
+ exports.findUser = findUser;
6
+ exports.listUsers = listUsers;
7
+ exports.toggleUserEnablement = toggleUserEnablement;
8
+ exports.setCustomClaim = setCustomClaim;
9
+ exports.setAllowSmsRegionPolicy = setAllowSmsRegionPolicy;
10
+ exports.setDenySmsRegionPolicy = setDenySmsRegionPolicy;
4
11
  const apiv2_1 = require("../apiv2");
5
12
  const api_1 = require("../api");
6
13
  const apiClient = new apiv2_1.Client({ urlPrefix: (0, api_1.identityOrigin)(), auth: true });
@@ -8,7 +15,6 @@ async function getAuthDomains(project) {
8
15
  const res = await apiClient.get(`/admin/v2/projects/${project}/config`, { headers: { "x-goog-user-project": project } });
9
16
  return res.body.authorizedDomains;
10
17
  }
11
- exports.getAuthDomains = getAuthDomains;
12
18
  async function updateAuthDomains(project, authDomains) {
13
19
  const res = await apiClient.patch(`/admin/v2/projects/${project}/config`, { authorizedDomains: authDomains }, {
14
20
  queryParams: { update_mask: "authorizedDomains" },
@@ -16,9 +22,7 @@ async function updateAuthDomains(project, authDomains) {
16
22
  });
17
23
  return res.body.authorizedDomains;
18
24
  }
19
- exports.updateAuthDomains = updateAuthDomains;
20
25
  async function findUser(project, email, phone, uid) {
21
- var _a;
22
26
  const expression = {
23
27
  email,
24
28
  phoneNumber: phone,
@@ -28,7 +32,7 @@ async function findUser(project, email, phone, uid) {
28
32
  expression: [expression],
29
33
  limit: "1",
30
34
  });
31
- if (!((_a = res.body.userInfo) === null || _a === void 0 ? void 0 : _a.length)) {
35
+ if (!res.body.userInfo?.length) {
32
36
  throw new Error("No users found");
33
37
  }
34
38
  const modifiedUserInfo = res.body.userInfo.map((ui) => {
@@ -38,7 +42,6 @@ async function findUser(project, email, phone, uid) {
38
42
  });
39
43
  return modifiedUserInfo[0];
40
44
  }
41
- exports.findUser = findUser;
42
45
  async function listUsers(project, limit) {
43
46
  let queryLimit = limit;
44
47
  let offset = 0;
@@ -67,7 +70,6 @@ async function listUsers(project, limit) {
67
70
  }
68
71
  return userInfo;
69
72
  }
70
- exports.listUsers = listUsers;
71
73
  async function toggleUserEnablement(project, uid, disabled) {
72
74
  const res = await apiClient.post("/v1/accounts:update", {
73
75
  disableUser: disabled,
@@ -76,19 +78,18 @@ async function toggleUserEnablement(project, uid, disabled) {
76
78
  });
77
79
  return res.status === 200;
78
80
  }
79
- exports.toggleUserEnablement = toggleUserEnablement;
80
81
  async function setCustomClaim(project, uid, claim, options) {
81
82
  let user = await findUser(project, undefined, undefined, uid);
82
83
  if (user.uid !== uid) {
83
84
  throw new Error(`Could not find ${uid} in the auth db, please check the uid again.`);
84
85
  }
85
86
  let reqClaim = JSON.stringify(claim);
86
- if (options === null || options === void 0 ? void 0 : options.merge) {
87
+ if (options?.merge) {
87
88
  let attributeJson = new Map();
88
89
  if (user.customAttributes !== undefined && user.customAttributes !== "") {
89
90
  attributeJson = JSON.parse(user.customAttributes);
90
91
  }
91
- reqClaim = JSON.stringify(Object.assign(Object.assign({}, attributeJson), claim));
92
+ reqClaim = JSON.stringify({ ...attributeJson, ...claim });
92
93
  }
93
94
  const res = await apiClient.post("/v1/accounts:update", {
94
95
  customAttributes: reqClaim,
@@ -101,7 +102,6 @@ async function setCustomClaim(project, uid, claim, options) {
101
102
  user = await findUser(project, undefined, undefined, uid);
102
103
  return user;
103
104
  }
104
- exports.setCustomClaim = setCustomClaim;
105
105
  async function setAllowSmsRegionPolicy(project, countryCodes) {
106
106
  const res = await apiClient.patch(`/admin/v2/projects/${project}/config?updateMask=sms_region_config`, {
107
107
  sms_region_config: {
@@ -115,7 +115,6 @@ async function setAllowSmsRegionPolicy(project, countryCodes) {
115
115
  }
116
116
  return true;
117
117
  }
118
- exports.setAllowSmsRegionPolicy = setAllowSmsRegionPolicy;
119
118
  async function setDenySmsRegionPolicy(project, countryCodes) {
120
119
  const res = await apiClient.patch(`/admin/v2/projects/${project}/config?updateMask=sms_region_config`, {
121
120
  sms_region_config: {
@@ -129,4 +128,3 @@ async function setDenySmsRegionPolicy(project, countryCodes) {
129
128
  }
130
129
  return true;
131
130
  }
132
- exports.setDenySmsRegionPolicy = setDenySmsRegionPolicy;