@metatime/pinning-service
Version:
Pinning service that is built on Google Cloud Storage on top of IPFS.
128 lines (127 loc) • 4.14 kB
JavaScript
;
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;