UNPKG

@edgestore/server

Version:

Upload files with ease from React/Next.js

64 lines (61 loc) 2.33 kB
import { BlobServiceClient } from '@azure/storage-blob'; import { v4 } from 'uuid'; import { g as getEnv } from '../../shared-c6527780.mjs'; import '@edgestore/shared'; import '@panva/hkdf'; import 'cookie'; import 'jose'; function AzureProvider(options) { const { storageAccountName = getEnv('ES_AZURE_ACCOUNT_NAME'), sasToken = getEnv('ES_AZURE_SAS_TOKEN'), containerName = getEnv('ES_AZURE_CONTAINER_NAME'), customBaseUrl = getEnv('ES_AZURE_BASE_URL') } = options ?? {}; const baseUrl = customBaseUrl ?? `https://${storageAccountName}.blob.core.windows.net`; const blobServiceClient = new BlobServiceClient(`${baseUrl}?${sasToken}`); const containerClient = blobServiceClient.getContainerClient(containerName ?? ''); return { name: 'azure', async init () { return {}; }, getBaseUrl () { return baseUrl; }, async getFile ({ url }) { const blobClient = containerClient.getBlobClient(url); const { contentLength, lastModified } = await blobClient.getProperties(); return { url: url, metadata: {}, path: {}, size: contentLength ?? 0, uploadedAt: lastModified ?? new Date() }; }, async requestUpload ({ fileInfo }) { const nameId = v4(); const extension = fileInfo.extension ? `.${fileInfo.extension.replace('.', '')}` : ''; const fileName = fileInfo.fileName ?? `${nameId}${extension}`; const blobClient = containerClient.getBlobClient(fileName); const url = blobClient.url; return { uploadUrl: url, accessUrl: url }; }, async requestUploadParts () { throw new Error('Not implemented'); }, async completeMultipartUpload () { throw new Error('Not implemented'); }, async confirmUpload () { throw new Error('Not implemented'); }, async deleteFile ({ url }) { const blobClient = containerClient.getBlobClient(url); await blobClient.delete(); return { success: true }; } }; } export { AzureProvider };