@zcatalyst/filestore
Version:
ZOHO CATALYST SDK for JavaScript Filestore for Node.js and Browser.
128 lines (127 loc) • 4.45 kB
JavaScript
;
import { CONSTANTS, isNonEmptyString, isNonNullObject, isValidInputString, wrapValidatorsWithPromise } from '@zcatalyst/utils';
import { CatalystFileStoreError } from './utils/error';
const { CREDENTIAL_USER, REQ_METHOD, COMPONENT } = CONSTANTS;
export class Folder {
constructor(fileInstance, folderDetails) {
this._folderDetails = folderDetails;
this.requester = fileInstance.requester;
}
getComponentName() {
return COMPONENT.filestore;
}
async getFileDetails(id) {
await wrapValidatorsWithPromise(() => {
isValidInputString(id, 'file_id', true);
}, CatalystFileStoreError);
const request = {
method: REQ_METHOD.get,
path: `/folder/${this._folderDetails.id}/file/${id}`,
service: "baas",
track: true,
user: CREDENTIAL_USER.user
};
const resp = await this.requester.send(request);
return resp.data.data;
}
async deleteFile(id) {
await wrapValidatorsWithPromise(() => {
isValidInputString(id, 'file_id', true);
}, CatalystFileStoreError);
const request = {
method: REQ_METHOD.delete,
path: `/folder/${this._folderDetails.id}/file/${id}`,
service: "baas",
track: true,
user: CREDENTIAL_USER.user
};
const resp = await this.requester.send(request);
return !!resp.data.data;
}
async uploadFile(fileDetails) {
await wrapValidatorsWithPromise(() => {
isNonNullObject(fileDetails, 'file_object', true);
isNonEmptyString(fileDetails.name, 'name in file_object', true);
}, CatalystFileStoreError);
const fileData = {
code: fileDetails.code,
file_name: fileDetails.name
};
const request = {
method: REQ_METHOD.post,
path: `/folder/${this._folderDetails.id}/file`,
data: fileData,
type: "file",
service: "baas",
track: true,
abortSignal: fileDetails.signal,
user: CREDENTIAL_USER.user
};
const resp = await this.requester.send(request);
return resp.data.data;
}
async getDownloadRequest(id) {
await wrapValidatorsWithPromise(() => {
isValidInputString(id, 'file_id', true);
}, CatalystFileStoreError);
return {
method: REQ_METHOD.get,
path: `/folder/${this._folderDetails.id}/file/${id}/download`,
service: "baas",
track: true,
user: CREDENTIAL_USER.user
};
}
async downloadFile(id) {
const request = await this.getDownloadRequest(id);
request.expecting = "buffer";
const resp = await this.requester.send(request);
return resp.data;
}
async getFileStream(id) {
const request = await this.getDownloadRequest(id);
request.expecting = "raw";
const resp = await this.requester.send(request);
return resp.data;
}
toString() {
return JSON.stringify(this._folderDetails);
}
toJSON() {
return this._folderDetails;
}
}
export class FolderAdmin extends Folder {
constructor(fileInstance, folderDetails) {
super(fileInstance, folderDetails);
}
async update(folderDetails) {
await wrapValidatorsWithPromise(() => {
isNonNullObject(folderDetails, 'folder_object', true);
isNonEmptyString(folderDetails.folder_name, 'folder_name in folder_object', true);
}, CatalystFileStoreError);
const postData = { folder_name: folderDetails.folder_name };
const request = {
method: REQ_METHOD.put,
path: `/folder/${this._folderDetails.id}`,
data: postData,
type: "json",
service: "baas",
track: true,
user: CREDENTIAL_USER.admin
};
const resp = await this.requester.send(request);
return resp.data.data;
}
async delete() {
const request = {
method: REQ_METHOD.delete,
path: `/folder/${this._folderDetails.id}`,
service: "baas",
track: true,
user: CREDENTIAL_USER.admin
};
const resp = await this.requester.send(request);
return !!resp.data.data;
}
}