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
}