UNPKG

@itwin/object-storage-google

Version:

Object storage implementation using Google Cloud Storage

128 lines 6.08 kB
"use strict"; /*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); exports.GoogleServerStorage = void 0; const internal_1 = require("@itwin/object-storage-core/lib/common/internal"); const internal_2 = require("@itwin/object-storage-core/lib/server/internal"); const object_storage_core_1 = require("@itwin/object-storage-core"); class GoogleServerStorage extends object_storage_core_1.ServerStorage { _storage; _storageControl; _bucketName; constructor(_storage, _storageControl, config) { super(); this._storage = _storage; this._storageControl = _storageControl; this._bucketName = config.bucketName; } get bucketName() { return this._bucketName; } async download(reference, transferType, localPath) { (0, internal_1.assertRelativeDirectory)(reference.relativeDirectory); if (transferType === "local") { (0, internal_2.assertLocalFile)(localPath); await this._storage.downloadFile(reference, localPath); return localPath; } const downloadBuffer = await this._storage.downloadFile(reference); return (0, internal_2.bufferToTransferType)(downloadBuffer, transferType); } async upload(reference, data, metadata, headers) { (0, internal_1.assertRelativeDirectory)(reference.relativeDirectory); if (typeof data === "string") await (0, internal_2.assertFileNotEmpty)(data); await this._storage.uploadFile(reference, data, metadata, headers); } async uploadInMultipleParts(reference, data, options, headers) { (0, internal_1.assertRelativeDirectory)(reference.relativeDirectory); if (typeof data === "string") await (0, internal_2.assertFileNotEmpty)(data); await this._storage.uploadFile(reference, data, options?.metadata, headers, options?.partSize); } createBaseDirectory(directory) { return this._storageControl.createManagedFolder(directory.baseDirectory); } getListDirectoriesPagedIterator(_maxPageSize) { return new object_storage_core_1.EntityPageListIterator(async () => { return this._storageControl.getManagedFoldersNextPage({ maxPageSize: _maxPageSize, }); }); } getListObjectsPagedIterator(directory, maxPageSize) { return new object_storage_core_1.EntityPageListIterator(async () => { return this._storage.getFilesNextPage({ directory: directory, maxPageSize: maxPageSize, }); }); } list(directory) { return this.listObjects(directory); } async deleteBaseDirectory(directory) { for await (const objectPage of this.getListObjectsPagedIterator(directory, 100)) { for (const object of objectPage) { await this.deleteObject(object); } } return this._storageControl.deleteManagedFolder(directory.baseDirectory); } deleteObject(reference) { (0, internal_1.assertRelativeDirectory)(reference.relativeDirectory); return this._storage.deleteFile(reference); } async baseDirectoryExists(directory) { return await this._storageControl.managedFolderExists(directory.baseDirectory); } async objectExists(reference) { (0, internal_1.assertRelativeDirectory)(reference.relativeDirectory); return await this._storage.fileExists(reference); } async copyObject(sourceStorage, sourceReference, targetReference) { return await this._storage.copyFile(sourceStorage.bucketName, sourceReference, targetReference); } async updateMetadata(reference, metadata) { (0, internal_1.assertRelativeDirectory)(reference.relativeDirectory); return await this._storage.updateMetadata(reference, metadata); } async getObjectProperties(reference) { (0, internal_1.assertRelativeDirectory)(reference.relativeDirectory); return await this._storage.getObjectProperties(reference); } async getDownloadUrl(reference, expiry) { (0, internal_1.assertRelativeDirectory)(reference.relativeDirectory); return await this._storage.getSignedUrl("read", reference, expiry); } async getUploadUrl(reference, expiry) { (0, internal_1.assertRelativeDirectory)(reference.relativeDirectory); return await this._storage.getSignedUrl("write", reference, expiry); } async getDownloadConfig(directory, expiry) { (0, internal_1.assertRelativeDirectory)(directory.relativeDirectory); (0, internal_2.getExpiryDate)(expiry); const directoryPath = (0, internal_1.buildObjectDirectoryString)(directory); return await this._storageControl.createAccessToken("read", directoryPath); } async getUploadConfig(directory, expiry) { (0, internal_1.assertRelativeDirectory)(directory.relativeDirectory); (0, internal_2.getExpiryDate)(expiry); const directoryPath = (0, internal_1.buildObjectDirectoryString)(directory); return await this._storageControl.createAccessToken("write", directoryPath); } async getDirectoryAccessConfig(directory, expiry) { (0, internal_1.assertRelativeDirectory)(directory.relativeDirectory); (0, internal_2.getExpiryDate)(expiry); const directoryPath = (0, internal_1.buildObjectDirectoryString)(directory); return await this._storageControl.createAccessToken("user", directoryPath); } async releaseResources() { await this._storageControl.releaseResources(); } } exports.GoogleServerStorage = GoogleServerStorage; //# sourceMappingURL=GoogleServerStorage.js.map