UNPKG

@zcatalyst/filestore

Version:

ZOHO CATALYST SDK for JavaScript Filestore for Node.js and Browser.

128 lines (127 loc) 4.45 kB
'use strict'; 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; } }