Add webdavClient to ServiceRepository
[arvados.git] / src / common / webdav.ts
index 5c7f9d24919a66538ad180a4b727871785f2525b..6b56f12409f15d03344f15a6866cb903dbe51eac 100644 (file)
@@ -3,8 +3,8 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 export class WebDAV {
-    static create(config?: Partial<WebDAVDefaults>) {
-        return new WebDAV(config);
+    static create(config?: Partial<WebDAVDefaults>, createRequest?: () => XMLHttpRequest) {
+        return new WebDAV(config, createRequest);
     }
 
     defaults: WebDAVDefaults = {
@@ -44,7 +44,7 @@ export class WebDAV {
             method: 'DELETE'
         })
 
-    private constructor(config?: Partial<WebDAVDefaults>) {
+    private constructor(config?: Partial<WebDAVDefaults>, private createRequest = () => new XMLHttpRequest()) {
         if (config) {
             this.defaults = { ...this.defaults, ...config };
         }
@@ -52,7 +52,7 @@ export class WebDAV {
 
     private request = (config: RequestConfig) => {
         return new Promise<XMLHttpRequest>((resolve, reject) => {
-            const r = new XMLHttpRequest();
+            const r = this.createRequest();
             r.open(config.method, this.defaults.baseUrl + config.url);
 
             const headers = { ...this.defaults.headers, ...config.headers };
@@ -77,6 +77,7 @@ export interface PropfindConfig extends BaseConfig { }
 
 export interface PutConfig extends BaseConfig {
     data?: any;
+    onProgress?: (event: ProgressEvent) => void;
 }
 
 export interface CopyConfig extends BaseConfig {