UNPKG

nestjs-azure-storage-blob

Version:

Azure Blob Storage module for Nest.js

143 lines 5.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AzureStorageBlobService = void 0; const tslib_1 = require("tslib"); const storage_blob_1 = require("@azure/storage-blob"); const common_1 = require("@nestjs/common"); const azure_storage_blob_decorator_1 = require("./azure-storage-blob.decorator"); /** * request headers * https://learn.microsoft.com/rest/api/storageservices/put-blob#request-headers-all-blob-types */ let AzureStorageBlobService = class AzureStorageBlobService { constructor(blobServiceClient) { this.blobServiceClient = blobServiceClient; this.containerName = process.env.NEST_STORAGE_BLOB_CONTAINER; } getClient() { return this.blobServiceClient; } getContainerName() { return this.containerName; } convertToResourceTypes(resourceTypeMap = { container: true, object: true, service: true, }) { const resType = new storage_blob_1.AccountSASResourceTypes(); if (resourceTypeMap.container) { resType.container = true; } if (resourceTypeMap.object) { resType.object = true; } if (resourceTypeMap.service) { resType.service = true; } return resType.toString(); } getAccountSasUrl(expiresOn = new Date(Date.now() + 5 * 60 * 1000), permissions = { read: true }, resourceTypeMap = { container: true, object: true, service: true, }, options) { const _permissions = storage_blob_1.AccountSASPermissions.from(permissions); const resourceTypes = this.convertToResourceTypes(resourceTypeMap); const accountSasUrl = this.blobServiceClient.generateAccountSasUrl(expiresOn, _permissions, resourceTypes, options); const data = { sasUrl: accountSasUrl, headers: {}, }; return data; } async getContainerSasUrl(containerName, permissions = { read: true, }, options = { expiresOn: new Date(Date.now() + 5 * 60 * 1000), }) { const _permissions = storage_blob_1.ContainerSASPermissions.from(permissions); const containerSasUrl = await this.blobServiceClient .getContainerClient(containerName) .generateSasUrl({ ...options, permissions: _permissions, }); const data = { sasUrl: containerSasUrl, headers: {}, }; return data; } async getBlockBlobSasUrl(containerName, blobName, permissions = { read: true, create: true, }, options = {}) { // - How to use this sasURl? // PUT {{sasUrl}} with header 'x-ms-blob-type: BlockBlob' // header setting is mendatory // and attach file to body // - How to revoke sasUrl after upload? // https://stackoverflow.com/questions/26206993/how-to-revoke-shared-access-signature-in-azure-sdk // https://www.youtube.com/watch?v=lFFYcNbDvdo const _permissions = storage_blob_1.BlobSASPermissions.from(permissions); const sasUrl = await this.blobServiceClient .getContainerClient(containerName) .getBlockBlobClient(blobName) .generateSasUrl({ ...options, permissions: _permissions, }); const data = { sasUrl, headers: { 'x-ms-blob-type': 'BlockBlob' }, }; return data; } async getUploadable(containerName, blobName, expiresIn = 5 * 60 * 1000) { const { sasUrl: uploadUrl, headers } = await this.getBlockBlobSasUrl(containerName, blobName, { create: true }, { expiresOn: new Date(Date.now() + expiresIn) }); const { sasUrl: downloadUrl } = await this.getBlockBlobSasUrl(containerName, blobName, { read: true }, { expiresOn: new Date(Date.now() + expiresIn) }); const data = { upload: { method: 'PUT', url: uploadUrl, headers, expiresIn, }, download: { method: 'GET', url: downloadUrl, expiresIn, }, }; return data; } async listFiles(destination, containerName) { const container = this.blobServiceClient.getContainerClient(containerName); const files = container.listBlobsFlat({ prefix: destination }); const paths = []; for await (const file of files) { paths.push(file); } return paths; } async deleteFile(container, blob) { return this.blobServiceClient.getContainerClient(container).getBlockBlobClient(blob).delete(); } async deleteFileIfExists(container, blob) { return this.blobServiceClient .getContainerClient(container) .getBlockBlobClient(blob) .deleteIfExists(); } async downloadStream(container, blob) { return this.blobServiceClient.getContainerClient(container).getBlockBlobClient(blob).download(); } }; exports.AzureStorageBlobService = AzureStorageBlobService; exports.AzureStorageBlobService = AzureStorageBlobService = tslib_1.__decorate([ (0, common_1.Injectable)(), tslib_1.__param(0, (0, azure_storage_blob_decorator_1.InjectStorageBlob)()), tslib_1.__metadata("design:paramtypes", [storage_blob_1.BlobServiceClient]) ], AzureStorageBlobService); //# sourceMappingURL=azure-storage-blob.service.js.map