export async function getOrCreateStorageBucket()

in packages/synthetics-sdk-broken-links/src/storage_func.ts [53:111]


export async function getOrCreateStorageBucket(
  storageClient: Storage | null,
  storageLocation: string,
  errors: BaseError[]
): Promise<Bucket | null> {
  let bucketName = '';

  try {
    if (!storageClient) return null;

    const projectId = sanitizeObjectName(await resolveProjectId());
    const region = sanitizeObjectName(await getExecutionRegion());

    // if the user chose to use/create the default bucket but we were not able
    // to resolve projectId or cloudRegion
    if (!storageLocation && (!projectId || !region)) return null;

    bucketName = storageLocation
      ? storageLocation.split('/')[0]
      : `gcm-${projectId}-synthetics-${region}`;

    const bucket = storageClient.bucket(bucketName);
    const [bucketExists] = await bucket.exists();

    if (bucketExists) {
      return bucket; // Bucket exists, return it
    } else if (!storageLocation) {
      // Create only if no location was provided
      const [newBucket] = await bucket.create({
        location: region,
        storageClass: 'STANDARD',
      });
      return newBucket;
    } else {
      // User-provided invalid location
      errors.push({
        error_type: 'InvalidStorageLocation',
        error_message: `Invalid storage_location: Bucket ${bucketName} does not exist.`,
      });
    }
  } catch (err) {
    const errorType = storageLocation
      ? 'StorageValidationError'
      : 'BucketCreationError';

    // Using console.error rather than stderr.write since err type is unknown
    console.error(errorType, err);

    errors.push({
      // General error handling
      error_type: errorType,
      error_message: `Failed to ${
        storageLocation ? 'validate' : 'create'
      } bucket ${bucketName}. Please reference server logs for further information.`,
    });
  }

  return null; // Return null if bucket retrieval or creation failed
}