renovate/lib/util/s3.ts

36 lines
921 B
TypeScript
Raw Normal View History

// Singleton S3 instance initialized on-demand.
import { S3Client } from '@aws-sdk/client-s3';
import { parseUrl } from './url';
let s3Instance: S3Client | undefined;
export function getS3Client(): S3Client {
if (!s3Instance) {
const endpoint = process.env.RENOVATE_X_S3_ENDPOINT;
const forcePathStyle = process.env.RENOVATE_X_S3_PATH_STYLE;
s3Instance = new S3Client({
...(endpoint && { endpoint }),
...(forcePathStyle && { forcePathStyle: true }),
});
}
return s3Instance;
}
export interface S3UrlParts {
Bucket: string;
Key: string;
}
export function parseS3Url(rawUrl: URL | string): S3UrlParts | null {
const parsedUrl = typeof rawUrl === 'string' ? parseUrl(rawUrl) : rawUrl;
if (parsedUrl === null) {
return null;
}
if (parsedUrl.protocol !== 's3:') {
return null;
}
return {
Bucket: parsedUrl.host,
Key: parsedUrl.pathname.substring(1),
};
}