firebase-tools 15.0.0 → 15.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (523) hide show
  1. package/lib/accountExporter.js +3 -5
  2. package/lib/accountImporter.js +4 -5
  3. package/lib/api.js +3 -3
  4. package/lib/apiv2.js +9 -13
  5. package/lib/appUtils.js +33 -36
  6. package/lib/appdistribution/client.js +4 -8
  7. package/lib/appdistribution/distribution.js +4 -4
  8. package/lib/appdistribution/options-parser-util.js +8 -9
  9. package/lib/appdistribution/types.js +2 -2
  10. package/lib/appdistribution/yaml_helper.js +33 -17
  11. package/lib/apphosting/app.js +8 -13
  12. package/lib/apphosting/backend.js +34 -24
  13. package/lib/apphosting/config.js +14 -14
  14. package/lib/apphosting/githubConnections.js +38 -35
  15. package/lib/apphosting/localbuilds.js +4 -6
  16. package/lib/apphosting/repo.js +24 -20
  17. package/lib/apphosting/rollout.js +12 -5
  18. package/lib/apphosting/secrets/dialogs.js +9 -9
  19. package/lib/apphosting/secrets/index.js +9 -11
  20. package/lib/apphosting/utils.js +2 -3
  21. package/lib/apphosting/yaml.js +12 -11
  22. package/lib/apptesting/ensureProjectConfigured.js +1 -2
  23. package/lib/apptesting/invokeTests.js +2 -3
  24. package/lib/apptesting/parseTestFiles.js +5 -6
  25. package/lib/apptesting/types.js +2 -2
  26. package/lib/archiveDirectory.js +1 -2
  27. package/lib/auth.js +36 -40
  28. package/lib/bin/cli.js +2 -3
  29. package/lib/bin/mcp.js +47 -10
  30. package/lib/checkMinRequiredVersion.js +1 -2
  31. package/lib/checkValidTargetFilters.js +1 -2
  32. package/lib/command.js +6 -9
  33. package/lib/commands/appdistribution-testers-list.js +2 -3
  34. package/lib/commands/apphosting-backends-list.js +4 -6
  35. package/lib/commands/apphosting-builds-create.js +2 -3
  36. package/lib/commands/apphosting-builds-get.js +1 -2
  37. package/lib/commands/apphosting-rollouts-list.js +1 -2
  38. package/lib/commands/apps-init.js +1 -1
  39. package/lib/commands/{apptesting-execute.js → apptesting-wata.js} +3 -4
  40. package/lib/commands/crashlytics-symbols-upload.js +2 -2
  41. package/lib/commands/dataconnect-execute.js +4 -4
  42. package/lib/commands/dataconnect-sdk-generate.js +5 -6
  43. package/lib/commands/dataconnect-services-list.js +7 -8
  44. package/lib/commands/dataconnect-sql-diff.js +1 -2
  45. package/lib/commands/dataconnect-sql-migrate.js +4 -3
  46. package/lib/commands/dataconnect-sql-setup.js +2 -2
  47. package/lib/commands/dataconnect-sql-shell.js +5 -1
  48. package/lib/commands/emulators-start.js +1 -2
  49. package/lib/commands/ext-configure.js +6 -4
  50. package/lib/commands/ext-dev-list.js +2 -3
  51. package/lib/commands/ext-dev-upload.js +2 -2
  52. package/lib/commands/ext-export.js +1 -1
  53. package/lib/commands/ext-info.js +2 -3
  54. package/lib/commands/ext-install.js +5 -7
  55. package/lib/commands/firestore-backups-list.js +1 -2
  56. package/lib/commands/firestore-backups-schedules-list.js +1 -2
  57. package/lib/commands/firestore-indexes-list.js +1 -2
  58. package/lib/commands/firestore-utils.js +1 -2
  59. package/lib/commands/functions-artifacts-setpolicy.js +1 -2
  60. package/lib/commands/functions-config-export.js +2 -3
  61. package/lib/commands/hosting-channel-deploy.js +2 -2
  62. package/lib/commands/hosting-clone.js +2 -3
  63. package/lib/commands/hosting-sites-create.js +1 -1
  64. package/lib/commands/index.js +2 -3
  65. package/lib/commands/init.js +4 -5
  66. package/lib/commands/internaltesting-functions-discover.js +1 -1
  67. package/lib/commands/login.js +4 -5
  68. package/lib/commands/logout.js +3 -3
  69. package/lib/commands/projects-create.js +1 -1
  70. package/lib/commands/remoteconfig-experiments-list.js +2 -3
  71. package/lib/commands/remoteconfig-get.js +1 -1
  72. package/lib/commands/remoteconfig-rollback.js +1 -2
  73. package/lib/commands/remoteconfig-rollouts-list.js +2 -3
  74. package/lib/commands/remoteconfig-versions-list.js +3 -4
  75. package/lib/commands/use.js +3 -3
  76. package/lib/config.js +4 -5
  77. package/lib/crashlytics/buildToolsJarHelper.js +3 -5
  78. package/lib/crashlytics/events.js +4 -7
  79. package/lib/crashlytics/filters.js +10 -12
  80. package/lib/crashlytics/issues.js +2 -3
  81. package/lib/crashlytics/notes.js +3 -4
  82. package/lib/crashlytics/reports.js +21 -15
  83. package/lib/crashlytics/types.js +7 -7
  84. package/lib/crashlytics/utils.js +4 -4
  85. package/lib/database/api.js +2 -3
  86. package/lib/database/import.js +4 -4
  87. package/lib/database/metadata.js +5 -6
  88. package/lib/database/rulesConfig.js +2 -3
  89. package/lib/dataconnect/build.js +10 -13
  90. package/lib/dataconnect/checkIam.js +1 -2
  91. package/lib/dataconnect/client.js +15 -18
  92. package/lib/dataconnect/dataplaneClient.js +6 -6
  93. package/lib/dataconnect/ensureApis.js +2 -3
  94. package/lib/dataconnect/errors.js +8 -11
  95. package/lib/dataconnect/filters.js +2 -3
  96. package/lib/dataconnect/freeTrial.js +3 -4
  97. package/lib/dataconnect/graphqlError.js +5 -8
  98. package/lib/dataconnect/load.js +10 -11
  99. package/lib/dataconnect/names.js +14 -18
  100. package/lib/dataconnect/prompts.js +1 -2
  101. package/lib/dataconnect/provisionCloudSql.js +13 -17
  102. package/lib/dataconnect/schemaMigration.js +60 -27
  103. package/lib/dataconnect/types.js +10 -12
  104. package/lib/dataconnect/webhook.js +3 -3
  105. package/lib/defaultCredentials.js +3 -4
  106. package/lib/deploy/apphosting/deploy.js +2 -3
  107. package/lib/deploy/apphosting/prepare.js +3 -5
  108. package/lib/deploy/apphosting/release.js +1 -1
  109. package/lib/deploy/apphosting/util.js +1 -2
  110. package/lib/deploy/database/deploy.js +1 -2
  111. package/lib/deploy/database/prepare.js +1 -2
  112. package/lib/deploy/database/release.js +1 -2
  113. package/lib/deploy/dataconnect/context.js +15 -4
  114. package/lib/deploy/dataconnect/deploy.js +5 -6
  115. package/lib/deploy/dataconnect/prepare.js +7 -9
  116. package/lib/deploy/dataconnect/release.js +7 -10
  117. package/lib/deploy/extensions/deploy.js +7 -9
  118. package/lib/deploy/extensions/deploymentSummary.js +6 -7
  119. package/lib/deploy/extensions/planner.js +15 -18
  120. package/lib/deploy/extensions/prepare.js +9 -11
  121. package/lib/deploy/extensions/release.js +10 -12
  122. package/lib/deploy/extensions/secrets.js +8 -11
  123. package/lib/deploy/extensions/tasks.js +6 -8
  124. package/lib/deploy/extensions/v2FunctionHelper.js +2 -3
  125. package/lib/deploy/extensions/validate.js +1 -2
  126. package/lib/deploy/firestore/deploy.js +3 -5
  127. package/lib/deploy/firestore/prepare.js +2 -3
  128. package/lib/deploy/firestore/release.js +3 -4
  129. package/lib/deploy/functions/backend.js +52 -42
  130. package/lib/deploy/functions/build.js +41 -15
  131. package/lib/deploy/functions/cache/applyHash.js +3 -5
  132. package/lib/deploy/functions/cache/hash.js +4 -5
  133. package/lib/deploy/functions/cel.js +3 -3
  134. package/lib/deploy/functions/checkIam.js +8 -8
  135. package/lib/deploy/functions/containerCleaner.js +10 -6
  136. package/lib/deploy/functions/deploy.js +6 -8
  137. package/lib/deploy/functions/ensure.js +6 -9
  138. package/lib/deploy/functions/functionsDeployHelper.js +10 -11
  139. package/lib/deploy/functions/params.js +10 -10
  140. package/lib/deploy/functions/prepare.js +41 -36
  141. package/lib/deploy/functions/prepareFunctionsUpload.js +24 -10
  142. package/lib/deploy/functions/pricing.js +3 -3
  143. package/lib/deploy/functions/prompts.js +7 -10
  144. package/lib/deploy/functions/release/executor.js +5 -6
  145. package/lib/deploy/functions/release/fabricator.js +76 -29
  146. package/lib/deploy/functions/release/index.js +23 -14
  147. package/lib/deploy/functions/release/planner.js +15 -14
  148. package/lib/deploy/functions/release/reporter.js +20 -20
  149. package/lib/deploy/functions/release/sourceTokenScraper.js +4 -5
  150. package/lib/deploy/functions/remoteSource.js +3 -4
  151. package/lib/deploy/functions/runtimes/discovery/index.js +9 -12
  152. package/lib/deploy/functions/runtimes/discovery/parsing.js +2 -3
  153. package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +29 -10
  154. package/lib/deploy/functions/runtimes/index.js +1 -2
  155. package/lib/deploy/functions/runtimes/node/index.js +18 -9
  156. package/lib/deploy/functions/runtimes/node/parseRuntimeAndValidateSDK.js +2 -2
  157. package/lib/deploy/functions/runtimes/node/validate.js +1 -2
  158. package/lib/deploy/functions/runtimes/node/versioning.js +6 -7
  159. package/lib/deploy/functions/runtimes/python/index.js +12 -12
  160. package/lib/deploy/functions/runtimes/supported/index.js +5 -6
  161. package/lib/deploy/functions/services/auth.js +49 -36
  162. package/lib/deploy/functions/services/database.js +1 -2
  163. package/lib/deploy/functions/services/dataconnect.js +16 -2
  164. package/lib/deploy/functions/services/firebaseAlerts.js +1 -2
  165. package/lib/deploy/functions/services/firestore.js +3 -5
  166. package/lib/deploy/functions/services/index.js +2 -2
  167. package/lib/deploy/functions/services/remoteConfig.js +1 -2
  168. package/lib/deploy/functions/services/storage.js +3 -5
  169. package/lib/deploy/functions/services/testLab.js +1 -2
  170. package/lib/deploy/functions/triggerRegionHelper.js +1 -2
  171. package/lib/deploy/functions/validate.js +12 -11
  172. package/lib/deploy/hosting/convertConfig.js +38 -22
  173. package/lib/deploy/hosting/deploy.js +4 -7
  174. package/lib/deploy/hosting/hashcache.js +2 -3
  175. package/lib/deploy/hosting/prepare.js +14 -14
  176. package/lib/deploy/hosting/release.js +1 -2
  177. package/lib/deploy/index.js +7 -8
  178. package/lib/deploy/lifecycleHooks.js +3 -5
  179. package/lib/deploy/remoteconfig/deploy.js +1 -1
  180. package/lib/deploy/remoteconfig/functions.js +5 -6
  181. package/lib/deploy/remoteconfig/prepare.js +2 -3
  182. package/lib/deploy/remoteconfig/release.js +2 -2
  183. package/lib/deploy/storage/deploy.js +1 -1
  184. package/lib/deploy/storage/prepare.js +1 -1
  185. package/lib/deploy/storage/release.js +1 -1
  186. package/lib/deploymentTool.js +5 -6
  187. package/lib/detectProjectRoot.js +1 -2
  188. package/lib/downloadUtils.js +2 -3
  189. package/lib/emulator/adminSdkConfig.js +2 -3
  190. package/lib/emulator/apphosting/config.js +1 -2
  191. package/lib/emulator/apphosting/developmentServer.js +3 -3
  192. package/lib/emulator/apphosting/serve.js +20 -14
  193. package/lib/emulator/auth/cloudFunctions.js +2 -3
  194. package/lib/emulator/auth/errors.js +2 -2
  195. package/lib/emulator/auth/handlers.js +3 -4
  196. package/lib/emulator/auth/index.js +6 -6
  197. package/lib/emulator/auth/operations.js +171 -129
  198. package/lib/emulator/auth/server.js +30 -22
  199. package/lib/emulator/auth/state.js +26 -36
  200. package/lib/emulator/auth/utils.js +12 -13
  201. package/lib/emulator/commandUtils.js +20 -20
  202. package/lib/emulator/controller.js +32 -29
  203. package/lib/emulator/databaseEmulator.js +1 -2
  204. package/lib/emulator/dataconnect/pgliteServer.js +48 -104
  205. package/lib/emulator/dataconnectEmulator.js +6 -9
  206. package/lib/emulator/download.js +2 -3
  207. package/lib/emulator/downloadableEmulatorInfo.json +31 -31
  208. package/lib/emulator/downloadableEmulators.js +49 -24
  209. package/lib/emulator/emulatorLogger.js +19 -4
  210. package/lib/emulator/env.js +6 -8
  211. package/lib/emulator/eventarcEmulator.js +2 -3
  212. package/lib/emulator/eventarcEmulatorUtils.js +3 -6
  213. package/lib/emulator/extensions/postinstall.js +1 -2
  214. package/lib/emulator/extensions/validation.js +4 -7
  215. package/lib/emulator/extensionsEmulator.js +6 -9
  216. package/lib/emulator/functionsEmulator.js +89 -46
  217. package/lib/emulator/functionsEmulatorRuntime.js +1 -1
  218. package/lib/emulator/functionsEmulatorShared.js +30 -30
  219. package/lib/emulator/functionsEmulatorShell.js +4 -6
  220. package/lib/emulator/functionsEmulatorUtils.js +8 -9
  221. package/lib/emulator/functionsRuntimeWorker.js +18 -9
  222. package/lib/emulator/hub.js +41 -34
  223. package/lib/emulator/hubClient.js +1 -1
  224. package/lib/emulator/initEmulators.js +2 -3
  225. package/lib/emulator/loggingEmulator.js +2 -2
  226. package/lib/emulator/portUtils.js +4 -5
  227. package/lib/emulator/registry.js +10 -4
  228. package/lib/emulator/shared/request.js +1 -2
  229. package/lib/emulator/storage/apis/firebase.js +16 -20
  230. package/lib/emulator/storage/apis/gcloud.js +6 -9
  231. package/lib/emulator/storage/apis/shared.js +1 -2
  232. package/lib/emulator/storage/crc.js +2 -3
  233. package/lib/emulator/storage/files.js +18 -41
  234. package/lib/emulator/storage/metadata.js +10 -4
  235. package/lib/emulator/storage/multipart.js +1 -2
  236. package/lib/emulator/storage/rfc.js +1 -2
  237. package/lib/emulator/storage/rules/config.js +1 -2
  238. package/lib/emulator/storage/rules/manager.js +3 -5
  239. package/lib/emulator/storage/rules/runtime.js +15 -13
  240. package/lib/emulator/storage/rules/types.js +2 -2
  241. package/lib/emulator/storage/rules/utils.js +5 -6
  242. package/lib/emulator/storage/server.js +1 -2
  243. package/lib/emulator/storage/upload.js +3 -4
  244. package/lib/emulator/taskQueue.js +11 -4
  245. package/lib/emulator/tasksEmulator.js +11 -12
  246. package/lib/emulator/types.js +6 -6
  247. package/lib/emulator/ui.js +6 -1
  248. package/lib/ensureApiEnabled.js +7 -9
  249. package/lib/env.js +2 -3
  250. package/lib/error.js +11 -13
  251. package/lib/errorOut.js +1 -2
  252. package/lib/experiments.js +15 -18
  253. package/lib/extensions/askUserForEventsConfig.js +12 -13
  254. package/lib/extensions/askUserForParam.js +11 -12
  255. package/lib/extensions/change-log.js +4 -5
  256. package/lib/extensions/checkProjectBilling.js +1 -2
  257. package/lib/extensions/diagnose.js +1 -2
  258. package/lib/extensions/displayExtensionInfo.js +25 -32
  259. package/lib/extensions/emulator/optionsHelper.js +6 -8
  260. package/lib/extensions/emulator/specHelper.js +15 -16
  261. package/lib/extensions/emulator/triggerHelper.js +3 -5
  262. package/lib/extensions/etags.js +2 -3
  263. package/lib/extensions/export.js +7 -9
  264. package/lib/extensions/extensionsApi.js +23 -29
  265. package/lib/extensions/extensionsHelper.js +52 -80
  266. package/lib/extensions/listExtensions.js +3 -5
  267. package/lib/extensions/localHelper.js +5 -5
  268. package/lib/extensions/manifest.js +15 -16
  269. package/lib/extensions/metricsUtils.js +3 -4
  270. package/lib/extensions/paramHelper.js +21 -18
  271. package/lib/extensions/provisioningHelper.js +17 -21
  272. package/lib/extensions/publishHelpers.js +1 -2
  273. package/lib/extensions/publisherApi.js +11 -13
  274. package/lib/extensions/refs.js +6 -7
  275. package/lib/extensions/runtimes/common.js +18 -19
  276. package/lib/extensions/runtimes/node.js +5 -6
  277. package/lib/extensions/secretsUtils.js +8 -8
  278. package/lib/extensions/tos.js +7 -8
  279. package/lib/extensions/types.js +3 -3
  280. package/lib/extensions/updateHelper.js +6 -7
  281. package/lib/extensions/utils.js +6 -8
  282. package/lib/extensions/versionHelper.js +1 -2
  283. package/lib/extensions/warnings.js +6 -8
  284. package/lib/fetchMOTD.js +1 -2
  285. package/lib/fetchWebSetup.js +3 -4
  286. package/lib/filterTargets.js +1 -2
  287. package/lib/firebaseConfigValidate.js +2 -3
  288. package/lib/firestore/api-sort.js +8 -9
  289. package/lib/firestore/api-types.js +15 -15
  290. package/lib/firestore/api.js +15 -13
  291. package/lib/firestore/backupUtils.js +3 -3
  292. package/lib/firestore/checkDatabaseType.js +1 -2
  293. package/lib/firestore/delete.js +1 -2
  294. package/lib/firestore/encodeFirestoreValue.js +1 -2
  295. package/lib/firestore/fsConfig.js +1 -2
  296. package/lib/firestore/options.js +1 -1
  297. package/lib/firestore/util.js +5 -6
  298. package/lib/firestore/validator.js +4 -5
  299. package/lib/frameworks/angular/index.js +14 -15
  300. package/lib/frameworks/angular/utils.js +21 -23
  301. package/lib/frameworks/astro/index.js +7 -7
  302. package/lib/frameworks/astro/utils.js +4 -6
  303. package/lib/frameworks/compose/discover/filesystem.js +3 -3
  304. package/lib/frameworks/compose/discover/frameworkMatcher.js +4 -5
  305. package/lib/frameworks/compose/discover/index.js +1 -2
  306. package/lib/frameworks/compose/discover/runtime/node.js +8 -11
  307. package/lib/frameworks/compose/driver/docker.js +3 -5
  308. package/lib/frameworks/compose/driver/hooks.js +2 -2
  309. package/lib/frameworks/compose/driver/index.js +2 -2
  310. package/lib/frameworks/compose/driver/local.js +2 -3
  311. package/lib/frameworks/compose/index.js +5 -7
  312. package/lib/frameworks/constants.js +3 -3
  313. package/lib/frameworks/express/index.js +7 -8
  314. package/lib/frameworks/flutter/index.js +6 -7
  315. package/lib/frameworks/flutter/utils.js +4 -5
  316. package/lib/frameworks/index.js +21 -22
  317. package/lib/frameworks/next/constants.js +5 -2
  318. package/lib/frameworks/next/index.js +34 -32
  319. package/lib/frameworks/next/utils.js +40 -39
  320. package/lib/frameworks/nuxt/index.js +9 -9
  321. package/lib/frameworks/nuxt/utils.js +4 -6
  322. package/lib/frameworks/nuxt2/index.js +7 -7
  323. package/lib/frameworks/sveltekit/index.js +6 -8
  324. package/lib/frameworks/utils.js +26 -24
  325. package/lib/frameworks/vite/index.js +8 -9
  326. package/lib/fsAsync.js +1 -2
  327. package/lib/fsutils.js +5 -6
  328. package/lib/functional.js +11 -11
  329. package/lib/functions/artifacts.js +25 -22
  330. package/lib/functions/ensureTargeted.js +1 -2
  331. package/lib/functions/env.js +13 -14
  332. package/lib/functions/functionslog.js +2 -3
  333. package/lib/functions/projectConfig.js +29 -33
  334. package/lib/functions/python.js +10 -4
  335. package/lib/functions/secrets.js +32 -18
  336. package/lib/functionsConfig.js +14 -14
  337. package/lib/functionsConfigClone.js +1 -2
  338. package/lib/functionsShellCommandAction.js +2 -3
  339. package/lib/gcp/apphosting.js +43 -28
  340. package/lib/gcp/apptesting.js +2 -2
  341. package/lib/gcp/artifactregistry.js +5 -5
  342. package/lib/gcp/auth.js +11 -13
  343. package/lib/gcp/cloudbilling.js +4 -5
  344. package/lib/gcp/cloudbuild.js +10 -11
  345. package/lib/gcp/cloudfunctions.js +61 -45
  346. package/lib/gcp/cloudfunctionsv2.js +81 -43
  347. package/lib/gcp/cloudlogging.js +2 -4
  348. package/lib/gcp/cloudmonitoring.js +7 -7
  349. package/lib/gcp/cloudscheduler.js +12 -14
  350. package/lib/gcp/cloudsql/cloudsqladmin.js +19 -21
  351. package/lib/gcp/cloudsql/connect.js +14 -9
  352. package/lib/gcp/cloudsql/fbToolsAuthClient.js +5 -3
  353. package/lib/gcp/cloudsql/interactive.js +2 -3
  354. package/lib/gcp/cloudsql/permissions.js +8 -8
  355. package/lib/gcp/cloudsql/permissionsSetup.js +9 -9
  356. package/lib/gcp/cloudtasks.js +19 -18
  357. package/lib/gcp/computeEngine.js +1 -2
  358. package/lib/gcp/devConnect.js +32 -29
  359. package/lib/gcp/docker.js +2 -4
  360. package/lib/gcp/eventarc.js +5 -5
  361. package/lib/gcp/firedata.js +4 -4
  362. package/lib/gcp/firestore.js +16 -16
  363. package/lib/gcp/iam.js +11 -12
  364. package/lib/gcp/identityPlatform.js +4 -5
  365. package/lib/gcp/k8s.js +1 -2
  366. package/lib/gcp/location.js +2 -2
  367. package/lib/gcp/proto.js +10 -11
  368. package/lib/gcp/pubsub.js +4 -5
  369. package/lib/gcp/resourceManager.js +5 -5
  370. package/lib/gcp/rules.js +13 -14
  371. package/lib/gcp/run.js +24 -31
  372. package/lib/gcp/runv2.js +39 -27
  373. package/lib/gcp/secretManager.js +60 -39
  374. package/lib/gcp/serviceusage.js +8 -4
  375. package/lib/gcp/storage.js +22 -20
  376. package/lib/gemini/fdcExperience.js +5 -5
  377. package/lib/getDefaultDatabaseInstance.js +2 -4
  378. package/lib/getDefaultHostingSite.js +3 -4
  379. package/lib/getProjectNumber.js +1 -2
  380. package/lib/hosting/api.js +32 -36
  381. package/lib/hosting/cloudRunProxy.js +2 -3
  382. package/lib/hosting/config.js +17 -17
  383. package/lib/hosting/expireUtils.js +3 -3
  384. package/lib/hosting/functionsProxy.js +1 -2
  385. package/lib/hosting/implicitInit.js +1 -2
  386. package/lib/hosting/initMiddleware.js +1 -2
  387. package/lib/hosting/interactive.js +1 -2
  388. package/lib/hosting/proxy.js +3 -5
  389. package/lib/hosting/runTags.js +8 -11
  390. package/lib/init/features/account.js +1 -2
  391. package/lib/init/features/ailogic/index.js +3 -5
  392. package/lib/init/features/ailogic/utils.js +6 -8
  393. package/lib/init/features/aitools/claude.js +1 -2
  394. package/lib/init/features/aitools/cursor.js +1 -2
  395. package/lib/init/features/aitools/gemini.js +1 -1
  396. package/lib/init/features/aitools/promptUpdater.js +10 -12
  397. package/lib/init/features/aitools.js +1 -2
  398. package/lib/init/features/apphosting.js +3 -4
  399. package/lib/init/features/apptesting/index.js +9 -9
  400. package/lib/init/features/database.js +4 -5
  401. package/lib/init/features/dataconnect/create_app.js +3 -4
  402. package/lib/init/features/dataconnect/index.js +25 -22
  403. package/lib/init/features/dataconnect/resolver.js +6 -10
  404. package/lib/init/features/dataconnect/sdk.js +31 -24
  405. package/lib/init/features/emulators.js +7 -6
  406. package/lib/init/features/extensions/index.js +3 -5
  407. package/lib/init/features/firestore/index.js +7 -9
  408. package/lib/init/features/firestore/indexes.js +2 -2
  409. package/lib/init/features/firestore/rules.js +3 -3
  410. package/lib/init/features/functions/index.js +3 -5
  411. package/lib/init/features/functions/javascript.js +1 -2
  412. package/lib/init/features/functions/npm-dependencies.js +1 -2
  413. package/lib/init/features/functions/python.js +1 -2
  414. package/lib/init/features/functions/typescript.js +1 -2
  415. package/lib/init/features/genkit/index.js +44 -18
  416. package/lib/init/features/hosting/github.js +6 -8
  417. package/lib/init/features/hosting/index.js +10 -13
  418. package/lib/init/features/project.js +4 -7
  419. package/lib/init/features/remoteconfig.js +1 -2
  420. package/lib/init/features/storage.js +3 -5
  421. package/lib/init/index.js +4 -7
  422. package/lib/init/spawn.js +7 -9
  423. package/lib/listFiles.js +1 -2
  424. package/lib/loadCJSON.js +1 -2
  425. package/lib/localFunction.js +14 -15
  426. package/lib/logError.js +1 -2
  427. package/lib/logger.js +7 -7
  428. package/lib/management/apps.js +22 -22
  429. package/lib/management/database.js +11 -12
  430. package/lib/management/projects.js +57 -56
  431. package/lib/management/provisioning/errorHandler.js +3 -5
  432. package/lib/management/provisioning/provision.js +15 -9
  433. package/lib/management/studio.js +2 -3
  434. package/lib/mcp/errors.js +4 -4
  435. package/lib/mcp/index.js +47 -45
  436. package/lib/mcp/prompt.js +1 -2
  437. package/lib/mcp/prompts/core/consult.js +2 -3
  438. package/lib/mcp/prompts/crashlytics/connect.js +15 -122
  439. package/lib/mcp/prompts/dataconnect/schema.js +3 -3
  440. package/lib/mcp/prompts/index.js +8 -10
  441. package/lib/mcp/resource.js +3 -15
  442. package/lib/mcp/resources/guides/app_id.js +39 -0
  443. package/lib/mcp/resources/guides/crashlytics_connect.js +51 -0
  444. package/lib/mcp/resources/guides/crashlytics_investigations.js +51 -0
  445. package/lib/mcp/resources/guides/crashlytics_issues.js +42 -0
  446. package/lib/mcp/resources/guides/crashlytics_reports.js +112 -0
  447. package/lib/mcp/resources/index.js +11 -3
  448. package/lib/mcp/tool.js +3 -15
  449. package/lib/mcp/tools/apphosting/fetch_logs.js +3 -4
  450. package/lib/mcp/tools/apphosting/list_backends.js +1 -1
  451. package/lib/mcp/tools/auth/get_users.js +5 -16
  452. package/lib/mcp/tools/core/create_android_sha.js +4 -1
  453. package/lib/mcp/tools/core/get_environment.js +7 -4
  454. package/lib/mcp/tools/core/get_sdk_config.js +4 -5
  455. package/lib/mcp/tools/core/get_security_rules.js +1 -2
  456. package/lib/mcp/tools/core/init.js +2 -2
  457. package/lib/mcp/tools/core/logout.js +1 -1
  458. package/lib/mcp/tools/core/read_resources.js +2 -2
  459. package/lib/mcp/tools/core/validate_security_rules.js +1 -2
  460. package/lib/mcp/tools/crashlytics/events.js +43 -19
  461. package/lib/mcp/tools/crashlytics/index.js +1 -6
  462. package/lib/mcp/tools/crashlytics/issues.js +33 -12
  463. package/lib/mcp/tools/crashlytics/reports.js +66 -117
  464. package/lib/mcp/tools/dataconnect/list_services.js +2 -3
  465. package/lib/mcp/tools/firestore/converter.js +3 -5
  466. package/lib/mcp/tools/firestore/delete_document.js +1 -1
  467. package/lib/mcp/tools/functions/get_logs.js +14 -12
  468. package/lib/mcp/tools/functions/list_functions.js +1 -1
  469. package/lib/mcp/tools/index.js +67 -50
  470. package/lib/mcp/util/apptesting/availability.js +1 -2
  471. package/lib/mcp/util/availability.js +1 -2
  472. package/lib/mcp/util/crashlytics/availability.js +1 -2
  473. package/lib/mcp/util/dataconnect/compile.js +7 -6
  474. package/lib/mcp/util/dataconnect/converter.js +7 -10
  475. package/lib/mcp/util/dataconnect/emulator.js +1 -2
  476. package/lib/mcp/util.js +9 -11
  477. package/lib/messaging/sendMessage.js +1 -2
  478. package/lib/metaprogramming.js +1 -2
  479. package/lib/operation-poller.js +2 -2
  480. package/lib/profileReport.js +6 -6
  481. package/lib/profiler.js +1 -2
  482. package/lib/projectPath.js +1 -2
  483. package/lib/projectUtils.js +5 -6
  484. package/lib/prompt.js +22 -13
  485. package/lib/rc.js +5 -7
  486. package/lib/remoteconfig/deleteExperiment.js +1 -2
  487. package/lib/remoteconfig/deleteRollout.js +1 -2
  488. package/lib/remoteconfig/get.js +2 -3
  489. package/lib/remoteconfig/getExperiment.js +2 -2
  490. package/lib/remoteconfig/getRollout.js +2 -2
  491. package/lib/remoteconfig/interfaces.js +1 -1
  492. package/lib/remoteconfig/listExperiments.js +2 -2
  493. package/lib/remoteconfig/listRollouts.js +2 -2
  494. package/lib/remoteconfig/publish.js +1 -2
  495. package/lib/remoteconfig/rollback.js +1 -2
  496. package/lib/remoteconfig/versionslist.js +1 -2
  497. package/lib/requireAuth.js +4 -6
  498. package/lib/requireConfig.js +5 -8
  499. package/lib/requireDatabaseInstance.js +2 -2
  500. package/lib/requireHostingSite.js +1 -2
  501. package/lib/requireInteractive.js +1 -1
  502. package/lib/requirePermissions.js +1 -2
  503. package/lib/requireTosAcceptance.js +1 -2
  504. package/lib/responseToError.js +1 -2
  505. package/lib/rtdb.js +2 -3
  506. package/lib/rulesDeploy.js +3 -4
  507. package/lib/serve/functions.js +9 -1
  508. package/lib/serve/hosting.js +4 -5
  509. package/lib/serve/index.js +1 -2
  510. package/lib/shortenUrl.js +1 -2
  511. package/lib/templates.js +3 -4
  512. package/lib/throttler/throttler.js +3 -3
  513. package/lib/timeout.js +2 -3
  514. package/lib/track.js +23 -14
  515. package/lib/tsconfig.publish.tsbuildinfo +1 -0
  516. package/lib/unzip.js +2 -3
  517. package/lib/utils.js +62 -63
  518. package/lib/vsCodeUtils.js +2 -3
  519. package/package.json +6 -6
  520. package/templates/extensions/typescript/index.ts +1 -1
  521. package/templates/extensions/typescript/package.lint.json +1 -1
  522. package/templates/extensions/typescript/package.nolint.json +1 -1
  523. package/templates/extensions/typescript/tsconfig.json +2 -1
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.batch_get_events = exports.list_events = void 0;
4
- const zod_1 = require("zod");
5
- const tool_1 = require("../../tool");
6
4
  const js_yaml_1 = require("js-yaml");
5
+ const zod_1 = require("zod");
7
6
  const events_1 = require("../../../crashlytics/events");
8
- const types_1 = require("../../../crashlytics/types");
9
7
  const filters_1 = require("../../../crashlytics/filters");
10
- const util_1 = require("../../util");
8
+ const types_1 = require("../../../crashlytics/types");
9
+ const app_id_1 = require("../../resources/guides/app_id");
10
+ const tool_1 = require("../../tool");
11
11
  const DUMP_OPTIONS = { lineWidth: 200 };
12
12
  function formatFrames(origFrames, maxFrames = 20) {
13
13
  const frames = origFrames || [];
@@ -33,7 +33,9 @@ function formatFrames(origFrames, maxFrames = 20) {
33
33
  return formatted;
34
34
  }
35
35
  function toText(event) {
36
- var _a, _b;
36
+ if (!event) {
37
+ return {};
38
+ }
37
39
  const result = {};
38
40
  for (const [key, value] of Object.entries(event)) {
39
41
  if (key === "logs") {
@@ -46,7 +48,7 @@ function toText(event) {
46
48
  const breadcrumbs = value || [];
47
49
  const slicedBreadcrumbs = breadcrumbs.length > 10 ? breadcrumbs.slice(-10) : breadcrumbs;
48
50
  const breadcrumbLines = slicedBreadcrumbs.map((b) => {
49
- const paramString = Object.entries(b.params)
51
+ const paramString = Object.entries(b?.params || {})
50
52
  .map(([k, v]) => `${k}: ${v}`)
51
53
  .join(", ");
52
54
  const params = paramString ? ` { ${paramString} }` : "";
@@ -56,7 +58,7 @@ function toText(event) {
56
58
  }
57
59
  else if (key === "threads") {
58
60
  let threads = value || [];
59
- if (((_a = event.issue) === null || _a === void 0 ? void 0 : _a.errorType) === types_1.ErrorType.FATAL || ((_b = event.issue) === null || _b === void 0 ? void 0 : _b.errorType) === types_1.ErrorType.ANR) {
61
+ if (event.issue?.errorType === types_1.ErrorType.FATAL || event.issue?.errorType === types_1.ErrorType.ANR) {
60
62
  threads = threads.filter((t) => t.crashed || t.blamed);
61
63
  }
62
64
  const threadStrings = threads.map((thread) => {
@@ -109,13 +111,24 @@ exports.list_events = (0, tool_1.tool)("crashlytics", {
109
111
  requiresAuth: true,
110
112
  },
111
113
  }, async ({ appId, filter, pageSize }) => {
112
- var _a;
113
- if (!appId)
114
- return (0, util_1.mcpError)(`Must specify 'appId' parameter.`);
115
- if (!filter || (!filter.issueId && !filter.issueVariantId))
116
- return (0, util_1.mcpError)(`Must specify 'filter.issueId' or 'filter.issueVariantId' parameters.`);
114
+ const result = { content: [] };
115
+ if (!appId) {
116
+ result.isError = true;
117
+ result.content.push({ type: "text", text: "Must specify 'appId' parameter" });
118
+ result.content.push({ type: "text", text: app_id_1.RESOURCE_CONTENT });
119
+ }
120
+ if (!filter || (!filter.issueId && !filter.issueVariantId)) {
121
+ result.isError = true;
122
+ result.content.push({
123
+ type: "text",
124
+ text: `Must specify 'filter.issueId' or 'filter.issueVariantId' parameters.`,
125
+ });
126
+ }
127
+ if (result.content.length > 0) {
128
+ return result;
129
+ }
117
130
  const response = await (0, events_1.listEvents)(appId, filter, pageSize);
118
- const eventsContent = ((_a = response.events) === null || _a === void 0 ? void 0 : _a.map((e) => toText(e))) || [];
131
+ const eventsContent = response.events?.map((e) => toText(e)) || [];
119
132
  return {
120
133
  content: [{ type: "text", text: (0, js_yaml_1.dump)(eventsContent, DUMP_OPTIONS) }],
121
134
  };
@@ -139,13 +152,24 @@ exports.batch_get_events = (0, tool_1.tool)("crashlytics", {
139
152
  requiresAuth: true,
140
153
  },
141
154
  }, async ({ appId, names }) => {
142
- var _a;
143
- if (!appId)
144
- return (0, util_1.mcpError)(`Must specify 'appId' parameter.`);
145
- if (!names || names.length === 0)
146
- return (0, util_1.mcpError)(`Must provide event resource names in name parameter.`);
155
+ const result = { content: [] };
156
+ if (!appId) {
157
+ result.isError = true;
158
+ result.content.push({ type: "text", text: "Must specify 'appId' parameter." });
159
+ result.content.push({ type: "text", text: app_id_1.RESOURCE_CONTENT });
160
+ }
161
+ if (!names || names.length === 0) {
162
+ result.isError = true;
163
+ result.content.push({
164
+ type: "text",
165
+ text: "Must provide event resource names in name parameter.",
166
+ });
167
+ }
168
+ if (result.content.length > 0) {
169
+ return result;
170
+ }
147
171
  const response = await (0, events_1.batchGetEvents)(appId, names);
148
- const eventsContent = ((_a = response.events) === null || _a === void 0 ? void 0 : _a.map((e) => toText(e))) || [];
172
+ const eventsContent = response.events?.map((e) => toText(e)) || [];
149
173
  return {
150
174
  content: [{ type: "text", text: (0, js_yaml_1.dump)(eventsContent, DUMP_OPTIONS) }],
151
175
  };
@@ -12,11 +12,6 @@ exports.crashlyticsTools = [
12
12
  events_1.list_events,
13
13
  events_1.batch_get_events,
14
14
  notes_1.list_notes,
15
- reports_1.get_top_issues,
16
- reports_1.get_top_variants,
17
- reports_1.get_top_versions,
18
- reports_1.get_top_apple_devices,
19
- reports_1.get_top_android_devices,
20
- reports_1.get_top_operating_systems,
15
+ reports_1.get_report,
21
16
  issues_1.update_issue,
22
17
  ];
@@ -2,11 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.update_issue = exports.get_issue = void 0;
4
4
  const zod_1 = require("zod");
5
- const tool_1 = require("../../tool");
5
+ const filters_1 = require("../../../crashlytics/filters");
6
6
  const issues_1 = require("../../../crashlytics/issues");
7
7
  const types_1 = require("../../../crashlytics/types");
8
- const filters_1 = require("../../../crashlytics/filters");
8
+ const tool_1 = require("../../tool");
9
9
  const util_1 = require("../../util");
10
+ const app_id_1 = require("../../resources/guides/app_id");
10
11
  exports.get_issue = (0, tool_1.tool)("crashlytics", {
11
12
  name: "get_issue",
12
13
  description: `Gets data for a Crashlytics issue, which can be used as a starting point for debugging.`,
@@ -22,10 +23,19 @@ exports.get_issue = (0, tool_1.tool)("crashlytics", {
22
23
  requiresAuth: true,
23
24
  },
24
25
  }, async ({ appId, issueId }) => {
25
- if (!appId)
26
- return (0, util_1.mcpError)(`Must specify 'appId' parameter.`);
27
- if (!issueId)
28
- return (0, util_1.mcpError)(`Must specify 'issueId' parameter.`);
26
+ const result = { content: [] };
27
+ if (!appId) {
28
+ result.isError = true;
29
+ result.content.push({ type: "text", text: "Must specify 'appId' parameter" });
30
+ result.content.push({ type: "text", text: app_id_1.RESOURCE_CONTENT });
31
+ }
32
+ if (!issueId) {
33
+ result.isError = true;
34
+ result.content.push({ type: "text", text: "Must specify 'issueId' parameter." });
35
+ }
36
+ if (result.content.length > 0) {
37
+ return result;
38
+ }
29
39
  return (0, util_1.toContent)(await (0, issues_1.getIssue)(appId, issueId));
30
40
  });
31
41
  exports.update_issue = (0, tool_1.tool)("crashlytics", {
@@ -46,11 +56,22 @@ exports.update_issue = (0, tool_1.tool)("crashlytics", {
46
56
  requiresAuth: true,
47
57
  },
48
58
  }, async ({ appId, issueId, state }) => {
49
- if (!appId)
50
- return (0, util_1.mcpError)(`Must specify 'app_id' parameter.`);
51
- if (!issueId)
52
- return (0, util_1.mcpError)(`Must specify 'issue_id' parameter.`);
53
- if (!state)
54
- return (0, util_1.mcpError)(`Must specify 'state' parameter.`);
59
+ const result = { content: [] };
60
+ if (!appId) {
61
+ result.isError = true;
62
+ result.content.push({ type: "text", text: "Must specify 'appId' parameter" });
63
+ result.content.push({ type: "text", text: app_id_1.RESOURCE_CONTENT });
64
+ }
65
+ if (!issueId) {
66
+ result.isError = true;
67
+ result.content.push({ type: "text", text: "Must specify 'issueId' parameter." });
68
+ }
69
+ if (!state) {
70
+ result.isError = true;
71
+ result.content.push({ type: "text", text: "Must specify 'state' parameter" });
72
+ }
73
+ if (result.content.length > 0) {
74
+ return result;
75
+ }
55
76
  return (0, util_1.toContent)(await (0, issues_1.updateIssue)(appId, issueId, state));
56
77
  });
@@ -1,129 +1,78 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.get_top_operating_systems = exports.get_top_android_devices = exports.get_top_apple_devices = exports.get_top_versions = exports.get_top_variants = exports.get_top_issues = void 0;
4
- const tool_1 = require("../../tool");
5
- const util_1 = require("../../util");
6
- const reports_1 = require("../../../crashlytics/reports");
3
+ exports.get_report = void 0;
4
+ const js_yaml_1 = require("js-yaml");
7
5
  const filters_1 = require("../../../crashlytics/filters");
8
- function getReportContent(report, additionalPrompt) {
9
- return async ({ appId, filter, pageSize }) => {
10
- var _a;
11
- if (!appId)
12
- return (0, util_1.mcpError)(`Must specify 'appId' parameter.`);
13
- filter !== null && filter !== void 0 ? filter : (filter = {});
14
- if (!!filter.intervalStartTime && !filter.intervalEndTime) {
15
- filter.intervalEndTime = new Date().toISOString();
16
- }
17
- if (report === reports_1.CrashlyticsReport.TopIssues && !!filter.issueId) {
18
- delete filter.issueId;
19
- }
20
- (0, filters_1.validateEventFilters)(filter);
21
- const reportResponse = (0, reports_1.simplifyReport)(await (0, reports_1.getReport)(report, appId, filter, pageSize));
22
- if (!((_a = reportResponse.groups) === null || _a === void 0 ? void 0 : _a.length)) {
23
- additionalPrompt = "This report response contains no results.";
24
- }
25
- if (additionalPrompt) {
26
- reportResponse.usage = (reportResponse.usage || "").concat("\n", additionalPrompt);
27
- }
28
- return (0, util_1.toContent)(reportResponse);
6
+ const reports_1 = require("../../../crashlytics/reports");
7
+ const tool_1 = require("../../tool");
8
+ const app_id_1 = require("../../resources/guides/app_id");
9
+ const DUMP_OPTIONS = { lineWidth: 200 };
10
+ const REPORT_ERROR_CONTENT = `
11
+ Must specify the desired report:
12
+ * TOP_ISSUES - metrics grouped by *issue*.
13
+ * TOP_VARIANTS - metrics grouped by issue *variant*
14
+ * TOP_VERSIONS - metrics grouped by *version*
15
+ * TOP_OPERATING_SYSTEMS - metrics grouped by *operating system*
16
+ * TOP_ANDROID_DEVICES - metrics grouped by *device*
17
+ * TOP_APPLE_DEVICES - metrics grouped by *device*
18
+ `.trim();
19
+ function toText(response, filters) {
20
+ const result = {
21
+ name: response.name || "",
22
+ filters: (0, js_yaml_1.dump)(filters, DUMP_OPTIONS),
29
23
  };
24
+ for (const [key, value] of Object.entries(response)) {
25
+ if (key === "name") {
26
+ continue;
27
+ }
28
+ result[key] = (0, js_yaml_1.dump)(value, DUMP_OPTIONS);
29
+ }
30
+ return result;
30
31
  }
31
- exports.get_top_issues = (0, tool_1.tool)("crashlytics", {
32
- name: "get_top_issues",
33
- description: `Use this to count events and distinct impacted users, grouped by *issue*.
34
- Groups are sorted by event count, in descending order.
35
- Only counts events matching the given filters.`,
36
- inputSchema: reports_1.ReportInputSchema,
37
- annotations: {
38
- title: "Get Crashlytics Top Issues Report",
39
- readOnlyHint: true,
40
- },
41
- _meta: {
42
- requiresAuth: true,
43
- },
44
- }, getReportContent(reports_1.CrashlyticsReport.TopIssues, `The crashlytics_batch_get_event tool can retrieve the sample events in this response.
45
- Pass the sampleEvent in the names field.
46
- The crashlytics_list_events tool can retrieve a list of events for an issue in this response.
47
- Pass the issue.id in the filter.issueId field.`));
48
- exports.get_top_variants = (0, tool_1.tool)("crashlytics", {
49
- name: "get_top_variants",
50
- description: `Counts events and distinct impacted users, grouped by issue *variant*.
51
- Groups are sorted by event count, in descending order.
52
- Only counts events matching the given filters.`,
53
- inputSchema: reports_1.ReportInputSchema,
54
- annotations: {
55
- title: "Get Crashlytics Top Variants Report",
56
- readOnlyHint: true,
57
- },
58
- _meta: {
59
- requiresAuth: true,
60
- },
61
- }, getReportContent(reports_1.CrashlyticsReport.TopVariants, `The crashlytics_get_top_issues tool can report the top issues for the variants in this response.
62
- Pass the variant.displayName in the filter.variantDisplayNames field.
63
- The crashlytics_list_events tool can retrieve a list of events for a variant in this response.`));
64
- exports.get_top_versions = (0, tool_1.tool)("crashlytics", {
65
- name: "get_top_versions",
66
- description: `Counts events and distinct impacted users, grouped by *version*.
67
- Groups are sorted by event count, in descending order.
68
- Only counts events matching the given filters.`,
32
+ exports.get_report = (0, tool_1.tool)("crashlytics", {
33
+ name: "get_report",
34
+ description: `Use this to request numerical reports from Crashlytics. The result aggregates the sum of events and impacted users, grouped by a dimension appropriate for that report. Agents must read the [Firebase Crashlytics Reports Guide](firebase://guides/crashlytics/reports) using the \`firebase_read_resources\` tool before calling to understand criticial prerequisites for requesting reports and how to interpret the results.
35
+ `.trim(),
69
36
  inputSchema: reports_1.ReportInputSchema,
70
37
  annotations: {
71
- title: "Get Crashlytics Top Versions Report",
38
+ title: "Get Crashlytics Report",
72
39
  readOnlyHint: true,
73
40
  },
74
41
  _meta: {
75
42
  requiresAuth: true,
76
43
  },
77
- }, getReportContent(reports_1.CrashlyticsReport.TopVersions, `The crashlytics_get_top_issues tool can report the top issues for the versions in this response.
78
- Pass the version.displayName in the filter.versionDisplayNames field.
79
- The crashlytics_list_events tool can retrieve a list of events for a version in this response.`));
80
- exports.get_top_apple_devices = (0, tool_1.tool)("crashlytics", {
81
- name: "get_top_apple_devices",
82
- description: `Counts events and distinct impacted users, grouped by apple *device*.
83
- Groups are sorted by event count, in descending order.
84
- Only counts events matching the given filters.
85
- Only relevant for iOS, iPadOS and MacOS applications.`,
86
- inputSchema: reports_1.ReportInputSchema,
87
- annotations: {
88
- title: "Get Crashlytics Top Apple Devices Report",
89
- readOnlyHint: true,
90
- },
91
- _meta: {
92
- requiresAuth: true,
93
- },
94
- }, getReportContent(reports_1.CrashlyticsReport.TopAppleDevices, `The crashlytics_get_top_issues tool can report the top issues for the devices in this response.
95
- Pass the device.displayName in the filter.deviceDisplayNames field.
96
- The crashlytics_list_events tool can retrieve a list of events for a device in this response.`));
97
- exports.get_top_android_devices = (0, tool_1.tool)("crashlytics", {
98
- name: "get_top_android_devices",
99
- description: `Counts events and distinct impacted users, grouped by android *device*.
100
- Groups are sorted by event count, in descending order.
101
- Only counts events matching the given filters.
102
- Only relevant for Android applications.`,
103
- inputSchema: reports_1.ReportInputSchema,
104
- annotations: {
105
- title: "Get Crashlytics Top Android Devices Report",
106
- readOnlyHint: true,
107
- },
108
- _meta: {
109
- requiresAuth: true,
110
- },
111
- }, getReportContent(reports_1.CrashlyticsReport.TopAndroidDevices, `The crashlytics_get_top_issues tool can report the top issues for the devices in this response.
112
- Pass the device.displayName in the filter.deviceDisplayNames field.
113
- The crashlytics_list_events tool can retrieve a list of events for a device in this response.`));
114
- exports.get_top_operating_systems = (0, tool_1.tool)("crashlytics", {
115
- name: "get_top_operating_systems",
116
- description: `Counts events and distinct impacted users, grouped by *operating system*.
117
- Groups are sorted by event count, in descending order.
118
- Only counts events matching the given filters.`,
119
- inputSchema: reports_1.ReportInputSchema,
120
- annotations: {
121
- title: "Get Crashlytics Top Operating Systems Report",
122
- readOnlyHint: true,
123
- },
124
- _meta: {
125
- requiresAuth: true,
126
- },
127
- }, getReportContent(reports_1.CrashlyticsReport.TopOperatingSystems, `The crashlytics_get_top_issues tool can report the top issues for the operating systems in this response.
128
- Pass the operatingSystem.displayName in the filter.operatingSystemDisplayNames field.
129
- The crashlytics_list_events tool can retrieve a list of events for an operating system in this response.`));
44
+ }, async ({ appId, report, pageSize, filter }) => {
45
+ const result = { content: [] };
46
+ if (!report) {
47
+ result.isError = true;
48
+ result.content.push({ type: "text", text: `Error: ${REPORT_ERROR_CONTENT}` });
49
+ }
50
+ if (!appId) {
51
+ result.isError = true;
52
+ result.content.push({ type: "text", text: "Must specify 'appId' parameter" });
53
+ result.content.push({ type: "text", text: app_id_1.RESOURCE_CONTENT });
54
+ }
55
+ try {
56
+ filter = (0, filters_1.validateEventFilters)(filter || {});
57
+ }
58
+ catch (error) {
59
+ result.isError = true;
60
+ result.content.push({ type: "text", text: `Error: ${error.message}` });
61
+ }
62
+ if (result.content.length > 0) {
63
+ return result;
64
+ }
65
+ const reportResponse = (0, reports_1.simplifyReport)(await (0, reports_1.getReport)(report, appId, filter, pageSize));
66
+ reportResponse.usage =
67
+ reportResponse.groups && reportResponse.groups.length
68
+ ? reportResponse.usage || ""
69
+ : "This report response contains no results.";
70
+ return {
71
+ content: [
72
+ {
73
+ type: "text",
74
+ text: (0, js_yaml_1.dump)(toText(reportResponse, filter), DUMP_OPTIONS),
75
+ },
76
+ ],
77
+ };
78
+ });
@@ -68,15 +68,14 @@ exports.list_services = (0, tool_1.tool)("dataconnect", {
68
68
  const remoteOnlyServices = Array.from(serviceInfos.values()).filter((s) => !s.local);
69
69
  const output = [];
70
70
  function includeDeployedServiceInfo(deployed) {
71
- var _a, _b;
72
- if ((_a = deployed.schemas) === null || _a === void 0 ? void 0 : _a.length) {
71
+ if (deployed.schemas?.length) {
73
72
  output.push(`### Schemas`);
74
73
  for (const s of deployed.schemas) {
75
74
  clearCCFEFields(s);
76
75
  output.push((0, js_yaml_1.dump)(s));
77
76
  }
78
77
  }
79
- if ((_b = deployed.connectors) === null || _b === void 0 ? void 0 : _b.length) {
78
+ if (deployed.connectors?.length) {
80
79
  output.push(`### Connectors`);
81
80
  for (const c of deployed.connectors) {
82
81
  clearCCFEFields(c);
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.firestoreDocumentToJson = exports.convertInputToValue = void 0;
3
+ exports.convertInputToValue = convertInputToValue;
4
+ exports.firestoreDocumentToJson = firestoreDocumentToJson;
4
5
  const logger_1 = require("../../../logger");
5
6
  function convertInputToValue(inputValue) {
6
7
  if (inputValue === null) {
@@ -47,9 +48,7 @@ function convertInputToValue(inputValue) {
47
48
  }
48
49
  return { nullValue: null };
49
50
  }
50
- exports.convertInputToValue = convertInputToValue;
51
51
  function firestoreValueToJson(firestoreValue) {
52
- var _a, _b;
53
52
  if ("nullValue" in firestoreValue)
54
53
  return null;
55
54
  if ("booleanValue" in firestoreValue)
@@ -77,7 +76,7 @@ function firestoreValueToJson(firestoreValue) {
77
76
  value: [firestoreValue.geoPointValue.latitude, firestoreValue.geoPointValue.longitude],
78
77
  };
79
78
  if ("arrayValue" in firestoreValue)
80
- return (_b = (_a = firestoreValue.arrayValue.values) === null || _a === void 0 ? void 0 : _a.map((v) => firestoreValueToJson(v))) !== null && _b !== void 0 ? _b : [];
79
+ return firestoreValue.arrayValue.values?.map((v) => firestoreValueToJson(v)) ?? [];
81
80
  if ("mapValue" in firestoreValue) {
82
81
  const map = firestoreValue.mapValue.fields || {};
83
82
  const obj = {};
@@ -100,4 +99,3 @@ function firestoreDocumentToJson(firestoreDoc) {
100
99
  }
101
100
  return result;
102
101
  }
103
- exports.firestoreDocumentToJson = firestoreDocumentToJson;
@@ -38,7 +38,7 @@ exports.delete_document = (0, tool_1.tool)("firestore", {
38
38
  return (0, util_1.mcpError)(`None of the specified documents were found in project '${projectId}'`);
39
39
  }
40
40
  const firestoreDelete = new delete_1.FirestoreDelete(projectId, path, {
41
- databaseId: database !== null && database !== void 0 ? database : "(default)",
41
+ databaseId: database ?? "(default)",
42
42
  urlPrefix: emulatorUrl,
43
43
  });
44
44
  await firestoreDelete.execute();
@@ -86,8 +86,8 @@ exports.get_logs = (0, tool_1.tool)("functions", {
86
86
  requiresProject: true,
87
87
  },
88
88
  }, async ({ function_names, page_size, order, page_token, min_severity, start_time, end_time, filter }, { projectId }) => {
89
- const resolvedOrder = (order === null || order === void 0 ? void 0 : order.toLowerCase()) === "asc" ? "asc" : "desc";
90
- const resolvedPageSize = page_size !== null && page_size !== void 0 ? page_size : 50;
89
+ const resolvedOrder = order?.toLowerCase() === "asc" ? "asc" : "desc";
90
+ const resolvedPageSize = page_size ?? 50;
91
91
  const normalizedSelectors = normalizeFunctionSelectors(function_names);
92
92
  const filterParts = [(0, functionslog_1.getApiFilter)(normalizedSelectors)];
93
93
  if (min_severity) {
@@ -115,18 +115,20 @@ exports.get_logs = (0, tool_1.tool)("functions", {
115
115
  try {
116
116
  const { entries, nextPageToken } = await (0, cloudlogging_1.listEntries)(projectId, combinedFilter, resolvedPageSize, resolvedOrder, page_token);
117
117
  const formattedEntries = entries.map((entry) => {
118
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
119
- const functionName = (_f = (_c = (_b = (_a = entry.resource) === null || _a === void 0 ? void 0 : _a.labels) === null || _b === void 0 ? void 0 : _b.function_name) !== null && _c !== void 0 ? _c : (_e = (_d = entry.resource) === null || _d === void 0 ? void 0 : _d.labels) === null || _e === void 0 ? void 0 : _e.service_name) !== null && _f !== void 0 ? _f : null;
120
- const payload = (_k = (_j = (_h = (_g = entry.textPayload) !== null && _g !== void 0 ? _g : entry.jsonPayload) !== null && _h !== void 0 ? _h : entry.protoPayload) !== null && _j !== void 0 ? _j : entry.labels) !== null && _k !== void 0 ? _k : null;
118
+ const functionName = entry.resource?.labels?.function_name ?? entry.resource?.labels?.service_name ?? null;
119
+ const payload = entry.textPayload ?? entry.jsonPayload ?? entry.protoPayload ?? entry.labels ?? null;
121
120
  return {
122
- timestamp: (_m = (_l = entry.timestamp) !== null && _l !== void 0 ? _l : entry.receiveTimestamp) !== null && _m !== void 0 ? _m : null,
123
- severity: (_o = entry.severity) !== null && _o !== void 0 ? _o : "DEFAULT",
121
+ timestamp: entry.timestamp ?? entry.receiveTimestamp ?? null,
122
+ severity: entry.severity ?? "DEFAULT",
124
123
  function: functionName,
125
- message: (_r = (_q = (_p = entry.textPayload) !== null && _p !== void 0 ? _p : (entry.jsonPayload ? JSON.stringify(entry.jsonPayload) : undefined)) !== null && _q !== void 0 ? _q : (entry.protoPayload ? JSON.stringify(entry.protoPayload) : undefined)) !== null && _r !== void 0 ? _r : "",
124
+ message: entry.textPayload ??
125
+ (entry.jsonPayload ? JSON.stringify(entry.jsonPayload) : undefined) ??
126
+ (entry.protoPayload ? JSON.stringify(entry.protoPayload) : undefined) ??
127
+ "",
126
128
  payload,
127
129
  log_name: entry.logName,
128
- trace: (_s = entry.trace) !== null && _s !== void 0 ? _s : null,
129
- span_id: (_t = entry.spanId) !== null && _t !== void 0 ? _t : null,
130
+ trace: entry.trace ?? null,
131
+ span_id: entry.spanId ?? null,
130
132
  };
131
133
  });
132
134
  const response = {
@@ -134,7 +136,7 @@ exports.get_logs = (0, tool_1.tool)("functions", {
134
136
  order: resolvedOrder,
135
137
  page_size: resolvedPageSize,
136
138
  entries: resolvedOrder === "asc" ? formattedEntries : formattedEntries.reverse(),
137
- next_page_token: nextPageToken !== null && nextPageToken !== void 0 ? nextPageToken : null,
139
+ next_page_token: nextPageToken ?? null,
138
140
  has_more: Boolean(nextPageToken),
139
141
  };
140
142
  if (!entries.length) {
@@ -145,7 +147,7 @@ exports.get_logs = (0, tool_1.tool)("functions", {
145
147
  return (0, util_1.toContent)(response);
146
148
  }
147
149
  catch (err) {
148
- const errMsg = (0, error_1.getErrMsg)((err === null || err === void 0 ? void 0 : err.original) || err, "Failed to retrieve Cloud Logging entries.");
150
+ const errMsg = (0, error_1.getErrMsg)(err?.original || err, "Failed to retrieve Cloud Logging entries.");
149
151
  return (0, util_1.mcpError)(errMsg);
150
152
  }
151
153
  });
@@ -42,7 +42,7 @@ exports.list_functions = (0, tool_1.tool)("functions", {
42
42
  return (0, util_1.toContent)(formattedList);
43
43
  }
44
44
  catch (err) {
45
- const errMsg = (0, error_1.getErrMsg)((err === null || err === void 0 ? void 0 : err.original) || err, "Failed to list functions.");
45
+ const errMsg = (0, error_1.getErrMsg)(err?.original || err, "Failed to list functions.");
46
46
  return (0, util_1.mcpError)(errMsg);
47
47
  }
48
48
  });