Vercel/src/services/storage/vercel-blob.ts
2024-01-20 23:40:18 -06:00

48 lines
1.2 KiB
TypeScript

import { PATH_API_VERCEL_BLOB_UPLOAD } from '@/site/paths';
import { copy, del, list } from '@vercel/blob';
import { upload } from '@vercel/blob/client';
const VERCEL_BLOB_STORE_ID = process.env.BLOB_READ_WRITE_TOKEN?.match(
/^vercel_blob_rw_([a-z0-9]+)_[a-z0-9]+$/i,
)?.[1].toLowerCase();
export const VERCEL_BLOB_BASE_URL =
`https://${VERCEL_BLOB_STORE_ID}.public.blob.vercel-storage.com`;
export const isUrlFromVercelBlob = (url: string) =>
url.startsWith(VERCEL_BLOB_BASE_URL);
export const vercelBlobUploadFromClient = async (
file: File | Blob,
fileName: string,
) =>
upload(
fileName,
file,
{
access: 'public',
handleUploadUrl: PATH_API_VERCEL_BLOB_UPLOAD,
},
)
.then(({ url }) => url);
export const vercelBlobCopy = (
fileNameSource: string,
fileNameDestination: string,
addRandomSuffix?: boolean,
): Promise<string> =>
copy(
fileNameSource,
fileNameDestination,
{
access: 'public',
addRandomSuffix,
},
)
.then(({ url }) => url);
export const vercelBlobDelete = (fileName: string) => del(fileName);
export const vercelBlobList = (prefix: string) => list({ prefix })
.then(({ blobs }) => blobs.map(({ url }) => url));