import { createClient } from 'webdav'; import type { WebDavClient, Stat } from '../../../../definition/webdav'; export type ServerCredentials = { token?: string; username?: string; password?: string; }; export class WebdavClientAdapter { _client: WebDavClient; constructor(serverConfig: string, cred: ServerCredentials) { if (cred.token) { this._client = createClient( serverConfig, { token: cred.token }, ); } else { this._client = createClient( serverConfig, { username: cred.username, password: cred.password, }, ); } } async stat(path: string): Promise { try { return await this._client.stat(path); } catch (error) { throw new Error(error.response && error.response.statusText ? error.response.statusText : 'Error checking if directory exists on webdav'); } } async createDirectory(path: string): Promise { try { return await this._client.createDirectory(path); } catch (error) { throw new Error(error.response && error.response.statusText ? error.response.statusText : 'Error creating directory on webdav'); } } async deleteFile(path: string): Promise { try { return await this._client.deleteFile(path); } catch (error) { throw new Error(error.response && error.response.statusText ? error.response.statusText : 'Error deleting file on webdav'); } } async getFileContents(filename: string): Promise { try { return await this._client.getFileContents(filename) as Buffer; } catch (error) { throw new Error(error.response && error.response.statusText ? error.response.statusText : 'Error getting file contents webdav'); } } async getDirectoryContents(path: string): Promise> { try { return await this._client.getDirectoryContents(path); } catch (error) { throw new Error(error.response && error.response.statusText ? error.response.statusText : 'Error getting directory contents webdav'); } } async putFileContents(path: string, data: Buffer, options: Record = {}): Promise { try { return await this._client.putFileContents(path, data, options); } catch (error) { throw new Error(error.response?.statusText ?? 'Error updating file contents.'); } } createReadStream(path: string, options?: Record): ReadableStream { return this._client.createReadStream(path, options); } createWriteStream(path: string): WritableStream { return this._client.createWriteStream(path); } }