UNPKG

@metatime/pinning-service

Version:

Pinning service that is built on Google Cloud Storage on top of IPFS.

128 lines (127 loc) 4.14 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const storage_1 = require("@google-cloud/storage"); const operation_error_1 = __importDefault(require("../utils/operation-error")); /** * A class that provides GCP storage interactions * @class BucketHelper * @implements {IBucketHelper} - BucketHelper class interface * @property {any} credentials - Google Cloud Storage credentials */ class BucketHelper { baseUri; /** @private */ credentials; /** * @param {string} _baseUri * @param {any} _credentials */ constructor(_baseUri, _credentials) { this.baseUri = _baseUri; this.credentials = _credentials; } /** * @returns {Storage} - Google Cloud Storage instance */ get storage() { return new storage_1.Storage({ credentials: this.credentials, }); } /** * Returns bucket from its name * @param {string} name - Bucket name * @returns Bucket | null */ getBucket(name) { try { const bucket = this.storage.bucket(name); if (bucket) { return bucket; } return null; } catch (err) { const msg = `[getBucket]: Error occured while trying to get bucket...\nDetails: ${err}`; throw new operation_error_1.default(msg, -1); } } /** * Returns buckets with the define GCP storage credentials * @returns Promise<GetBucketsResponse> */ async getBuckets() { try { const buckets = await this.storage.getBuckets(); return buckets; } catch (err) { const msg = `[getBuckets]: Error occured while trying to get buckets...\nDetails: ${err}`; throw new operation_error_1.default(msg, -1); } } /** * Creates bucket from given name * @param {string} name * @returns Promise<{ bucket: Bucket, response: any; }> */ async createBucket(name) { try { const [bucket, response] = await this.storage.createBucket(name); return { bucket, response }; } catch (err) { const msg = `[createBucket]: Error occured while trying to create bucket...\nDetails: ${err}`; throw new operation_error_1.default(msg, -1); } } /** * Returns file from bucket with the given file path * @param {string} bucketName - Bucket name * @param {string} filePath - File path in bucket * @returns File | null */ getFileFromBucket(bucketName, filePath) { try { const bucket = this.getBucket(bucketName); if (!bucket) { return null; } const file = bucket.file(filePath); return file; } catch (err) { const msg = `[getFileFromBucket]: Error occured while trying to get file from bucket...\nDetails: ${err}`; throw new operation_error_1.default(msg, -1); } } /** * Uploads file to given bucket name and file path with the given data * @param {string} bucketName - Bucket name * @param {string} filePath - File path in bucket * @param {any} data - File data as string or buffer * @returns Promise<any> */ async uploadFileToBucket(bucketName, filePath, data) { try { const bucket = this.getBucket(bucketName); if (!bucket) { return null; } const file = bucket.file(filePath); await file.save(data); return `${this.baseUri}/${bucket.name}/${filePath}`; } catch (err) { const msg = `[uploadFileToBucket]: Error occured while trying to upload file to bucket...\nDetails: ${err}`; throw new operation_error_1.default(msg, -1); } } } exports.default = BucketHelper;