UNPKG

@jackdbd/r2-media-store

Version:

Store Micropub media in a Cloudflare R2 bucket.

47 lines 1.54 kB
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