diff --git a/CHANGELOG.md b/CHANGELOG.md index e071ec93eb6..deb06d59953 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,2 +1,5 @@ -- Fix blocking functions in the emulator when using multiple codebases (#6504). -- Add force flag call-out for bypassing prompts (#6506). +- Breaking: dropped support for running the CLI on Node.js v16. +- Added support for running the CLI on Node.js v20. Installations from https://firebase.tools will now use Node.js 20. +- Switched Storage deployment to use GetDefaultBucket endpoint to fetch default Storage bucket. (#6467) +- Fixed an issue with emulating blocking functions when using multiple codebases (#6504). +- Added force flag call-out for bypassing prompts (#6506). diff --git a/src/gcp/storage.ts b/src/gcp/storage.ts index b50bf83eaa5..d74235e2ab0 100644 --- a/src/gcp/storage.ts +++ b/src/gcp/storage.ts @@ -1,11 +1,11 @@ import { Readable } from "stream"; import * as path from "path"; -import { storageOrigin } from "../api"; +import { firebaseStorageOrigin, storageOrigin } from "../api"; import { Client } from "../apiv2"; import { FirebaseError } from "../error"; import { logger } from "../logger"; -import { getFirebaseProject } from "../management/projects"; +import { ensure } from "../ensureApiEnabled"; /** Bucket Interface */ interface BucketResponse { @@ -133,6 +133,14 @@ interface ListBucketsResponse { ]; } +interface GetDefaultBucketResponse { + name: string; + location: string; + bucket: { + name: string; + }; +} + /** Response type for obtaining the storage service agent */ interface StorageServiceAccountResponse { email_address: string; @@ -140,15 +148,19 @@ interface StorageServiceAccountResponse { } export async function getDefaultBucket(projectId: string): Promise { + await ensure(projectId, "firebasestorage.googleapis.com", "storage", false); try { - const metadata = await getFirebaseProject(projectId); - if (!metadata.resources?.storageBucket) { + const localAPIClient = new Client({ urlPrefix: firebaseStorageOrigin, apiVersion: "v1alpha" }); + const response = await localAPIClient.get( + `/projects/${projectId}/defaultBucket` + ); + if (!response.body?.bucket.name) { logger.debug("Default storage bucket is undefined."); throw new FirebaseError( "Your project is being set up. Please wait a minute before deploying again." ); } - return metadata.resources.storageBucket; + return response.body.bucket.name.split("/").pop()!; } catch (err: any) { logger.info( "\n\nThere was an issue deploying your functions. Verify that your project has a Google App Engine instance setup at https://console.cloud.google.com/appengine and try again. If this issue persists, please contact support."