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,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.populateDefaultParams = exports.isSystemParam = exports.readEnvFile = exports.promptForNewParams = exports.getParamsForUpdate = exports.getParams = exports.setNewDefaults = exports.buildBindingOptionsWithBaseValue = exports.getBaseParamBindings = void 0;
3
+ exports.getBaseParamBindings = getBaseParamBindings;
4
+ exports.buildBindingOptionsWithBaseValue = buildBindingOptionsWithBaseValue;
5
+ exports.setNewDefaults = setNewDefaults;
6
+ exports.getParams = getParams;
7
+ exports.getParamsForUpdate = getParamsForUpdate;
8
+ exports.promptForNewParams = promptForNewParams;
9
+ exports.readEnvFile = readEnvFile;
10
+ exports.isSystemParam = isSystemParam;
11
+ exports.populateDefaultParams = populateDefaultParams;
4
12
  const path = require("path");
5
13
  const clc = require("colorette");
6
14
  const fs = require("fs-extra");
@@ -15,19 +23,23 @@ const NONINTERACTIVE_ERROR_MESSAGE = "As of firebase-tools@11, `ext:install`, `e
15
23
  function getBaseParamBindings(params) {
16
24
  let ret = {};
17
25
  for (const [k, v] of Object.entries(params)) {
18
- ret = Object.assign(Object.assign({}, ret), { [k]: v.baseValue });
26
+ ret = {
27
+ ...ret,
28
+ ...{ [k]: v.baseValue },
29
+ };
19
30
  }
20
31
  return ret;
21
32
  }
22
- exports.getBaseParamBindings = getBaseParamBindings;
23
33
  function buildBindingOptionsWithBaseValue(baseParams) {
24
34
  let paramOptions = {};
25
35
  for (const [k, v] of Object.entries(baseParams)) {
26
- paramOptions = Object.assign(Object.assign({}, paramOptions), { [k]: { baseValue: v } });
36
+ paramOptions = {
37
+ ...paramOptions,
38
+ ...{ [k]: { baseValue: v } },
39
+ };
27
40
  }
28
41
  return paramOptions;
29
42
  }
30
- exports.buildBindingOptionsWithBaseValue = buildBindingOptionsWithBaseValue;
31
43
  function setNewDefaults(params, newDefaults) {
32
44
  for (const param of params) {
33
45
  if (newDefaults[param.param]) {
@@ -40,7 +52,6 @@ function setNewDefaults(params, newDefaults) {
40
52
  }
41
53
  return params;
42
54
  }
43
- exports.setNewDefaults = setNewDefaults;
44
55
  async function getParams(args) {
45
56
  let params;
46
57
  if (args.nonInteractive) {
@@ -58,7 +69,6 @@ async function getParams(args) {
58
69
  }
59
70
  return params;
60
71
  }
61
- exports.getParams = getParams;
62
72
  async function getParamsForUpdate(args) {
63
73
  let params;
64
74
  if (args.nonInteractive) {
@@ -75,9 +85,7 @@ async function getParamsForUpdate(args) {
75
85
  }
76
86
  return params;
77
87
  }
78
- exports.getParamsForUpdate = getParamsForUpdate;
79
88
  async function promptForNewParams(args) {
80
- var _a, _b;
81
89
  const newParamBindingOptions = buildBindingOptionsWithBaseValue(args.currentParams);
82
90
  const firebaseProjectParams = await (0, extensionsHelper_1.getFirebaseProjectParams)(args.projectId);
83
91
  const sameParam = (param1) => (param2) => {
@@ -86,8 +94,8 @@ async function promptForNewParams(args) {
86
94
  const paramDiff = (left, right) => {
87
95
  return left.filter((aLeft) => !right.find(sameParam(aLeft)));
88
96
  };
89
- let combinedOldParams = args.spec.params.concat((_a = args.spec.systemParams.filter((p) => !p.advanced)) !== null && _a !== void 0 ? _a : []);
90
- let combinedNewParams = args.newSpec.params.concat((_b = args.newSpec.systemParams.filter((p) => !p.advanced)) !== null && _b !== void 0 ? _b : []);
97
+ let combinedOldParams = args.spec.params.concat(args.spec.systemParams.filter((p) => !p.advanced) ?? []);
98
+ let combinedNewParams = args.newSpec.params.concat(args.newSpec.systemParams.filter((p) => !p.advanced) ?? []);
91
99
  if (combinedOldParams.some((p) => p.param === "LOCATION") &&
92
100
  combinedNewParams.some((p) => p.param === "firebaseextensions.v1beta.function/location") &&
93
101
  !!args.currentParams["LOCATION"]) {
@@ -124,7 +132,6 @@ async function promptForNewParams(args) {
124
132
  }
125
133
  return newParamBindingOptions;
126
134
  }
127
- exports.promptForNewParams = promptForNewParams;
128
135
  function readEnvFile(envPath) {
129
136
  const buf = fs.readFileSync(path.resolve(envPath), "utf8");
130
137
  const result = env.parse(buf.toString().trim());
@@ -133,18 +140,14 @@ function readEnvFile(envPath) {
133
140
  }
134
141
  return result.envs;
135
142
  }
136
- exports.readEnvFile = readEnvFile;
137
143
  function isSystemParam(paramName) {
138
144
  const regex = /^firebaseextensions\.[a-zA-Z0-9\.]*\//;
139
145
  return regex.test(paramName);
140
146
  }
141
- exports.isSystemParam = isSystemParam;
142
147
  function populateDefaultParams(params, spec) {
143
- var _a;
144
- const ret = Object.assign({}, params);
148
+ const ret = { ...params };
145
149
  for (const p of spec.params) {
146
- ret[p.param] = (_a = ret[p.param]) !== null && _a !== void 0 ? _a : p.default;
150
+ ret[p.param] = ret[p.param] ?? p.default;
147
151
  }
148
152
  return ret;
149
153
  }
150
- exports.populateDefaultParams = populateDefaultParams;
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getUsedProducts = exports.bulkCheckProductsProvisioned = exports.checkProductsProvisioned = exports.DeferredProduct = void 0;
3
+ exports.DeferredProduct = void 0;
4
+ exports.checkProductsProvisioned = checkProductsProvisioned;
5
+ exports.bulkCheckProductsProvisioned = bulkCheckProductsProvisioned;
6
+ exports.getUsedProducts = getUsedProducts;
4
7
  const marked_1 = require("marked");
5
8
  const api_1 = require("../api");
6
9
  const apiv2_1 = require("../apiv2");
@@ -12,12 +15,11 @@ var DeferredProduct;
12
15
  (function (DeferredProduct) {
13
16
  DeferredProduct[DeferredProduct["STORAGE"] = 0] = "STORAGE";
14
17
  DeferredProduct[DeferredProduct["AUTH"] = 1] = "AUTH";
15
- })(DeferredProduct = exports.DeferredProduct || (exports.DeferredProduct = {}));
18
+ })(DeferredProduct || (exports.DeferredProduct = DeferredProduct = {}));
16
19
  async function checkProductsProvisioned(projectId, spec) {
17
20
  const usedProducts = getUsedProducts(spec);
18
21
  await checkProducts(projectId, usedProducts);
19
22
  }
20
- exports.checkProductsProvisioned = checkProductsProvisioned;
21
23
  async function bulkCheckProductsProvisioned(projectId, instanceSpecs) {
22
24
  const usedProducts = await Promise.all(instanceSpecs.map(async (i) => {
23
25
  const extensionSpec = await (0, planner_1.getExtensionSpec)(i);
@@ -25,7 +27,6 @@ async function bulkCheckProductsProvisioned(projectId, instanceSpecs) {
25
27
  }));
26
28
  await checkProducts(projectId, [...(0, functional_1.flattenArray)(usedProducts)]);
27
29
  }
28
- exports.bulkCheckProductsProvisioned = bulkCheckProductsProvisioned;
29
30
  async function checkProducts(projectId, usedProducts) {
30
31
  const needProvisioning = [];
31
32
  let isStorageProvisionedPromise;
@@ -68,42 +69,37 @@ async function checkProducts(projectId, usedProducts) {
68
69
  }
69
70
  }
70
71
  function getUsedProducts(spec) {
71
- var _a, _b;
72
72
  const usedProducts = [];
73
- const usedApis = (_a = spec.apis) === null || _a === void 0 ? void 0 : _a.map((api) => api.apiName);
74
- const usedRoles = (_b = spec.roles) === null || _b === void 0 ? void 0 : _b.map((r) => r.role.split(".")[0]);
73
+ const usedApis = spec.apis?.map((api) => api.apiName);
74
+ const usedRoles = spec.roles?.map((r) => r.role.split(".")[0]);
75
75
  const usedTriggers = spec.resources.map((r) => getTriggerType(r.propertiesYaml));
76
- if ((usedApis === null || usedApis === void 0 ? void 0 : usedApis.includes("storage-component.googleapis.com")) ||
77
- (usedRoles === null || usedRoles === void 0 ? void 0 : usedRoles.includes("storage")) ||
78
- usedTriggers.find((t) => t === null || t === void 0 ? void 0 : t.startsWith("google.storage."))) {
76
+ if (usedApis?.includes("storage-component.googleapis.com") ||
77
+ usedRoles?.includes("storage") ||
78
+ usedTriggers.find((t) => t?.startsWith("google.storage."))) {
79
79
  usedProducts.push(DeferredProduct.STORAGE);
80
80
  }
81
- if ((usedApis === null || usedApis === void 0 ? void 0 : usedApis.includes("identitytoolkit.googleapis.com")) ||
82
- (usedRoles === null || usedRoles === void 0 ? void 0 : usedRoles.includes("firebaseauth")) ||
83
- usedTriggers.find((t) => t === null || t === void 0 ? void 0 : t.startsWith("providers/firebase.auth/"))) {
81
+ if (usedApis?.includes("identitytoolkit.googleapis.com") ||
82
+ usedRoles?.includes("firebaseauth") ||
83
+ usedTriggers.find((t) => t?.startsWith("providers/firebase.auth/"))) {
84
84
  usedProducts.push(DeferredProduct.AUTH);
85
85
  }
86
86
  return usedProducts;
87
87
  }
88
- exports.getUsedProducts = getUsedProducts;
89
88
  function getTriggerType(propertiesYaml) {
90
- var _a;
91
- return (_a = propertiesYaml === null || propertiesYaml === void 0 ? void 0 : propertiesYaml.match(/eventType:\ ([\S]+)/)) === null || _a === void 0 ? void 0 : _a[1];
89
+ return propertiesYaml?.match(/eventType:\ ([\S]+)/)?.[1];
92
90
  }
93
91
  async function isStorageProvisioned(projectId) {
94
- var _a, _b;
95
92
  const client = new apiv2_1.Client({ urlPrefix: (0, api_1.firebaseStorageOrigin)(), apiVersion: "v1beta" });
96
93
  const resp = await client.get(`/projects/${projectId}/buckets`);
97
- return !!((_b = (_a = resp.body) === null || _a === void 0 ? void 0 : _a.buckets) === null || _b === void 0 ? void 0 : _b.find((bucket) => {
94
+ return !!resp.body?.buckets?.find((bucket) => {
98
95
  const bucketResourceName = bucket.name;
99
96
  const bucketResourceNameTokens = bucketResourceName.split("/");
100
97
  const pattern = "^" + projectId + "(.[[a-z0-9]+)*.(appspot.com|firebasestorage.app)$";
101
98
  return new RegExp(pattern).test(bucketResourceNameTokens[bucketResourceNameTokens.length - 1]);
102
- }));
99
+ });
103
100
  }
104
101
  async function isAuthProvisioned(projectId) {
105
- var _a, _b;
106
102
  const client = new apiv2_1.Client({ urlPrefix: (0, api_1.firedataOrigin)(), apiVersion: "v1" });
107
103
  const resp = await client.get(`/projects/${projectId}/products`);
108
- return !!((_b = (_a = resp.body) === null || _a === void 0 ? void 0 : _a.activation) === null || _b === void 0 ? void 0 : _b.map((a) => a.service).includes("FIREBASE_AUTH"));
104
+ return !!resp.body?.activation?.map((a) => a.service).includes("FIREBASE_AUTH");
109
105
  }
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.consoleInstallLink = void 0;
3
+ exports.consoleInstallLink = consoleInstallLink;
4
4
  const api_1 = require("../api");
5
5
  function consoleInstallLink(extVersionRef) {
6
6
  return `${(0, api_1.consoleOrigin)()}/project/_/extensions/install?ref=${extVersionRef}`;
7
7
  }
8
- exports.consoleInstallLink = consoleInstallLink;
@@ -1,6 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getExtension = exports.listExtensionVersions = exports.listExtensions = exports.getExtensionVersion = exports.createExtensionVersionFromGitHubSource = exports.createExtensionVersionFromLocalSource = exports.undeprecateExtensionVersion = exports.deprecateExtensionVersion = exports.registerPublisherProfile = exports.getPublisherProfile = void 0;
3
+ exports.getPublisherProfile = getPublisherProfile;
4
+ exports.registerPublisherProfile = registerPublisherProfile;
5
+ exports.deprecateExtensionVersion = deprecateExtensionVersion;
6
+ exports.undeprecateExtensionVersion = undeprecateExtensionVersion;
7
+ exports.createExtensionVersionFromLocalSource = createExtensionVersionFromLocalSource;
8
+ exports.createExtensionVersionFromGitHubSource = createExtensionVersionFromGitHubSource;
9
+ exports.getExtensionVersion = getExtensionVersion;
10
+ exports.listExtensions = listExtensions;
11
+ exports.listExtensionVersions = listExtensionVersions;
12
+ exports.getExtension = getExtension;
4
13
  const clc = require("colorette");
5
14
  const operationPoller = require("../operation-poller");
6
15
  const refs = require("./refs");
@@ -24,7 +33,6 @@ async function getPublisherProfile(projectId, publisherId) {
24
33
  });
25
34
  return res.body;
26
35
  }
27
- exports.getPublisherProfile = getPublisherProfile;
28
36
  async function registerPublisherProfile(projectId, publisherId) {
29
37
  const res = await extensionsPublisherApiClient.patch(`/projects/${projectId}/publisherProfile`, {
30
38
  publisherId,
@@ -36,7 +44,6 @@ async function registerPublisherProfile(projectId, publisherId) {
36
44
  });
37
45
  return res.body;
38
46
  }
39
- exports.registerPublisherProfile = registerPublisherProfile;
40
47
  async function deprecateExtensionVersion(extensionRef, deprecationMessage) {
41
48
  const ref = refs.parse(extensionRef);
42
49
  try {
@@ -60,7 +67,6 @@ async function deprecateExtensionVersion(extensionRef, deprecationMessage) {
60
67
  });
61
68
  }
62
69
  }
63
- exports.deprecateExtensionVersion = deprecateExtensionVersion;
64
70
  async function undeprecateExtensionVersion(extensionRef) {
65
71
  const ref = refs.parse(extensionRef);
66
72
  try {
@@ -82,16 +88,14 @@ async function undeprecateExtensionVersion(extensionRef) {
82
88
  });
83
89
  }
84
90
  }
85
- exports.undeprecateExtensionVersion = undeprecateExtensionVersion;
86
91
  async function createExtensionVersionFromLocalSource(args) {
87
- var _a;
88
92
  const ref = refs.parse(args.extensionVersionRef);
89
93
  if (!ref.version) {
90
94
  throw new error_1.FirebaseError(`Extension version ref "${args.extensionVersionRef}" must supply a version.`);
91
95
  }
92
96
  const uploadRes = await extensionsPublisherApiClient.post(`/${refs.toExtensionName(ref)}/versions:createFromSource`, {
93
97
  versionId: ref.version,
94
- extensionRoot: (_a = args.extensionRoot) !== null && _a !== void 0 ? _a : "/",
98
+ extensionRoot: args.extensionRoot ?? "/",
95
99
  remoteArchiveSource: {
96
100
  packageUri: args.packageUri,
97
101
  },
@@ -104,7 +108,6 @@ async function createExtensionVersionFromLocalSource(args) {
104
108
  });
105
109
  return pollRes;
106
110
  }
107
- exports.createExtensionVersionFromLocalSource = createExtensionVersionFromLocalSource;
108
111
  async function createExtensionVersionFromGitHubSource(args) {
109
112
  const ref = refs.parse(args.extensionVersionRef);
110
113
  if (!ref.version) {
@@ -126,7 +129,6 @@ async function createExtensionVersionFromGitHubSource(args) {
126
129
  });
127
130
  return pollRes;
128
131
  }
129
- exports.createExtensionVersionFromGitHubSource = createExtensionVersionFromGitHubSource;
130
132
  async function getExtensionVersion(extensionVersionRef) {
131
133
  const ref = refs.parse(extensionVersionRef);
132
134
  if (!ref.version) {
@@ -149,7 +151,6 @@ async function getExtensionVersion(extensionVersionRef) {
149
151
  throw new error_1.FirebaseError(`Failed to query the extension version '${clc.bold(extensionVersionRef)}': ${err}`);
150
152
  }
151
153
  }
152
- exports.getExtensionVersion = getExtensionVersion;
153
154
  async function listExtensions(publisherId) {
154
155
  const extensions = [];
155
156
  const getNextPage = async (pageToken = "") => {
@@ -169,7 +170,6 @@ async function listExtensions(publisherId) {
169
170
  await getNextPage();
170
171
  return extensions;
171
172
  }
172
- exports.listExtensions = listExtensions;
173
173
  async function listExtensionVersions(ref, filter = "", showPrereleases = false) {
174
174
  const { publisherId, extensionId } = refs.parse(ref);
175
175
  const extensionVersions = [];
@@ -192,7 +192,6 @@ async function listExtensionVersions(ref, filter = "", showPrereleases = false)
192
192
  await getNextPage();
193
193
  return extensionVersions;
194
194
  }
195
- exports.listExtensionVersions = listExtensionVersions;
196
195
  async function getExtension(extensionRef) {
197
196
  const ref = refs.parse(extensionRef);
198
197
  try {
@@ -211,4 +210,3 @@ async function getExtension(extensionRef) {
211
210
  });
212
211
  }
213
212
  }
214
- exports.getExtension = getExtension;
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.equal = exports.toExtensionVersionName = exports.toExtensionName = exports.toExtensionVersionRef = exports.toExtensionRef = exports.parse = void 0;
3
+ exports.parse = parse;
4
+ exports.toExtensionRef = toExtensionRef;
5
+ exports.toExtensionVersionRef = toExtensionVersionRef;
6
+ exports.toExtensionName = toExtensionName;
7
+ exports.toExtensionVersionName = toExtensionVersionName;
8
+ exports.equal = equal;
4
9
  const semver = require("semver");
5
10
  const error_1 = require("../error");
6
11
  const refRegex = new RegExp(/^([^/@\n]+)\/{1}([^/@\n]+)(@{1}([^\n]+)|)$/);
@@ -20,7 +25,6 @@ function parse(refOrName) {
20
25
  }
21
26
  return ret;
22
27
  }
23
- exports.parse = parse;
24
28
  function parseRef(ref) {
25
29
  const parts = refRegex.exec(ref);
26
30
  if (parts && (parts.length === 5 || parts.length === 7)) {
@@ -53,25 +57,21 @@ function parseName(name) {
53
57
  function toExtensionRef(ref) {
54
58
  return `${ref.publisherId}/${ref.extensionId}`;
55
59
  }
56
- exports.toExtensionRef = toExtensionRef;
57
60
  function toExtensionVersionRef(ref) {
58
61
  if (!ref.version) {
59
62
  throw new error_1.FirebaseError(`Ref does not have a version`);
60
63
  }
61
64
  return `${ref.publisherId}/${ref.extensionId}@${ref.version}`;
62
65
  }
63
- exports.toExtensionVersionRef = toExtensionVersionRef;
64
66
  function toExtensionName(ref) {
65
67
  return `publishers/${ref.publisherId}/extensions/${ref.extensionId}`;
66
68
  }
67
- exports.toExtensionName = toExtensionName;
68
69
  function toExtensionVersionName(ref) {
69
70
  if (!ref.version) {
70
71
  throw new error_1.FirebaseError(`Ref does not have a version`);
71
72
  }
72
73
  return `publishers/${ref.publisherId}/extensions/${ref.extensionId}/versions/${ref.version}`;
73
74
  }
74
- exports.toExtensionVersionName = toExtensionVersionName;
75
75
  function equal(a, b) {
76
76
  return (!!a &&
77
77
  !!b &&
@@ -79,4 +79,3 @@ function equal(a, b) {
79
79
  a.extensionId === b.extensionId &&
80
80
  a.version === b.version);
81
81
  }
82
- exports.equal = equal;
@@ -1,6 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.longestCommonPrefix = exports.snakeToCamelCase = exports.lowercaseFirstLetter = exports.capitalizeFirstLetter = exports.toTitleCase = exports.getInstallPathPrefix = exports.getCodebaseDir = exports.writeSDK = exports.getCodebaseRuntime = exports.copyDirectory = exports.writeFile = exports.isTypescriptCodebase = exports.extensionMatchesAnyFilter = exports.extractExtensionsFromBuilds = exports.fixDarkBlueText = void 0;
3
+ exports.fixDarkBlueText = fixDarkBlueText;
4
+ exports.extractExtensionsFromBuilds = extractExtensionsFromBuilds;
5
+ exports.extensionMatchesAnyFilter = extensionMatchesAnyFilter;
6
+ exports.isTypescriptCodebase = isTypescriptCodebase;
7
+ exports.writeFile = writeFile;
8
+ exports.copyDirectory = copyDirectory;
9
+ exports.getCodebaseRuntime = getCodebaseRuntime;
10
+ exports.writeSDK = writeSDK;
11
+ exports.getCodebaseDir = getCodebaseDir;
12
+ exports.getInstallPathPrefix = getInstallPathPrefix;
13
+ exports.toTitleCase = toTitleCase;
14
+ exports.capitalizeFirstLetter = capitalizeFirstLetter;
15
+ exports.lowercaseFirstLetter = lowercaseFirstLetter;
16
+ exports.snakeToCamelCase = snakeToCamelCase;
17
+ exports.longestCommonPrefix = longestCommonPrefix;
4
18
  const fs = require("fs");
5
19
  const path = require("path");
6
20
  const prompt_1 = require("../../prompt");
@@ -15,7 +29,6 @@ function fixDarkBlueText(txt) {
15
29
  const BRIGHT_CYAN = "\u001b[36;1m";
16
30
  return txt.replaceAll(DARK_BLUE, BRIGHT_CYAN);
17
31
  }
18
- exports.fixDarkBlueText = fixDarkBlueText;
19
32
  function extractExtensionsFromBuilds(builds, filters) {
20
33
  const extRecords = {};
21
34
  for (const [codebase, build] of Object.entries(builds)) {
@@ -25,21 +38,19 @@ function extractExtensionsFromBuilds(builds, filters) {
25
38
  if (extRecords[id]) {
26
39
  throw new error_1.FirebaseError(`Duplicate extension id found: ${id}`);
27
40
  }
28
- extRecords[id] = Object.assign(Object.assign({}, ext), { labels: { createdBy: "SDK", codebase } });
41
+ extRecords[id] = { ...ext, labels: { createdBy: "SDK", codebase } };
29
42
  }
30
43
  }
31
44
  }
32
45
  }
33
46
  return extRecords;
34
47
  }
35
- exports.extractExtensionsFromBuilds = extractExtensionsFromBuilds;
36
48
  function extensionMatchesAnyFilter(codebase, extensionId, filters) {
37
49
  if (!filters) {
38
50
  return true;
39
51
  }
40
52
  return filters.some((f) => extensionMatchesFilter(codebase, extensionId, f));
41
53
  }
42
- exports.extensionMatchesAnyFilter = extensionMatchesAnyFilter;
43
54
  function extensionMatchesFilter(codebase, extensionId, filter) {
44
55
  if (codebase && filter.codebase) {
45
56
  if (codebase !== filter.codebase) {
@@ -55,7 +66,6 @@ function extensionMatchesFilter(codebase, extensionId, filter) {
55
66
  function isTypescriptCodebase(codebaseDir) {
56
67
  return fsutils.fileExistsSync(path.join(codebaseDir, "tsconfig.json"));
57
68
  }
58
- exports.isTypescriptCodebase = isTypescriptCodebase;
59
69
  async function writeFile(filePath, data, options) {
60
70
  const shortFilePath = filePath.replace(process.cwd(), ".");
61
71
  if (fsutils.fileExistsSync(filePath)) {
@@ -93,7 +103,6 @@ async function writeFile(filePath, data, options) {
93
103
  }
94
104
  }
95
105
  }
96
- exports.writeFile = writeFile;
97
106
  async function copyDirectory(src, dest, options) {
98
107
  const shortDestPath = dest.replace(process.cwd(), ",");
99
108
  if (fsutils.dirExistsSync(dest)) {
@@ -111,7 +120,7 @@ async function copyDirectory(src, dest, options) {
111
120
  if (srcPath.includes("node_modules")) {
112
121
  continue;
113
122
  }
114
- await copyDirectory(srcPath, destPath, Object.assign(Object.assign({}, options), { force: true }));
123
+ await copyDirectory(srcPath, destPath, { ...options, force: true });
115
124
  }
116
125
  else if (entry.isFile())
117
126
  try {
@@ -128,10 +137,9 @@ async function copyDirectory(src, dest, options) {
128
137
  }
129
138
  else {
130
139
  await fs.promises.mkdir(dest, { recursive: true });
131
- await copyDirectory(src, dest, Object.assign(Object.assign({}, options), { force: true }));
140
+ await copyDirectory(src, dest, { ...options, force: true });
132
141
  }
133
142
  }
134
- exports.copyDirectory = copyDirectory;
135
143
  async function getCodebaseRuntime(options) {
136
144
  const config = (0, projectConfig_1.normalizeAndValidate)(options.config.src.functions);
137
145
  const codebaseConfig = (0, projectConfig_1.configForCodebase)(config, options.codebase || projectConfig_1.DEFAULT_CODEBASE);
@@ -153,7 +161,6 @@ async function getCodebaseRuntime(options) {
153
161
  }
154
162
  return delegate.runtime;
155
163
  }
156
- exports.getCodebaseRuntime = getCodebaseRuntime;
157
164
  async function writeSDK(extensionRef, localPath, spec, options) {
158
165
  const runtime = await getCodebaseRuntime(options);
159
166
  if (runtime.startsWith("nodejs")) {
@@ -165,7 +172,6 @@ async function writeSDK(extensionRef, localPath, spec, options) {
165
172
  throw new error_1.FirebaseError(`Extension SDK generation is currently only supported for NodeJs. We detected the target source to be: ${runtime}`);
166
173
  }
167
174
  }
168
- exports.writeSDK = writeSDK;
169
175
  function getCodebaseDir(options) {
170
176
  if (!options.projectRoot) {
171
177
  throw new error_1.FirebaseError("Unable to determine root directory of project");
@@ -174,23 +180,18 @@ function getCodebaseDir(options) {
174
180
  const codebaseConfig = (0, projectConfig_1.configForCodebase)(config, options.codebase || projectConfig_1.DEFAULT_CODEBASE);
175
181
  return `${options.projectRoot}/${codebaseConfig.source}/`;
176
182
  }
177
- exports.getCodebaseDir = getCodebaseDir;
178
183
  function getInstallPathPrefix(options) {
179
184
  return `${getCodebaseDir(options)}generated/extensions/`;
180
185
  }
181
- exports.getInstallPathPrefix = getInstallPathPrefix;
182
186
  function toTitleCase(txt) {
183
187
  return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();
184
188
  }
185
- exports.toTitleCase = toTitleCase;
186
189
  function capitalizeFirstLetter(txt) {
187
190
  return txt.charAt(0).toUpperCase() + txt.substring(1);
188
191
  }
189
- exports.capitalizeFirstLetter = capitalizeFirstLetter;
190
192
  function lowercaseFirstLetter(txt) {
191
193
  return txt.charAt(0).toLowerCase() + txt.substring(1);
192
194
  }
193
- exports.lowercaseFirstLetter = lowercaseFirstLetter;
194
195
  function snakeToCamelCase(txt) {
195
196
  let ret = txt.toLowerCase();
196
197
  ret = ret.replace(/_/g, " ");
@@ -198,7 +199,6 @@ function snakeToCamelCase(txt) {
198
199
  ret = ret.charAt(0).toLowerCase() + ret.substring(1);
199
200
  return ret;
200
201
  }
201
- exports.snakeToCamelCase = snakeToCamelCase;
202
202
  function longestCommonPrefix(arr) {
203
203
  if (arr.length === 0) {
204
204
  return "";
@@ -213,4 +213,3 @@ function longestCommonPrefix(arr) {
213
213
  }
214
214
  return prefix;
215
215
  }
216
- exports.longestCommonPrefix = longestCommonPrefix;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.writeSDK = exports.TYPESCRIPT_VERSION = exports.FIREBASE_FUNCTIONS_VERSION = exports.SDK_GENERATION_VERSION = void 0;
3
+ exports.TYPESCRIPT_VERSION = exports.FIREBASE_FUNCTIONS_VERSION = exports.SDK_GENERATION_VERSION = void 0;
4
+ exports.writeSDK = writeSDK;
4
5
  const path = require("path");
5
6
  const marked_terminal_1 = require("marked-terminal");
6
7
  const marked_1 = require("marked");
@@ -98,7 +99,6 @@ function addPeerDependency(pkgJson, dependency, version) {
98
99
  pkgJson.peerDependencies[dependency] = version;
99
100
  }
100
101
  async function writeSDK(extensionRef, localPath, spec, options) {
101
- var _a, _b, _c;
102
102
  const sdkLines = [];
103
103
  const className = makeClassName(spec.name);
104
104
  let dirPath;
@@ -191,7 +191,7 @@ async function writeSDK(extensionRef, localPath, spec, options) {
191
191
  param.type === extensionsHelper_1.SpecParamType.SELECT ||
192
192
  param.type === extensionsHelper_1.SpecParamType.MULTISELECT) {
193
193
  line = `export type ${makeTypeName(param.param)} =`;
194
- (_a = param.options) === null || _a === void 0 ? void 0 : _a.forEach((opt, i) => {
194
+ param.options?.forEach((opt, i) => {
195
195
  if (i === 0) {
196
196
  line = line.concat(` "${opt.value}"`);
197
197
  }
@@ -210,7 +210,7 @@ async function writeSDK(extensionRef, localPath, spec, options) {
210
210
  let line;
211
211
  if (sysParam.type === types_1.ParamType.SELECT || sysParam.type === types_1.ParamType.MULTISELECT) {
212
212
  line = `export type ${makeSystemTypeName(sysParam.param)} =`;
213
- (_b = sysParam.options) === null || _b === void 0 ? void 0 : _b.forEach((opt, i) => {
213
+ sysParam.options?.forEach((opt, i) => {
214
214
  if (i === 0) {
215
215
  line = line.concat(` "${opt.value}"`);
216
216
  }
@@ -304,7 +304,7 @@ async function writeSDK(extensionRef, localPath, spec, options) {
304
304
  sdkLines.push("}\n");
305
305
  sdkLines.push(`/**`);
306
306
  sdkLines.push(` * ${spec.displayName || spec.name}`);
307
- (_c = spec.description) === null || _c === void 0 ? void 0 : _c.split("\n").forEach((val) => {
307
+ spec.description?.split("\n").forEach((val) => {
308
308
  sdkLines.push(` * ${val.replace(/\*\//g, "* /")}`);
309
309
  });
310
310
  sdkLines.push(` */`);
@@ -400,4 +400,3 @@ async function writeSDK(extensionRef, localPath, spec, options) {
400
400
  `See also: ${(0, common_1.fixDarkBlueText)(await (0, marked_1.marked)("[Extension SDKs documentation](https://firebase.google.com/docs/extensions/install-extensions?interface=sdk#config)"))}`;
401
401
  return instructions;
402
402
  }
403
- exports.writeSDK = writeSDK;
@@ -1,6 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.prettySecretName = exports.getSecretLabels = exports.getActiveSecrets = exports.getManagedSecrets = exports.grantFirexServiceAgentSecretAdminRole = exports.usesSecrets = exports.ensureSecretManagerApiEnabled = exports.SECRET_ROLE = exports.SECRET_LABEL = void 0;
3
+ exports.SECRET_ROLE = exports.SECRET_LABEL = void 0;
4
+ exports.ensureSecretManagerApiEnabled = ensureSecretManagerApiEnabled;
5
+ exports.usesSecrets = usesSecrets;
6
+ exports.grantFirexServiceAgentSecretAdminRole = grantFirexServiceAgentSecretAdminRole;
7
+ exports.getManagedSecrets = getManagedSecrets;
8
+ exports.getActiveSecrets = getActiveSecrets;
9
+ exports.getSecretLabels = getSecretLabels;
10
+ exports.prettySecretName = prettySecretName;
4
11
  const getProjectNumber_1 = require("../getProjectNumber");
5
12
  const utils = require("../utils");
6
13
  const ensureApiEnabled_1 = require("../ensureApiEnabled");
@@ -15,18 +22,15 @@ async function ensureSecretManagerApiEnabled(options) {
15
22
  const projectId = (0, projectUtils_1.needProjectId)(options);
16
23
  return await (0, ensureApiEnabled_1.ensure)(projectId, (0, api_1.secretManagerOrigin)(), "extensions", options.markdown);
17
24
  }
18
- exports.ensureSecretManagerApiEnabled = ensureSecretManagerApiEnabled;
19
25
  function usesSecrets(spec) {
20
26
  return spec.params && !!spec.params.find((p) => p.type === types_1.ParamType.SECRET);
21
27
  }
22
- exports.usesSecrets = usesSecrets;
23
28
  async function grantFirexServiceAgentSecretAdminRole(secret) {
24
29
  const projectNumber = await (0, getProjectNumber_1.getProjectNumber)({ projectId: secret.projectId });
25
30
  const firexSaProjectId = utils.envOverride("FIREBASE_EXTENSIONS_SA_PROJECT_ID", "gcp-sa-firebasemods");
26
31
  const saEmail = `service-${projectNumber}@${firexSaProjectId}.iam.gserviceaccount.com`;
27
32
  return secretManagerApi.ensureServiceAgentRole(secret, [saEmail], "roles/secretmanager.admin");
28
33
  }
29
- exports.grantFirexServiceAgentSecretAdminRole = grantFirexServiceAgentSecretAdminRole;
30
34
  async function getManagedSecrets(instance) {
31
35
  return (await Promise.all(getActiveSecrets(instance.config.source.spec, instance.config.params).map(async (secretResourceName) => {
32
36
  const secret = secretManagerApi.parseSecretResourceName(secretResourceName);
@@ -37,19 +41,16 @@ async function getManagedSecrets(instance) {
37
41
  return Promise.resolve("");
38
42
  }))).filter((secretId) => !!secretId);
39
43
  }
40
- exports.getManagedSecrets = getManagedSecrets;
41
44
  function getActiveSecrets(spec, params) {
42
45
  return spec.params
43
46
  .map((p) => (p.type === types_1.ParamType.SECRET ? params[p.param] : ""))
44
47
  .filter((pv) => !!pv);
45
48
  }
46
- exports.getActiveSecrets = getActiveSecrets;
47
49
  function getSecretLabels(instanceId) {
48
50
  const labels = {};
49
51
  labels[exports.SECRET_LABEL] = instanceId;
50
52
  return labels;
51
53
  }
52
- exports.getSecretLabels = getSecretLabels;
53
54
  function prettySecretName(secretResourceName) {
54
55
  const nameTokens = secretResourceName.split("/");
55
56
  if (nameTokens.length !== 4 && nameTokens.length !== 6) {
@@ -58,4 +59,3 @@ function prettySecretName(secretResourceName) {
58
59
  }
59
60
  return nameTokens.slice(0, 4).join("/");
60
61
  }
61
- exports.prettySecretName = prettySecretName;
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.displayDeveloperTOSWarning = exports.acceptLatestAppDeveloperTOS = exports.acceptLatestPublisherTOS = exports.acceptPublisherTOS = exports.getPublisherTOSStatus = exports.acceptAppDeveloperTOS = exports.getAppDeveloperTOSStatus = void 0;
3
+ exports.getAppDeveloperTOSStatus = getAppDeveloperTOSStatus;
4
+ exports.acceptAppDeveloperTOS = acceptAppDeveloperTOS;
5
+ exports.getPublisherTOSStatus = getPublisherTOSStatus;
6
+ exports.acceptPublisherTOS = acceptPublisherTOS;
7
+ exports.acceptLatestPublisherTOS = acceptLatestPublisherTOS;
8
+ exports.acceptLatestAppDeveloperTOS = acceptLatestAppDeveloperTOS;
9
+ exports.displayDeveloperTOSWarning = displayDeveloperTOSWarning;
4
10
  const apiv2_1 = require("../apiv2");
5
11
  const api_1 = require("../api");
6
12
  const logger_1 = require("../logger");
@@ -15,7 +21,6 @@ async function getAppDeveloperTOSStatus(projectId) {
15
21
  const res = await apiClient.get(`/projects/${projectId}/appdevtos`);
16
22
  return res.body;
17
23
  }
18
- exports.getAppDeveloperTOSStatus = getAppDeveloperTOSStatus;
19
24
  async function acceptAppDeveloperTOS(projectId, tosVersion, instanceId = "") {
20
25
  const res = await apiClient.post(`/projects/${projectId}/appdevtos:accept`, {
21
26
  name: `project/${projectId}/appdevtos`,
@@ -24,12 +29,10 @@ async function acceptAppDeveloperTOS(projectId, tosVersion, instanceId = "") {
24
29
  });
25
30
  return res.body;
26
31
  }
27
- exports.acceptAppDeveloperTOS = acceptAppDeveloperTOS;
28
32
  async function getPublisherTOSStatus(projectId) {
29
33
  const res = await apiClient.get(`/projects/${projectId}/publishertos`);
30
34
  return res.body;
31
35
  }
32
- exports.getPublisherTOSStatus = getPublisherTOSStatus;
33
36
  async function acceptPublisherTOS(projectId, tosVersion) {
34
37
  const res = await apiClient.post(`/projects/${projectId}/publishertos:accept`, {
35
38
  name: `project/${projectId}/publishertos`,
@@ -37,7 +40,6 @@ async function acceptPublisherTOS(projectId, tosVersion) {
37
40
  });
38
41
  return res.body;
39
42
  }
40
- exports.acceptPublisherTOS = acceptPublisherTOS;
41
43
  async function acceptLatestPublisherTOS(options, projectId) {
42
44
  try {
43
45
  logger_1.logger.debug(`Checking if latest publisher TOS has been accepted by ${projectId}...`);
@@ -64,7 +66,6 @@ async function acceptLatestPublisherTOS(options, projectId) {
64
66
  }
65
67
  throw new error_1.FirebaseError("You must accept the terms of service to continue.");
66
68
  }
67
- exports.acceptLatestPublisherTOS = acceptLatestPublisherTOS;
68
69
  async function acceptLatestAppDeveloperTOS(options, projectId, instanceIds) {
69
70
  try {
70
71
  logger_1.logger.debug(`Checking if latest AppDeveloper TOS has been accepted by ${projectId}...`);
@@ -90,9 +91,7 @@ async function acceptLatestAppDeveloperTOS(options, projectId, instanceIds) {
90
91
  return [];
91
92
  }
92
93
  }
93
- exports.acceptLatestAppDeveloperTOS = acceptLatestAppDeveloperTOS;
94
94
  function displayDeveloperTOSWarning() {
95
95
  const tosLink = extensionsTosUrl("user");
96
96
  utils.logLabeledBullet(extensionsHelper_1.logPrefix, `By installing an extension instance onto a Firebase project, you accept the Firebase Extensions User Terms of Service: ${tosLink}`);
97
97
  }
98
- exports.displayDeveloperTOSWarning = displayDeveloperTOSWarning;