UNPKG

@itwin/object-storage-google

Version:

Object storage implementation using Google Cloud Storage

147 lines 7.51 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. *--------------------------------------------------------------------------------------------*/ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.GoogleServerStorage = void 0; const inversify_1 = require("inversify"); 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"); const common_1 = require("../common"); const wrappers_1 = require("./wrappers"); const StorageControlClientWrapper_1 = require("./wrappers/StorageControlClientWrapper"); let GoogleServerStorage = class GoogleServerStorage extends object_storage_core_1.ServerStorage { 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; exports.GoogleServerStorage = GoogleServerStorage = __decorate([ (0, inversify_1.injectable)(), __param(2, (0, inversify_1.inject)(common_1.Types.GoogleServer.config)), __metadata("design:paramtypes", [wrappers_1.StorageWrapper, StorageControlClientWrapper_1.StorageControlClientWrapper, Object]) ], GoogleServerStorage); //# sourceMappingURL=GoogleServerStorage.js.map