nebstore-client
Version:
Nebula client node package
61 lines (60 loc) • 1.96 kB
JavaScript
import FormData from 'form-data';
import { ApiClient } from '../ApiClient';
import { Readable } from 'stream';
import { Blob } from 'buffer';
const validateFileType = (file) => {
if (Buffer.isBuffer(file)) {
return true;
}
else if (file instanceof Blob) {
return true;
}
else if (file instanceof Readable) {
return true;
}
else {
return false;
}
};
export default class StorageService {
constructor(apiToken) {
this.client = new ApiClient(apiToken);
}
async listBuckets(params) {
return this.client.post('/buckets/list', params);
}
async listObjects(bucketName, params) {
return this.client.post(`/buckets/${bucketName}/list`, params);
}
async createBucket(params) {
return this.client.post('/buckets', params);
}
async emptyBucket(bucketName) {
return this.client.post(`/buckets/${bucketName}/empty`);
}
async getBucket(bucketName) {
return this.client.get(`/buckets/${bucketName}`);
}
async uploadObject(bucketName, objectKey, file) {
const isCorrectFile = file && validateFileType(file);
if (!isCorrectFile) {
return {
success: false,
message: 'Invalid file type: accepted types [Blob, Buffer, ReadableStream]',
};
}
const formData = new FormData();
formData.append('object', file);
formData.append('objectKey', objectKey);
return this.client.uploadFile(`/buckets/${bucketName}/objects`, formData);
}
async deleteBucket(bucketName) {
return this.client.delete(`/buckets/${bucketName}`);
}
async deleteObject(bucketName, objectKey) {
return this.client.delete(`/buckets/${bucketName}/objects/${objectKey}`);
}
async getObject(bucketName, objectKey) {
return this.client.get(`/buckets/${bucketName}/objects/${objectKey}`);
}
}