UNPKG

apim-developer-portal1

Version:

API management developer portal

100 lines (84 loc) 3.65 kB
import { MapiClient } from "./../services/mapiClient"; import { IBlobStorage } from "@paperbits/common/persistence"; import { AzureBlobStorage } from "@paperbits/azure"; import { StaticSettingsProvider } from "../components/staticSettingsProvider"; import { ISettingsProvider } from "@paperbits/common/configuration"; const defaultContainerName = "content"; export class MapiBlobStorage implements IBlobStorage { private storageClient: AzureBlobStorage; constructor( private readonly mapiClient: MapiClient, private readonly settingsProvider: ISettingsProvider ) { } private async getStorageClient(): Promise<AzureBlobStorage> { if (this.storageClient) { return this.storageClient; } let storageSettingsProvider: ISettingsProvider; const blobStorageContainer = await this.settingsProvider.getSetting<string>("blobStorageContainer"); const blobStorageConnectionString = await this.settingsProvider.getSetting<string>("blobStorageConnectionString"); const blobStorageUrl = await this.settingsProvider.getSetting<string>("blobStorageUrl"); if (blobStorageConnectionString) { storageSettingsProvider = new StaticSettingsProvider({ blobStorageConnectionString: blobStorageConnectionString, blobStorageContainer: blobStorageContainer || defaultContainerName }); } else if (blobStorageUrl) { storageSettingsProvider = new StaticSettingsProvider({ blobStorageUrl: blobStorageUrl, blobStorageContainer: blobStorageContainer || defaultContainerName }); } else { const result = await this.mapiClient.post<any>(`/portalSettings/mediaContent/listSecrets`); const blobStorageUrl = result.containerSasUrl; storageSettingsProvider = new StaticSettingsProvider({ blobStorageUrl: blobStorageUrl }); } this.storageClient = new AzureBlobStorage(storageSettingsProvider); return this.storageClient; } /** * Lists all blobs in storage. */ public async listBlobs?(): Promise<string[]> { const client = await this.getStorageClient(); return await client.listBlobs(); } /** * Uploads blob with specified key to storage. * @param blobKey Unique blob identifier. * @param content Content in form of byte array. * @param contentType Content type (MIME) of the content. */ public async uploadBlob(blobKey: string, content: Uint8Array, contentType?: string): Promise<void> { const client = await this.getStorageClient(); return await client.uploadBlob(blobKey, content, contentType); } /** * Downloads blob with specified key. * @param blobKey Unique blob identifier. */ public async downloadBlob?(blobKey: string): Promise<Uint8Array> { const client = await this.getStorageClient(); return await client.downloadBlob(blobKey); } /** * Returns download URL of uploaded blob. * @param blobKey Unique blob identifier. */ public async getDownloadUrl(blobKey: string): Promise<string> { const client = await this.getStorageClient(); return await client.getDownloadUrl(blobKey); } /** * Removes specified blob from memory. * @param blobKey Unique blob identifier. */ public async deleteBlob(blobKey: string): Promise<void> { const client = await this.getStorageClient(); return await client.deleteBlob(blobKey); } }