@jackdbd/r2-media-store
Version:
Store Micropub media in a Cloudflare R2 bucket.
47 lines • 1.54 kB
JavaScript
import { S3Client } from '@aws-sdk/client-s3';
import { defHardDeleteMedia } from './delete.js';
import { defUpload } from './upload.js';
import { defaultLog } from './log.js';
const defaults = {
bucket_prefix: 'media/',
ignore_filename: false,
log: defaultLog
};
/**
* Allows to upload files to a Cloudflare R2 bucket (R2 implements the S3 API).
*
* @see [S3 API compatibility](https://developers.cloudflare.com/r2/api/s3/api/)
*/
export const defR2 = (config) => {
const store_cfg = Object.assign({}, defaults, config);
const { account_id, bucket_name, bucket_prefix, credentials, ignore_filename, log } = store_cfg;
const public_base_url = store_cfg.public_base_url.endsWith('/')
? store_cfg.public_base_url
: `${store_cfg.public_base_url}/`;
const region = 'auto';
const endpoint = `https://${account_id}.r2.cloudflarestorage.com`;
const store_name = `Cloudflare R2 bucket ${bucket_name} (region ${region})`;
const info = {
account_id,
name: store_name,
bucket_name,
bucket_prefix,
endpoint,
ignore_filename,
public_base_url
};
const s3 = new S3Client({ region, endpoint, credentials });
return {
delete: defHardDeleteMedia({ bucket_name, bucket_prefix, log, s3 }),
info,
upload: defUpload({
bucket_name,
bucket_prefix,
ignore_filename,
log,
public_base_url,
s3
})
};
};
//# sourceMappingURL=client.js.map