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
@@ -15,7 +15,7 @@ var RuntimeWorkerState;
15
15
  RuntimeWorkerState["BUSY"] = "BUSY";
16
16
  RuntimeWorkerState["FINISHING"] = "FINISHING";
17
17
  RuntimeWorkerState["FINISHED"] = "FINISHED";
18
- })(RuntimeWorkerState = exports.RuntimeWorkerState || (exports.RuntimeWorkerState = {}));
18
+ })(RuntimeWorkerState || (exports.RuntimeWorkerState = RuntimeWorkerState = {}));
19
19
  const FREE_WORKER_KEY = "~free~";
20
20
  class RuntimeWorker {
21
21
  constructor(triggerId, runtime, extensionLogInfo, timeoutSeconds) {
@@ -105,7 +105,12 @@ class RuntimeWorker {
105
105
  }
106
106
  };
107
107
  return new Promise((resolve) => {
108
- const reqOpts = Object.assign(Object.assign({}, this.runtime.conn.httpReqOpts()), { method: req.method, path: req.path, headers: req.headers });
108
+ const reqOpts = {
109
+ ...this.runtime.conn.httpReqOpts(),
110
+ method: req.method,
111
+ path: req.path,
112
+ headers: req.headers,
113
+ };
109
114
  if (this.timeoutSeconds) {
110
115
  reqOpts.timeout = this.timeoutSeconds * 1000;
111
116
  }
@@ -173,7 +178,11 @@ class RuntimeWorker {
173
178
  }
174
179
  isSocketReady() {
175
180
  return new Promise((resolve, reject) => {
176
- const req = http.request(Object.assign(Object.assign({}, this.runtime.conn.httpReqOpts()), { method: "GET", path: "/__/health" }), () => {
181
+ const req = http.request({
182
+ ...this.runtime.conn.httpReqOpts(),
183
+ method: "GET",
184
+ path: "/__/health",
185
+ }, () => {
177
186
  this.readyForWork();
178
187
  resolve();
179
188
  });
@@ -196,7 +205,7 @@ class RuntimeWorker {
196
205
  break;
197
206
  }
198
207
  catch (err) {
199
- if (["ECONNREFUSED", "ENOENT"].includes(err === null || err === void 0 ? void 0 : err.code)) {
208
+ if (["ECONNREFUSED", "ENOENT"].includes(err?.code)) {
200
209
  await sleep(100);
201
210
  continue;
202
211
  }
@@ -282,12 +291,12 @@ class RuntimeWorkerPool {
282
291
  return;
283
292
  }
284
293
  addWorker(trigger, runtime, extensionLogInfo) {
285
- this.log(`addWorker(${this.getKey(trigger === null || trigger === void 0 ? void 0 : trigger.id)})`);
286
- const disableTimeout = !(trigger === null || trigger === void 0 ? void 0 : trigger.id) || this.mode === types_1.FunctionsExecutionMode.SEQUENTIAL;
287
- const worker = new RuntimeWorker(trigger === null || trigger === void 0 ? void 0 : trigger.id, runtime, extensionLogInfo, disableTimeout ? undefined : trigger === null || trigger === void 0 ? void 0 : trigger.timeoutSeconds);
288
- const keyWorkers = this.getTriggerWorkers(trigger === null || trigger === void 0 ? void 0 : trigger.id);
294
+ this.log(`addWorker(${this.getKey(trigger?.id)})`);
295
+ const disableTimeout = !trigger?.id || this.mode === types_1.FunctionsExecutionMode.SEQUENTIAL;
296
+ const worker = new RuntimeWorker(trigger?.id, runtime, extensionLogInfo, disableTimeout ? undefined : trigger?.timeoutSeconds);
297
+ const keyWorkers = this.getTriggerWorkers(trigger?.id);
289
298
  keyWorkers.push(worker);
290
- this.setTriggerWorkers(trigger === null || trigger === void 0 ? void 0 : trigger.id, keyWorkers);
299
+ this.setTriggerWorkers(trigger?.id, keyWorkers);
291
300
  this.log(`Adding worker with key ${worker.triggerKey}, total=${keyWorkers.length}`);
292
301
  return worker;
293
302
  }
@@ -19,9 +19,7 @@ class EmulatorHub extends ExpressBasedEmulator_1.ExpressBasedEmulator {
19
19
  }
20
20
  const data = fs.readFileSync(locatorPath, "utf8").toString();
21
21
  const locator = JSON.parse(data);
22
- if (locator.version !== this.CLI_VERSION) {
23
- logger_1.logger.debug(`Found emulator locator with different version: ${JSON.stringify(locator)}, CLI_VERSION: ${this.CLI_VERSION}`);
24
- }
22
+ logger_1.logger.debug(`Found emulator hub locator: ${JSON.stringify(locator)}`);
25
23
  return locator;
26
24
  }
27
25
  static getLocatorFilePath(projectId) {
@@ -31,7 +29,6 @@ class EmulatorHub extends ExpressBasedEmulator_1.ExpressBasedEmulator {
31
29
  }
32
30
  const filename = `hub-${projectId}.json`;
33
31
  const locatorPath = path.join(dir, filename);
34
- logger_1.logger.debug(`Emulator locator file path: ${locatorPath}`);
35
32
  return locatorPath;
36
33
  }
37
34
  constructor(args) {
@@ -47,14 +44,21 @@ class EmulatorHub extends ExpressBasedEmulator_1.ExpressBasedEmulator {
47
44
  getRunningEmulatorsMapping() {
48
45
  const emulators = {};
49
46
  for (const info of registry_1.EmulatorRegistry.listRunningWithInfo()) {
50
- emulators[info.name] = Object.assign({ listen: this.args.listenForEmulator[info.name] }, info);
47
+ emulators[info.name] = {
48
+ listen: this.args.listenForEmulator[info.name],
49
+ ...info,
50
+ };
51
51
  }
52
52
  return emulators;
53
53
  }
54
54
  async createExpressApp() {
55
55
  const app = await super.createExpressApp();
56
56
  app.get("/", (req, res) => {
57
- res.json(Object.assign(Object.assign({}, this.getLocator()), { host: utils.connectableHostname(this.args.listen[0].address), port: this.args.listen[0].port }));
57
+ res.json({
58
+ ...this.buildLocator(),
59
+ host: utils.connectableHostname(this.args.listen[0].address),
60
+ port: this.args.listen[0].port,
61
+ });
58
62
  });
59
63
  app.get(EmulatorHub.PATH_EMULATORS, (req, res) => {
60
64
  res.json(this.getRunningEmulatorsMapping());
@@ -127,12 +131,11 @@ class EmulatorHub extends ExpressBasedEmulator_1.ExpressBasedEmulator {
127
131
  }
128
132
  async stop() {
129
133
  await super.stop();
130
- await this.deleteLocatorFile();
131
134
  }
132
135
  getName() {
133
136
  return types_1.Emulators.HUB;
134
137
  }
135
- getLocator() {
138
+ buildLocator() {
136
139
  const version = pkg.version;
137
140
  const origins = [];
138
141
  for (const spec of this.args.listen) {
@@ -146,39 +149,34 @@ class EmulatorHub extends ExpressBasedEmulator_1.ExpressBasedEmulator {
146
149
  return {
147
150
  version,
148
151
  origins,
152
+ pid: process.pid,
149
153
  };
150
154
  }
151
155
  async writeLocatorFile() {
152
156
  const projectId = this.args.projectId;
153
- const locatorPath = EmulatorHub.getLocatorFilePath(projectId);
154
- const locator = this.getLocator();
155
- if (fs.existsSync(locatorPath)) {
157
+ const prevLocator = EmulatorHub.readLocatorFile(projectId);
158
+ if (prevLocator && prevLocator.pid && isProcessLive(prevLocator.pid)) {
156
159
  utils.logLabeledWarning("emulators", `It seems that you are running multiple instances of the emulator suite for project ${projectId}. This may result in unexpected behavior.`);
160
+ return;
157
161
  }
158
- logger_1.logger.debug(`[hub] writing locator at ${locatorPath}`);
159
- return new Promise((resolve, reject) => {
160
- fs.writeFile(locatorPath, JSON.stringify(locator), (e) => {
161
- if (e) {
162
- reject(e);
163
- }
164
- else {
165
- resolve();
166
- }
167
- });
168
- });
169
- }
170
- async deleteLocatorFile() {
171
- const locatorPath = EmulatorHub.getLocatorFilePath(this.args.projectId);
172
- return new Promise((resolve, reject) => {
173
- fs.unlink(locatorPath, (e) => {
174
- if (e && e.code !== "ENOENT") {
175
- reject(e);
176
- }
177
- else {
178
- resolve();
162
+ const locatorPath = EmulatorHub.getLocatorFilePath(projectId);
163
+ logger_1.logger.debug(`Write emulator hub locator at ${locatorPath}`);
164
+ fs.writeFileSync(locatorPath, JSON.stringify(this.buildLocator()));
165
+ const cleanup = () => {
166
+ try {
167
+ const curLocator = EmulatorHub.readLocatorFile(projectId);
168
+ if (curLocator && curLocator.pid === process.pid) {
169
+ fs.unlinkSync(locatorPath);
170
+ logger_1.logger.debug(`Delete emulator hub locator file: ${locatorPath}`);
179
171
  }
180
- });
181
- });
172
+ }
173
+ catch (e) {
174
+ logger_1.logger.debug(`Cannot delete emulator hub locator file`, e);
175
+ }
176
+ };
177
+ process.on("SIGINT", cleanup);
178
+ process.on("SIGTERM", cleanup);
179
+ process.on("exit", cleanup);
182
180
  }
183
181
  }
184
182
  exports.EmulatorHub = EmulatorHub;
@@ -189,3 +187,12 @@ EmulatorHub.PATH_DISABLE_FUNCTIONS = "/functions/disableBackgroundTriggers";
189
187
  EmulatorHub.PATH_ENABLE_FUNCTIONS = "/functions/enableBackgroundTriggers";
190
188
  EmulatorHub.PATH_EMULATORS = "/emulators";
191
189
  EmulatorHub.PATH_CLEAR_DATA_CONNECT = "/dataconnect/clearData";
190
+ function isProcessLive(pid) {
191
+ try {
192
+ process.kill(pid, 0);
193
+ return true;
194
+ }
195
+ catch (error) {
196
+ return error.code === "EPERM";
197
+ }
198
+ }
@@ -32,7 +32,7 @@ class EmulatorHubClient {
32
32
  }
33
33
  }
34
34
  }
35
- throw err !== null && err !== void 0 ? err : new Error("Cannot find working hub origin. Tried:" + origins.join(" "));
35
+ throw err ?? new Error("Cannot find working hub origin. Tried:" + origins.join(" "));
36
36
  }
37
37
  async getEmulators() {
38
38
  const res = await this.tryOrigins((client) => client.get(hub_1.EmulatorHub.PATH_EMULATORS));
@@ -12,7 +12,6 @@ const projectUtils_1 = require("../projectUtils");
12
12
  const secrets_1 = require("../apphosting/secrets");
13
13
  exports.AdditionalInitFns = {
14
14
  [types_1.Emulators.APPHOSTING]: async (config) => {
15
- var _a;
16
15
  const cwd = process.cwd();
17
16
  const additionalConfigs = new Map();
18
17
  const logger = emulatorLogger_1.EmulatorLogger.forEmulator(types_1.Emulators.APPHOSTING);
@@ -38,8 +37,8 @@ exports.AdditionalInitFns = {
38
37
  catch (e) {
39
38
  logger.log("WARN", "failed to export app hosting configs");
40
39
  }
41
- const secretIds = (_a = env === null || env === void 0 ? void 0 : env.filter((e) => "secret" in e)) === null || _a === void 0 ? void 0 : _a.map((e) => e.secret);
42
- if (secretIds === null || secretIds === void 0 ? void 0 : secretIds.length) {
40
+ const secretIds = env?.filter((e) => "secret" in e)?.map((e) => e.secret);
41
+ if (secretIds?.length) {
43
42
  if (!projectId) {
44
43
  logger.log("WARN", "Cannot grant developers access to secrets for local development without knowing what project the secret is in. " +
45
44
  `Run ${clc.bold(`firebase apphosting:secrets:grantaccess ${secretIds.join(",")} --project [project] --emails [email list]`)}`);
@@ -84,7 +84,7 @@ class WebSocketTransport extends TransportStream {
84
84
  .map((value) => {
85
85
  if (typeof value === "string") {
86
86
  try {
87
- bundle.data = Object.assign(Object.assign({}, bundle.data), JSON.parse(value));
87
+ bundle.data = { ...bundle.data, ...JSON.parse(value) };
88
88
  return null;
89
89
  }
90
90
  catch (err) {
@@ -92,7 +92,7 @@ class WebSocketTransport extends TransportStream {
92
92
  }
93
93
  }
94
94
  else {
95
- bundle.data = Object.assign(Object.assign({}, bundle.data), value);
95
+ bundle.data = { ...bundle.data, ...value };
96
96
  }
97
97
  })
98
98
  .filter((v) => v);
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.listenSpecsToString = exports.resolveHostAndAssignPorts = exports.waitForPortUsed = exports.checkListenable = void 0;
3
+ exports.checkListenable = checkListenable;
4
+ exports.waitForPortUsed = waitForPortUsed;
5
+ exports.resolveHostAndAssignPorts = resolveHostAndAssignPorts;
6
+ exports.listenSpecsToString = listenSpecsToString;
4
7
  const clc = require("colorette");
5
8
  const tcpport = require("tcp-port-used");
6
9
  const node_net_1 = require("node:net");
@@ -130,7 +133,6 @@ async function checkListenable(arg1, port) {
130
133
  dummyServer.listen({ host: addr.address, port: addr.port, ipv6Only: addr.family === "IPv6" });
131
134
  });
132
135
  }
133
- exports.checkListenable = checkListenable;
134
136
  async function waitForPortUsed(port, host, timeout = 60000) {
135
137
  const interval = 200;
136
138
  try {
@@ -140,7 +142,6 @@ async function waitForPortUsed(port, host, timeout = 60000) {
140
142
  throw new error_1.FirebaseError(`TIMEOUT: Port ${port} on ${host} was not active within ${timeout}ms`);
141
143
  }
142
144
  }
143
- exports.waitForPortUsed = waitForPortUsed;
144
145
  const EMULATOR_CAN_LISTEN_ON_PRIMARY_ONLY = {
145
146
  database: true,
146
147
  firestore: true,
@@ -273,7 +274,6 @@ async function resolveHostAndAssignPorts(listenConfig) {
273
274
  await Promise.all(tasks);
274
275
  return result;
275
276
  }
276
- exports.resolveHostAndAssignPorts = resolveHostAndAssignPorts;
277
277
  function portDescription(name) {
278
278
  return name === "firestore.websocket"
279
279
  ? `websocket server for ${types_1.Emulators.FIRESTORE}`
@@ -338,4 +338,3 @@ function listenSpecsToString(specs) {
338
338
  })
339
339
  .join(",");
340
340
  }
341
- exports.listenSpecsToString = listenSpecsToString;
@@ -80,12 +80,14 @@ class EmulatorRegistry {
80
80
  return this.INSTANCES.get(emulator);
81
81
  }
82
82
  static getInfo(emulator) {
83
- var _a;
84
- const info = (_a = EmulatorRegistry.get(emulator)) === null || _a === void 0 ? void 0 : _a.getInfo();
83
+ const info = EmulatorRegistry.get(emulator)?.getInfo();
85
84
  if (!info) {
86
85
  return undefined;
87
86
  }
88
- return Object.assign(Object.assign({}, info), { host: (0, utils_1.connectableHostname)(info.host) });
87
+ return {
88
+ ...info,
89
+ host: (0, utils_1.connectableHostname)(info.host),
90
+ };
89
91
  }
90
92
  static getDetails(emulator) {
91
93
  return (0, downloadableEmulators_1.get)(emulator);
@@ -116,7 +118,11 @@ class EmulatorRegistry {
116
118
  return url;
117
119
  }
118
120
  static client(emulator, options = {}) {
119
- return new apiv2_1.Client(Object.assign({ urlPrefix: EmulatorRegistry.url(emulator).toString(), auth: false }, options));
121
+ return new apiv2_1.Client({
122
+ urlPrefix: EmulatorRegistry.url(emulator).toString(),
123
+ auth: false,
124
+ ...options,
125
+ });
120
126
  }
121
127
  static set(emulator, instance) {
122
128
  this.INSTANCES.set(emulator, instance);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.reqBodyToBuffer = void 0;
3
+ exports.reqBodyToBuffer = reqBodyToBuffer;
4
4
  async function reqBodyToBuffer(req) {
5
5
  if (req.body instanceof Buffer) {
6
6
  return Buffer.from(req.body);
@@ -16,4 +16,3 @@ async function reqBodyToBuffer(req) {
16
16
  });
17
17
  return Buffer.concat(bufs);
18
18
  }
19
- exports.reqBodyToBuffer = reqBodyToBuffer;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createFirebaseEndpoints = void 0;
3
+ exports.createFirebaseEndpoints = createFirebaseEndpoints;
4
4
  const emulatorLogger_1 = require("../../emulatorLogger");
5
5
  const types_1 = require("../../types");
6
6
  const uuid = require("uuid");
@@ -69,7 +69,6 @@ function createFirebaseEndpoints(emulator) {
69
69
  next();
70
70
  });
71
71
  firebaseStorageAPI.get("/b/:bucketId/o/:objectId", async (req, res) => {
72
- var _a;
73
72
  let metadata;
74
73
  let data;
75
74
  try {
@@ -77,7 +76,7 @@ function createFirebaseEndpoints(emulator) {
77
76
  bucketId: req.params.bucketId,
78
77
  decodedObjectId: decodeURIComponent(req.params.objectId),
79
78
  authorization: req.header("authorization"),
80
- downloadToken: (_a = req.query.token) === null || _a === void 0 ? void 0 : _a.toString(),
79
+ downloadToken: req.query.token?.toString(),
81
80
  }));
82
81
  }
83
82
  catch (err) {
@@ -103,8 +102,7 @@ function createFirebaseEndpoints(emulator) {
103
102
  return res.json(new metadata_1.OutgoingFirebaseMetadata(metadata));
104
103
  });
105
104
  firebaseStorageAPI.get("/b/:bucketId/o", async (req, res) => {
106
- var _a, _b, _c, _d;
107
- const maxResults = (_a = req.query.maxResults) === null || _a === void 0 ? void 0 : _a.toString();
105
+ const maxResults = req.query.maxResults?.toString();
108
106
  let listResponse;
109
107
  let prefix = "";
110
108
  if (req.query.prefix) {
@@ -123,7 +121,7 @@ function createFirebaseEndpoints(emulator) {
123
121
  bucketId: req.params.bucketId,
124
122
  prefix: prefix,
125
123
  delimiter: req.query.delimiter ? req.query.delimiter.toString() : "",
126
- pageToken: (_b = req.query.pageToken) === null || _b === void 0 ? void 0 : _b.toString(),
124
+ pageToken: req.query.pageToken?.toString(),
127
125
  maxResults: maxResults ? +maxResults : undefined,
128
126
  authorization: req.header("authorization"),
129
127
  });
@@ -141,8 +139,8 @@ function createFirebaseEndpoints(emulator) {
141
139
  }
142
140
  return res.status(200).json({
143
141
  nextPageToken: listResponse.nextPageToken,
144
- prefixes: ((_c = listResponse.prefixes) !== null && _c !== void 0 ? _c : []).filter(isValidPrefix),
145
- items: ((_d = listResponse.items) !== null && _d !== void 0 ? _d : [])
142
+ prefixes: (listResponse.prefixes ?? []).filter(isValidPrefix),
143
+ items: (listResponse.items ?? [])
146
144
  .filter((item) => isValidNonEncodedPathString(item.name))
147
145
  .map((item) => {
148
146
  return { name: item.name, bucket: item.bucket };
@@ -150,17 +148,18 @@ function createFirebaseEndpoints(emulator) {
150
148
  });
151
149
  });
152
150
  const handleUpload = async (req, res) => {
153
- var _a, _b;
154
151
  const bucketId = req.params.bucketId;
155
152
  const objectId = req.params.objectId
156
153
  ? decodeURIComponent(req.params.objectId)
157
- : ((_a = req.query.name) === null || _a === void 0 ? void 0 : _a.toString()) || null;
158
- const uploadType = (_b = req.header("x-goog-upload-protocol")) === null || _b === void 0 ? void 0 : _b.toString();
154
+ : req.query.name?.toString() || null;
155
+ const uploadType = req.header("x-goog-upload-protocol")?.toString();
159
156
  async function finalizeOneShotUpload(upload) {
160
- var _a, _b, _c;
161
- if (!((_b = (_a = upload.metadata) === null || _a === void 0 ? void 0 : _a.metadata) === null || _b === void 0 ? void 0 : _b.firebaseStorageDownloadTokens)) {
162
- const customMetadata = Object.assign(Object.assign({}, (((_c = upload.metadata) === null || _c === void 0 ? void 0 : _c.metadata) || {})), { firebaseStorageDownloadTokens: uuid.v4() });
163
- upload.metadata = Object.assign(Object.assign({}, (upload.metadata || {})), { metadata: customMetadata });
157
+ if (!upload.metadata?.metadata?.firebaseStorageDownloadTokens) {
158
+ const customMetadata = {
159
+ ...(upload.metadata?.metadata || {}),
160
+ firebaseStorageDownloadTokens: uuid.v4(),
161
+ };
162
+ upload.metadata = { ...(upload.metadata || {}), metadata: customMetadata };
164
163
  }
165
164
  let metadata;
166
165
  try {
@@ -329,7 +328,6 @@ function createFirebaseEndpoints(emulator) {
329
328
  return await finalizeOneShotUpload(upload);
330
329
  };
331
330
  const handleTokenRequest = (req, res) => {
332
- var _a, _b;
333
331
  if (!req.query.create_token && !req.query.delete_token) {
334
332
  return res.sendStatus(400);
335
333
  }
@@ -368,7 +366,7 @@ function createFirebaseEndpoints(emulator) {
368
366
  metadata = storageLayer.deleteDownloadToken({
369
367
  bucketId,
370
368
  decodedObjectId,
371
- token: (_b = (_a = req.query["delete_token"]) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : "",
369
+ token: req.query["delete_token"]?.toString() ?? "",
372
370
  authorization,
373
371
  });
374
372
  }
@@ -425,8 +423,7 @@ function createFirebaseEndpoints(emulator) {
425
423
  };
426
424
  firebaseStorageAPI.patch("/b/:bucketId/o/:objectId", handleMetadataUpdate);
427
425
  firebaseStorageAPI.put("/b/:bucketId/o/:objectId?", async (req, res) => {
428
- var _a;
429
- switch ((_a = req.header("x-http-method-override")) === null || _a === void 0 ? void 0 : _a.toLowerCase()) {
426
+ switch (req.header("x-http-method-override")?.toLowerCase()) {
430
427
  case "patch":
431
428
  return handleMetadataUpdate(req, res);
432
429
  default:
@@ -463,7 +460,6 @@ function createFirebaseEndpoints(emulator) {
463
460
  });
464
461
  return firebaseStorageAPI;
465
462
  }
466
- exports.createFirebaseEndpoints = createFirebaseEndpoints;
467
463
  function setObjectHeaders(res, metadata) {
468
464
  if (metadata.contentDisposition) {
469
465
  res.setHeader("Content-Disposition", metadata.contentDisposition);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createCloudEndpoints = void 0;
3
+ exports.createCloudEndpoints = createCloudEndpoints;
4
4
  const express_1 = require("express");
5
5
  const types_1 = require("../../types");
6
6
  const metadata_1 = require("../metadata");
@@ -110,7 +110,6 @@ function createCloudEndpoints(emulator) {
110
110
  return res.json(new metadata_1.CloudStorageObjectMetadata(updatedMetadata));
111
111
  });
112
112
  gcloudStorageAPI.get(["/b/:bucketId/o", "/storage/v1/b/:bucketId/o"], async (req, res) => {
113
- var _a;
114
113
  let listResponse;
115
114
  try {
116
115
  listResponse = await adminStorageLayer.listObjects({
@@ -132,7 +131,7 @@ function createCloudEndpoints(emulator) {
132
131
  kind: "storage#objects",
133
132
  nextPageToken: listResponse.nextPageToken,
134
133
  prefixes: listResponse.prefixes,
135
- items: (_a = listResponse.items) === null || _a === void 0 ? void 0 : _a.map((item) => new metadata_1.CloudStorageObjectMetadata(item)),
134
+ items: listResponse.items?.map((item) => new metadata_1.CloudStorageObjectMetadata(item)),
136
135
  });
137
136
  });
138
137
  gcloudStorageAPI.delete(["/b/:bucketId/o/:objectId", "/storage/v1/b/:bucketId/o/:objectId"], async (req, res) => {
@@ -231,7 +230,7 @@ function createCloudEndpoints(emulator) {
231
230
  const upload = uploadService.startResumableUpload({
232
231
  bucketId: req.params.bucketId,
233
232
  objectId: name,
234
- metadata: Object.assign({ contentType }, req.body),
233
+ metadata: { contentType, ...req.body },
235
234
  authorization: req.header("authorization"),
236
235
  });
237
236
  const uploadUrl = registry_1.EmulatorRegistry.url(types_1.Emulators.STORAGE, req);
@@ -284,7 +283,7 @@ function createCloudEndpoints(emulator) {
284
283
  const upload = uploadService.multipartUpload({
285
284
  bucketId: req.params.bucketId,
286
285
  objectId: name,
287
- metadata: Object.assign({ contentType }, JSON.parse(metadataRaw)),
286
+ metadata: { contentType, ...JSON.parse(metadataRaw) },
288
287
  dataRaw: dataRaw,
289
288
  authorization: req.header("authorization"),
290
289
  });
@@ -375,7 +374,6 @@ function createCloudEndpoints(emulator) {
375
374
  });
376
375
  return gcloudStorageAPI;
377
376
  }
378
- exports.createCloudEndpoints = createCloudEndpoints;
379
377
  function sendObjectNotFound(req, res) {
380
378
  res.status(404);
381
379
  const message = `No such object: ${req.params.bucketId}/${req.params.objectId}`;
@@ -399,7 +397,6 @@ function sendObjectNotFound(req, res) {
399
397
  }
400
398
  }
401
399
  function getIncomingFileNameFromRequest(query, metadata) {
402
- var _a;
403
- const name = ((_a = query === null || query === void 0 ? void 0 : query.name) === null || _a === void 0 ? void 0 : _a.toString()) || (metadata === null || metadata === void 0 ? void 0 : metadata.name);
404
- return (name === null || name === void 0 ? void 0 : name.startsWith("/")) ? name.slice(1) : name;
400
+ const name = query?.name?.toString() || metadata?.name;
401
+ return name?.startsWith("/") ? name.slice(1) : name;
405
402
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sendFileBytes = void 0;
3
+ exports.sendFileBytes = sendFileBytes;
4
4
  const zlib_1 = require("zlib");
5
5
  const crc_1 = require("../crc");
6
6
  const rfc_1 = require("../rfc");
@@ -42,4 +42,3 @@ function sendFileBytes(md, data, req, res) {
42
42
  }
43
43
  res.end(data);
44
44
  }
45
- exports.sendFileBytes = sendFileBytes;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.crc32cToString = exports.crc32c = void 0;
3
+ exports.crc32c = crc32c;
4
+ exports.crc32cToString = crc32cToString;
4
5
  function makeCRCTable(poly) {
5
6
  let c;
6
7
  const crcTable = [];
@@ -23,11 +24,9 @@ function crc32c(bytes) {
23
24
  }
24
25
  return (crc ^ -1) >>> 0;
25
26
  }
26
- exports.crc32c = crc32c;
27
27
  function crc32cToString(crc32cValue) {
28
28
  const value = typeof crc32cValue === "string" ? Number.parseInt(crc32cValue) : crc32cValue;
29
29
  const buffer = Buffer.alloc(4);
30
30
  buffer.writeUint32BE(value);
31
31
  return buffer.toString("base64");
32
32
  }
33
- exports.crc32cToString = crc32cToString;