@itwin/object-storage-google
Version:
Object storage implementation using Google Cloud Storage
128 lines • 6.08 kB
JavaScript
"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