@documentica/webdav
Version:
Documentica Webdav Client
156 lines (155 loc) • 7.19 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Multistatus_1 = __importDefault(require("./Multistatus"));
function createWebdavRequest(req) {
if (req.progressListener && req.config.host == "/")
return createWebdavRequestXHR(req);
else
return createWebdavRequestFetch(req);
}
exports.createWebdavRequest = createWebdavRequest;
function createWebdavRequestFetch({ config: { defaultHeaders, host, withCredentials, defaultFail, authenticationMethod, username, password, realm, }, method, path, headers, success, fail, body, resourceName, responseType, multistatus, progressListener }) {
if (path.substring(0, 1) !== '/') {
path = '/' + path;
}
const url = host ? host + path : path;
const fileName = url.split("/").filter(i => i).pop();
const authHeader = (authenticationMethod == "basic" ? { "Authorization": "Basic " + btoa(username + ":" + password) } : {});
fetch(url, {
method,
headers: Object.assign(Object.assign(Object.assign({}, defaultHeaders), headers), authHeader),
credentials: 'include',
cache: "no-cache",
body
})
.then(response => {
if (response.status < 200 || response.status >= 300) {
if (fail)
fail(response.status, body, response.statusText, resourceName || fileName);
else if (defaultFail)
defaultFail(response.status, body, response.statusText, resourceName || fileName);
else
throw "No fail handler found " + response.status;
}
else {
new Promise((resolve, reject) => {
switch (responseType) {
case 'blob':
resolve(response.blob());
break;
case 'json':
resolve(response.json());
break;
case 'xml':
default:
return resolve(response.text());
}
})
.catch(e => console.log(e, url))
.then(resp => {
window.resp = response;
if (responseType == "xml") {
let xml = new window.DOMParser().parseFromString(resp, "text/xml");
if (multistatus) {
let body = undefined;
for (var counter = 0; counter < xml.childNodes.length; counter++) {
if (xml.childNodes.item(counter).localName === 'multistatus') {
body = new Multistatus_1.default(xml.childNodes.item(counter));
break;
}
}
success(response.status, body, response.statusText, resourceName || fileName, response.headers);
}
else
success(response.status, xml, response.statusText, resourceName || fileName, response.headers);
}
else {
success(response.status, resp, response.statusText, resourceName || fileName, response.headers);
}
});
}
}).catch(e => {
if (fail)
fail(0, "unable to connect", "unable to connect");
else if (defaultFail)
defaultFail(0, "unable to connect " + path + " with method " + method, "unable to connect");
else
throw "No fail handler found " + path + " " + method;
});
}
exports.createWebdavRequestFetch = createWebdavRequestFetch;
;
function createWebdavRequestXHR({ config: { defaultHeaders, host, withCredentials, defaultFail, authenticationMethod, username, password, realm, }, method, path, headers, success, fail, body, resourceName, responseType, multistatus, progressListener }) {
if (path.substring(0, 1) !== '/') {
path = '/' + path;
}
const url = host ? host + path : path;
const fileName = url.split("/").filter(i => i).pop();
var ajax = new XMLHttpRequest();
ajax.open(method, url, true);
ajax.withCredentials = true;
if (multistatus)
responseType = "xml";
switch (responseType) {
case "blob":
ajax.responseType = "blob";
break;
case "json":
ajax.overrideMimeType("application/json");
break;
}
if (progressListener)
ajax.upload.addEventListener("progress", progressListener);
ajax.onreadystatechange = function () {
if (ajax.readyState === 4) { //if request has completed
if (ajax.status < 200 || ajax.status >= 300) {
if (fail)
fail(ajax.status, body, ajax.statusText, resourceName || fileName);
else if (defaultFail)
defaultFail(ajax.status, body, ajax.statusText, resourceName || fileName);
else
throw "No fail handler found " + ajax.status;
}
else {
switch (responseType) {
case 'blob':
success(ajax.status, ajax.response, ajax.statusText, resourceName || fileName);
break;
case 'json':
success(ajax.status, JSON.parse(ajax.responseText), ajax.statusText, resourceName || fileName);
break;
case 'xml':
if (multistatus) {
let body = undefined;
for (var counter = 0; counter < ajax.responseXML.childNodes.length; counter++) {
if (ajax.responseXML.childNodes.item(counter).localName === 'multistatus') {
body = new Multistatus_1.default(ajax.responseXML.childNodes.item(counter));
break;
}
}
success(ajax.status, body, ajax.statusText, resourceName || fileName);
}
else
success(ajax.status, ajax.responseXML, ajax.statusText, resourceName || fileName);
break;
default:
success(ajax.status, ajax.responseText, ajax.statusText, resourceName || fileName);
}
}
}
};
if (defaultHeaders)
Object.keys(defaultHeaders).forEach(header => ajax.setRequestHeader(header, defaultHeaders[header]));
if (headers)
Object.keys(headers).forEach(header => ajax.setRequestHeader(header, headers[header]));
if (authenticationMethod == "basic")
ajax.setRequestHeader("Authorization", "Basic " + btoa(username + ":" + password));
ajax.withCredentials = withCredentials || false;
ajax.send(body);
return ajax;
}
exports.createWebdavRequestXHR = createWebdavRequestXHR;
;
;