{"version":3,"file":"index.cjs","sources":["../src/parser.js","../src/utility/namespaceUtility.js","../src/utility/xmlUtility.js","../src/errors/attachError.js","../src/errors/networkRequestAbortedError.js","../src/errors/networkRequestError.js","../src/errors/networkRequestHttpError.js","../src/errors/networkRequestServerError.js","../src/errors/networkRequestClientError.js","../src/request.js","../src/utility/stringUtility.js","../src/models/davEventListener.js","../src/debug.js","../src/propset/davCollectionPropSet.js","../src/models/davObject.js","../src/models/davCollection.js","../src/models/davCollectionPublishable.js","../src/models/davCollectionShareable.js","../src/models/vobject.js","../src/propset/calendarPropSet.js","../src/models/calendar.js","../src/models/subscription.js","../src/propset/scheduleInboxPropSet.js","../src/models/scheduleInbox.js","../src/models/scheduleOutbox.js","../src/models/calendarTrashBin.js","../src/models/deletedCalendar.js","../src/models/calendarHome.js","../src/propset/addressBookPropSet.js","../src/models/vcard.js","../src/models/addressBook.js","../src/models/addressBookHome.js","../src/propset/principalPropSet.js","../src/models/principal.js","../src/index.js"],"sourcesContent":["/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/**\n *\n */\nexport default class Parser {\n\n\t/**\n\t *\n\t */\n\tconstructor() {\n\t\t/**\n\t\t * Key Value Map of propertyName => parser\n\t\t * @type {object}\n\t\t * @private\n\t\t */\n\t\tthis._parser = {}\n\n\t\t// initialize default parsers shipped with this lib\n\t\tthis._registerDefaultParsers()\n\t}\n\n\t/**\n\t * checks if a parser exists for a given property name\n\t *\n\t * @param {string} propertyName\n\t * @return {boolean}\n\t */\n\tcanParse(propertyName) {\n\t\treturn Object.prototype.hasOwnProperty.call(this._parser, propertyName)\n\t}\n\n\t/**\n\t * parses a single prop Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {*}\n\t */\n\tparse(document, node, resolver) {\n\t\tconst propertyName = `{${node.namespaceURI}}${node.localName}`\n\t\tif (!this.canParse(propertyName)) {\n\t\t\tthrow new Error(`Unable to parse unknown property \"${propertyName}\"`)\n\t\t}\n\n\t\treturn this._parser[propertyName](document, node, resolver)\n\t}\n\n\t/**\n\t * registers a parser for propertyName\n\t *\n\t * @param {string} propertyName\n\t * @param {Function} parser\n\t */\n\tregisterParser(propertyName, parser) {\n\t\tthis._parser[propertyName] = parser\n\t}\n\n\t/**\n\t * unregisters a parser for propertyName\n\t *\n\t * @param {string} propertyName\n\t */\n\tunregisterParser(propertyName) {\n\t\tdelete this._parser[propertyName]\n\t}\n\n\t/**\n\t * registers the predefined parsers\n\t *\n\t * @private\n\t */\n\t_registerDefaultParsers() {\n\t\t// RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)\n\t\tthis.registerParser('{DAV:}displayname', Parser.text)\n\t\tthis.registerParser('{DAV:}creationdate', Parser.text)\n\t\tthis.registerParser('{DAV:}getcontentlength', Parser.decInt)\n\t\tthis.registerParser('{DAV:}getcontenttype', Parser.text)\n\t\tthis.registerParser('{DAV:}getcontentlanguage', Parser.text)\n\t\tthis.registerParser('{DAV:}getlastmodified', Parser.rfc1123Date)\n\t\tthis.registerParser('{DAV:}getetag', Parser.text)\n\t\tthis.registerParser('{DAV:}resourcetype', Parser.resourceType)\n\n\t\t// RFC 3744 - Web Distributed Authoring and Versioning (WebDAV) Access Control Protocol\n\t\tthis.registerParser('{DAV:}inherited-acl-set', Parser.hrefs)\n\t\tthis.registerParser('{DAV:}group', Parser.href)\n\t\tthis.registerParser('{DAV:}owner', Parser.href)\n\t\tthis.registerParser('{DAV:}current-user-privilege-set', Parser.privileges)\n\t\tthis.registerParser('{DAV:}principal-collection-set', Parser.hrefs)\n\t\tthis.registerParser('{DAV:}principal-URL', Parser.href)\n\t\tthis.registerParser('{DAV:}alternate-URI-set', Parser.hrefs)\n\t\tthis.registerParser('{DAV:}group-member-set', Parser.hrefs)\n\t\tthis.registerParser('{DAV:}group-membership', Parser.hrefs)\n\n\t\t// RFC 5397 - WebDAV Current Principal Extension\n\t\tthis.registerParser('{DAV:}current-user-principal', Parser.currentUserPrincipal)\n\n\t\t// RFC 6578 - Collection Synchronization for Web Distributed Authoring and Versioning (WebDAV)\n\t\tthis.registerParser('{DAV:}sync-token', Parser.text)\n\n\t\t// RFC 6352 - CardDAV: vCard Extensions to Web Distributed Authoring and Versioning (WebDAV)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:carddav}address-data', Parser.text)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:carddav}addressbook-description', Parser.text)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:carddav}supported-address-data', Parser.addressDataTypes)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:carddav}max-resource-size', Parser.decInt)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:carddav}addressbook-home-set', Parser.hrefs)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:carddav}principal-address', Parser.href)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:carddav}supported-collation-set', Parser.supportedCardDAVCollations)\n\n\t\t// RFC 4791 - Calendaring Extensions to WebDAV (CalDAV)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}calendar-data', Parser.text)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}calendar-home-set', Parser.hrefs)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}calendar-description', Parser.text)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}calendar-timezone', Parser.text)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set', Parser.calendarComps)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}supported-calendar-data', Parser.calendarDatas)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}max-resource-size', Parser.decInt)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}min-date-time', Parser.iCalendarTimestamp)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}max-date-time', Parser.iCalendarTimestamp)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}max-instances', Parser.decInt)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}max-attendees-per-instance', Parser.decInt)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}supported-collation-set', Parser.supportedCalDAVCollations)\n\n\t\t// RFC 6638 - Scheduling Extensions to CalDAV\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}schedule-outbox-URL', Parser.href)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}schedule-inbox-URL', Parser.href)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}calendar-user-address-set', Parser.hrefs)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}calendar-user-type', Parser.text)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp', Parser.scheduleCalendarTransp)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL', Parser.href)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}schedule-tag', Parser.text)\n\n\t\t// RFC 7809 - Calendaring Extensions to WebDAV (CalDAV): Time Zones by Reference\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}timezone-service-set', Parser.hrefs)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}calendar-timezone-id', Parser.text)\n\n\t\t// RFC 7953 - Calendar Availability\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}calendar-availability', Parser.text)\n\n\t\t// Apple\n\t\tthis.registerParser('{http://apple.com/ns/ical/}calendar-order', Parser.decInt)\n\t\tthis.registerParser('{http://apple.com/ns/ical/}calendar-color', Parser.color)\n\t\tthis.registerParser('{http://calendarserver.org/ns/}source', Parser.href)\n\n\t\t// https://tools.ietf.org/html/draft-daboo-valarm-extensions-04#section-11.1\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}default-alarm-vevent-datetime', Parser.text)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}default-alarm-vevent-date', Parser.text)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}default-alarm-vtodo-datetime', Parser.text)\n\t\tthis.registerParser('{urn:ietf:params:xml:ns:caldav}default-alarm-vtodo-date', Parser.text)\n\n\t\t// https://github.com/apple/ccs-calendarserver/blob/master/doc/Extensions/caldav-ctag.txt\n\t\tthis.registerParser('{http://calendarserver.org/ns/}getctag', Parser.text)\n\n\t\t// https://github.com/apple/ccs-calendarserver/blob/master/doc/Extensions/caldav-proxy.txt\n\t\tthis.registerParser('{http://calendarserver.org/ns/}calendar-proxy-read-for', Parser.hrefs)\n\t\tthis.registerParser('{http://calendarserver.org/ns/}calendar-proxy-write-for', Parser.hrefs)\n\n\t\t// https://github.com/apple/ccs-calendarserver/blob/master/doc/Extensions/caldav-sharing.txt\n\t\tthis.registerParser('{http://calendarserver.org/ns/}allowed-sharing-modes', Parser.allowedSharingModes)\n\t\tthis.registerParser('{http://calendarserver.org/ns/}shared-url', Parser.href)\n\t\tthis.registerParser('{http://sabredav.org/ns}owner-principal', Parser.href)\n\t\tthis.registerParser('{http://sabredav.org/ns}read-only', Parser.bool)\n\t\tthis.registerParser('{http://calendarserver.org/ns/}pre-publish-url', Parser.href)\n\t\tthis.registerParser('{http://calendarserver.org/ns/}publish-url', Parser.href)\n\n\t\t// Nextcloud custom sharing\n\t\tthis.registerParser('{http://owncloud.org/ns}invite', Parser.ocInvite)\n\n\t\t// Nextcloud specific\n\t\tthis.registerParser('{http://owncloud.org/ns}calendar-enabled', Parser.bool)\n\t\tthis.registerParser('{http://owncloud.org/ns}enabled', Parser.bool)\n\t\tthis.registerParser('{http://owncloud.org/ns}read-only', Parser.bool)\n\t\tthis.registerParser('{http://nextcloud.com/ns}default-alarm', Parser.decInt)\n\t\tthis.registerParser('{http://nextcloud.com/ns}owner-displayname', Parser.text)\n\t\tthis.registerParser('{http://nextcloud.com/ns}deleted-at', Parser.iso8601DateTime)\n\t\tthis.registerParser('{http://nextcloud.com/ns}calendar-uri', Parser.text)\n\t\tthis.registerParser('{http://nextcloud.com/ns}has-photo', Parser.bool)\n\t\tthis.registerParser('{http://nextcloud.com/ns}trash-bin-retention-duration', Parser.decInt)\n\t\tthis.registerParser('{http://nextcloud.com/ns}language', Parser.text)\n\t\tthis.registerParser('{http://nextcloud.com/ns}room-type', Parser.text)\n\t\tthis.registerParser('{http://nextcloud.com/ns}room-seating-capacity', Parser.decInt)\n\t\tthis.registerParser('{http://nextcloud.com/ns}room-building-address', Parser.text)\n\t\tthis.registerParser('{http://nextcloud.com/ns}room-building-story', Parser.text)\n\t\tthis.registerParser('{http://nextcloud.com/ns}room-building-room-number', Parser.text)\n\t\tthis.registerParser('{http://nextcloud.com/ns}room-features', Parser.text)\n\n\t\t// Sabre/Dav specific\n\t\tthis.registerParser('{http://sabredav.org/ns}email-address', Parser.text)\n\t}\n\n\t/**\n\t * returns text value of Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {string}\n\t */\n\tstatic text(document, node, resolver) {\n\t\treturn document.evaluate('string(.)', node, resolver, XPathResult.ANY_TYPE, null).stringValue\n\t}\n\n\t/**\n\t * returns boolean value of Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {boolean}\n\t */\n\tstatic bool(document, node, resolver) {\n\t\treturn Parser.text(document, node, resolver) === '1'\n\t}\n\n\t/**\n\t * returns decimal integer value of Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {number}\n\t */\n\tstatic decInt(document, node, resolver) {\n\t\treturn parseInt(Parser.text(document, node, resolver), 10)\n\t}\n\n\t/**\n\t * returns Date value of Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {Date}\n\t */\n\tstatic rfc1123Date(document, node, resolver) {\n\t\tconst text = Parser.text(document, node, resolver)\n\n\t\t// TODO this might not work in every browser\n\t\treturn new Date(text)\n\t}\n\n\t/**\n\t * returns Date from an ISO8601 string\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {Date}\n\t */\n\tstatic iso8601DateTime(document, node, resolver) {\n\t\tconst text = Parser.text(document, node, resolver)\n\n\t\treturn new Date(text)\n\t}\n\n\t/**\n\t * returns Date value of Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {Date}\n\t */\n\tstatic iCalendarTimestamp(document, node, resolver) {\n\t\tconst text = Parser.text(document, node, resolver)\n\n\t\tconst year = parseInt(text.slice(0, 4), 10)\n\t\tconst month = parseInt(text.slice(4, 6), 10) - 1\n\t\tconst date = parseInt(text.slice(6, 8), 10)\n\n\t\tconst hour = parseInt(text.slice(9, 11), 10)\n\t\tconst minute = parseInt(text.slice(11, 13), 10)\n\t\tconst second = parseInt(text.slice(13, 15), 10)\n\n\t\tconst dateObj = new Date()\n\t\tdateObj.setUTCFullYear(year, month, date)\n\t\tdateObj.setUTCHours(hour, minute, second, 0)\n\t\treturn dateObj\n\t}\n\n\t/**\n\t * parses a {DAV:}resourcetype Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {string[]}\n\t */\n\tstatic resourceType(document, node, resolver) {\n\t\tconst result = []\n\t\tconst children = document.evaluate('*', node, resolver, XPathResult.ANY_TYPE, null)\n\t\tlet childNode\n\n\t\twhile ((childNode = children.iterateNext()) !== null) {\n\t\t\tconst ns = document.evaluate('namespace-uri(.)', childNode, resolver, XPathResult.ANY_TYPE, null).stringValue\n\t\t\tconst local = document.evaluate('local-name(.)', childNode, resolver, XPathResult.ANY_TYPE, null).stringValue\n\n\t\t\tresult.push(`{${ns}}${local}`)\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * parses a node with one href nodes as child\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {string}\n\t */\n\tstatic href(document, node, resolver) {\n\t\treturn document.evaluate('string(d:href)', node, resolver, XPathResult.ANY_TYPE, null).stringValue\n\t}\n\n\t/**\n\t * parses a node with multiple href nodes as children\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {string[]}\n\t */\n\tstatic hrefs(document, node, resolver) {\n\t\tconst result = []\n\t\tconst hrefs = document.evaluate('d:href', node, resolver, XPathResult.ANY_TYPE, null)\n\t\tlet hrefNode\n\n\t\twhile ((hrefNode = hrefs.iterateNext()) !== null) {\n\t\t\tresult.push(document.evaluate('string(.)', hrefNode, resolver, XPathResult.ANY_TYPE, null).stringValue)\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Parses a set of {DAV:}privilege Nodes\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {string[]}\n\t */\n\tstatic privileges(document, node, resolver) {\n\t\tconst result = []\n\t\tconst privileges = document.evaluate('d:privilege/*', node, resolver, XPathResult.ANY_TYPE, null)\n\t\tlet privilegeNode\n\n\t\twhile ((privilegeNode = privileges.iterateNext()) !== null) {\n\t\t\tconst ns = document.evaluate('namespace-uri(.)', privilegeNode, resolver, XPathResult.ANY_TYPE, null).stringValue\n\t\t\tconst local = document.evaluate('local-name(.)', privilegeNode, resolver, XPathResult.ANY_TYPE, null).stringValue\n\n\t\t\tresult.push(`{${ns}}${local}`)\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * parses the {DAV:}current-user-principal Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {object}\n\t * @property {string} type\n\t * @property {string} href\n\t */\n\tstatic currentUserPrincipal(document, node, resolver) {\n\t\tconst unauthenticatedCount\n\t\t\t= document.evaluate('count(d:unauthenticated)', node, resolver, XPathResult.ANY_TYPE, null).numberValue\n\n\t\tif (unauthenticatedCount !== 0) {\n\t\t\treturn {\n\t\t\t\ttype: 'unauthenticated',\n\t\t\t\thref: null,\n\t\t\t}\n\t\t} else {\n\t\t\treturn {\n\t\t\t\ttype: 'href',\n\t\t\t\thref: Parser.href(...arguments),\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Parses a {urn:ietf:params:xml:ns:carddav}supported-address-data Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {*}\n\t */\n\tstatic addressDataTypes(document, node, resolver) {\n\t\tconst result = []\n\t\tconst addressDatas = document.evaluate('cr:address-data-type', node, resolver, XPathResult.ANY_TYPE, null)\n\t\tlet addressDataNode\n\n\t\twhile ((addressDataNode = addressDatas.iterateNext()) !== null) {\n\t\t\tresult.push({\n\t\t\t\t'content-type': document.evaluate('string(@content-type)', addressDataNode, resolver, XPathResult.ANY_TYPE, null).stringValue,\n\t\t\t\tversion: document.evaluate('string(@version)', addressDataNode, resolver, XPathResult.ANY_TYPE, null).stringValue,\n\t\t\t})\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Parses a {urn:ietf:params:xml:ns:carddav}supported-collation-set Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {*}\n\t */\n\tstatic supportedCardDAVCollations(document, node, resolver) {\n\t\tconst result = []\n\t\tconst collations = document.evaluate('cr:supported-collation', node, resolver, XPathResult.ANY_TYPE, null)\n\t\tlet collationNode\n\n\t\twhile ((collationNode = collations.iterateNext()) !== null) {\n\t\t\tresult.push(document.evaluate('string(.)', collationNode, resolver, XPathResult.ANY_TYPE, null).stringValue)\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Parses a {urn:ietf:params:xml:ns:caldav}supported-collation-set Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {*}\n\t */\n\tstatic supportedCalDAVCollations(document, node, resolver) {\n\t\tconst result = []\n\t\tconst collations = document.evaluate('cl:supported-collation', node, resolver, XPathResult.ANY_TYPE, null)\n\t\tlet collationNode\n\n\t\twhile ((collationNode = collations.iterateNext()) !== null) {\n\t\t\tresult.push(document.evaluate('string(.)', collationNode, resolver, XPathResult.ANY_TYPE, null).stringValue)\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Parses a {urn:ietf:params:xml:ns:caldav}supported-calendar-component-set Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {string[]}\n\t */\n\tstatic calendarComps(document, node, resolver) {\n\t\tconst result = []\n\t\tconst comps = document.evaluate('cl:comp', node, resolver, XPathResult.ANY_TYPE, null)\n\t\tlet compNode\n\n\t\twhile ((compNode = comps.iterateNext()) !== null) {\n\t\t\tresult.push(document.evaluate('string(@name)', compNode, resolver, XPathResult.ANY_TYPE, null).stringValue)\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Parses a {urn:ietf:params:xml:ns:caldav}supported-calendar-data Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {*}\n\t */\n\tstatic calendarDatas(document, node, resolver) {\n\t\tconst result = []\n\t\tconst calendarDatas = document.evaluate('cl:calendar-data', node, resolver, XPathResult.ANY_TYPE, null)\n\t\tlet calendarDataNode\n\n\t\twhile ((calendarDataNode = calendarDatas.iterateNext()) !== null) {\n\t\t\tresult.push({\n\t\t\t\t'content-type': document.evaluate('string(@content-type)', calendarDataNode, resolver, XPathResult.ANY_TYPE, null).stringValue,\n\t\t\t\tversion: document.evaluate('string(@version)', calendarDataNode, resolver, XPathResult.ANY_TYPE, null).stringValue,\n\t\t\t})\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Parses a {urn:ietf:params:xml:ns:caldav}schedule-calendar-transp Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {string}\n\t */\n\tstatic scheduleCalendarTransp(document, node, resolver) {\n\t\tconst children = document.evaluate('cl:opaque | cl:transparent', node, resolver, XPathResult.ANY_TYPE, null)\n\t\tconst childNode = children.iterateNext()\n\t\tif (childNode) {\n\t\t\treturn document.evaluate('local-name(.)', childNode, resolver, XPathResult.ANY_TYPE, null).stringValue\n\t\t}\n\t}\n\n\t/**\n\t * Parses a {http://apple.com/ns/ical/}calendar-color Node\n\t * strips the alpha value of RGB values\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {string}\n\t */\n\tstatic color(document, node, resolver) {\n\t\tconst text = Parser.text(document, node, resolver)\n\t\t// some stupid clients store an alpha value in the rgb hash (like #rrggbbaa) *cough cough* Apple Calendar *cough cough*\n\t\t// but some browsers can't parse that *cough cough* Safari 9 *cough cough*\n\t\t// Safari 10 seems to support this though\n\t\tif (text.length === 9) {\n\t\t\treturn text.slice(0, 7)\n\t\t}\n\n\t\treturn text\n\t}\n\n\t/**\n\t * Parses a {http://calendarserver.org/ns/}allowed-sharing-modes Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {string[]}\n\t */\n\tstatic allowedSharingModes(document, node, resolver) {\n\t\tconst result = []\n\t\tconst children = document.evaluate('cs:can-be-shared | cs:can-be-published', node, resolver, XPathResult.ANY_TYPE, null)\n\t\tlet childNode\n\n\t\twhile ((childNode = children.iterateNext()) !== null) {\n\t\t\tconst ns = document.evaluate('namespace-uri(.)', childNode, resolver, XPathResult.ANY_TYPE, null).stringValue\n\t\t\tconst local = document.evaluate('local-name(.)', childNode, resolver, XPathResult.ANY_TYPE, null).stringValue\n\n\t\t\tresult.push(`{${ns}}${local}`)\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Parses a {http://owncloud.org/ns}invite Node\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {*}\n\t */\n\tstatic ocInvite(document, node, resolver) {\n\t\tconst result = []\n\t\tconst users = document.evaluate('oc:user', node, resolver, XPathResult.ANY_TYPE, null)\n\t\tlet userNode\n\n\t\twhile ((userNode = users.iterateNext()) !== null) {\n\t\t\tresult.push({\n\t\t\t\thref: Parser.href(document, userNode, resolver),\n\t\t\t\t'common-name': document.evaluate('string(oc:common-name)', userNode, resolver, XPathResult.ANY_TYPE, null).stringValue,\n\t\t\t\t'invite-accepted': document.evaluate('count(oc:invite-accepted)', userNode, resolver, XPathResult.ANY_TYPE, null).numberValue === 1,\n\t\t\t\taccess: Parser.ocAccess(document, userNode, resolver),\n\t\t\t})\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Parses a set of {http://owncloud.org/ns}access Nodes\n\t *\n\t * @param {Document} document\n\t * @param {Node} node\n\t * @param {XPathNSResolver} resolver\n\t * @return {string[]}\n\t */\n\tstatic ocAccess(document, node, resolver) {\n\t\tconst result = []\n\t\tconst privileges = document.evaluate('oc:access/*', node, resolver, XPathResult.ANY_TYPE, null)\n\t\tlet privilegeNode\n\n\t\twhile ((privilegeNode = privileges.iterateNext()) !== null) {\n\t\t\tconst ns = document.evaluate('namespace-uri(.)', privilegeNode, resolver, XPathResult.ANY_TYPE, null).stringValue\n\t\t\tconst local = document.evaluate('local-name(.)', privilegeNode, resolver, XPathResult.ANY_TYPE, null).stringValue\n\n\t\t\tresult.push(`{${ns}}${local}`)\n\t\t}\n\n\t\treturn result\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nexport const DAV = 'DAV:'\nexport const IETF_CALDAV = 'urn:ietf:params:xml:ns:caldav'\nexport const IETF_CARDDAV = 'urn:ietf:params:xml:ns:carddav'\nexport const OWNCLOUD = 'http://owncloud.org/ns'\nexport const NEXTCLOUD = 'http://nextcloud.com/ns'\nexport const APPLE = 'http://apple.com/ns/ical/'\nexport const CALENDARSERVER = 'http://calendarserver.org/ns/'\nexport const SABREDAV = 'http://sabredav.org/ns'\n\nexport const NS_MAP = {\n\td: DAV,\n\tcl: IETF_CALDAV,\n\tcr: IETF_CARDDAV,\n\toc: OWNCLOUD,\n\tnc: NEXTCLOUD,\n\taapl: APPLE,\n\tcs: CALENDARSERVER,\n\tsd: SABREDAV,\n}\n\n/**\n * maps namespace like DAV: to it's short equivalent\n *\n * @param {string} short\n * @return {string}\n */\nexport function resolve(short) {\n\treturn NS_MAP[short] || null\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nconst serializer = new XMLSerializer()\nlet prefixMap = {}\n\n/**\n * builds the root skeleton\n *\n * @params {...Array} array of namespace / name pairs\n * @return {*[]}\n */\nexport function getRootSkeleton() {\n\tif (arguments.length === 0) {\n\t\treturn [{}, null]\n\t}\n\n\tconst skeleton = {\n\t\tname: arguments[0],\n\t\tchildren: [],\n\t}\n\n\tlet childrenWrapper = skeleton.children\n\n\tconst args = Array.prototype.slice.call(arguments, 1)\n\targs.forEach(function(argument) {\n\t\tconst level = {\n\t\t\tname: argument,\n\t\t\tchildren: [],\n\t\t}\n\t\tchildrenWrapper.push(level)\n\t\tchildrenWrapper = level.children\n\t})\n\n\treturn [skeleton, childrenWrapper]\n}\n\n/**\n * serializes an simple xml representation into a string\n *\n * @param {object} json\n * @return {string}\n */\nexport function serialize(json) {\n\tjson = json || {}\n\tif (typeof json !== 'object' || !Object.prototype.hasOwnProperty.call(json, 'name')) {\n\t\treturn ''\n\t}\n\n\tconst root = document.implementation.createDocument('', '', null)\n\txmlify(root, root, json)\n\n\treturn serializer.serializeToString(root)\n}\n\n/**\n *\n * @param xmlDoc\n * @param parent\n * @param json\n */\nfunction xmlify(xmlDoc, parent, json) {\n\tconst [ns, localName] = json.name\n\tconst element = xmlDoc.createElementNS(ns, getPrefixedNameForNamespace(ns, localName))\n\n\tjson.attributes = json.attributes || []\n\tjson.attributes.forEach((attribute) => {\n\t\tif (attribute.length === 2) {\n\t\t\tconst [name, value] = attribute\n\t\t\telement.setAttribute(name, value)\n\t\t} else {\n\t\t\tconst [namespace, localName, value] = attribute\n\t\t\telement.setAttributeNS(namespace, getPrefixedNameForNamespace(namespace, localName), value)\n\t\t}\n\t})\n\n\tif (json.value) {\n\t\telement.textContent = json.value\n\t} else if (json.children) {\n\t\tjson.children.forEach((child) => {\n\t\t\txmlify(xmlDoc, element, child)\n\t\t})\n\t}\n\n\tparent.appendChild(element)\n}\n\n/**\n *\n */\nexport function resetPrefixMap() {\n\tprefixMap = {}\n}\n\n/**\n *\n * @param ns\n * @param localName\n */\nfunction getPrefixedNameForNamespace(ns, localName) {\n\tif (!Object.prototype.hasOwnProperty.call(prefixMap, ns)) {\n\t\tprefixMap[ns] = 'x' + Object.keys(prefixMap).length\n\t}\n\n\treturn prefixMap[ns] + ':' + localName\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/**\n * Generic error class that allows attaching more than just a message\n *\n * @abstract\n */\nexport default class AttachError extends Error {\n\n\t/**\n\t *\n\t * @param {object} attach\n\t */\n\tconstructor(attach) {\n\t\tsuper()\n\n\t\tObject.assign(this, attach)\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport AttachError from './attachError.js'\n\nexport default class NetworkRequestAbortedError extends AttachError {}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport AttachError from './attachError.js'\n\nexport default class NetworkRequestError extends AttachError {}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport AttachError from './attachError.js'\n\nexport default class NetworkRequestHttpError extends AttachError {}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport NetworkRequestHttpError from './networkRequestHttpError.js'\n\nexport default class NetworkRequestServerError extends NetworkRequestHttpError {}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport NetworkRequestHttpError from './networkRequestHttpError.js'\n\nexport default class NetworkRequestClientError extends NetworkRequestHttpError {}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport * as NS from './utility/namespaceUtility.js'\nimport * as XMLUtility from './utility/xmlUtility.js'\nimport axios from '@nextcloud/axios'\n\nimport NetworkRequestAbortedError from './errors/networkRequestAbortedError.js'\nimport NetworkRequestError from './errors/networkRequestError.js'\nimport NetworkRequestServerError from './errors/networkRequestServerError.js'\nimport NetworkRequestClientError from './errors/networkRequestClientError.js'\nimport NetworkRequestHttpError from './errors/networkRequestHttpError.js'\n\n/**\n * Request class is used to send any kind of request to the DAV server\n * It also parses incoming XML responses\n */\nexport default class Request {\n\n\t/**\n\t * Creates a new Request object\n\t *\n\t * @param {string} baseUrl - root url of DAV server, use OC.remote('dav')\n\t * @param {{[name: string]: any}} [defaultHeaders] - additional HTTP headers to send with each request\n\t * @param {import('./parser.js').Parser} parser - instance of Parser class\n\t */\n\tconstructor(baseUrl, parser, defaultHeaders = {}) {\n\t\tthis.baseUrl = baseUrl\n\t\tthis.parser = parser\n\t\tthis.defaultHeaders = defaultHeaders\n\t}\n\n\t/**\n\t * sends an OPTIONS request\n\t *\n\t * @param {string} url - URL to do the request on\n\t * @param {object} headers - additional HTTP headers to send\n\t * @param {AbortSignal} abortSignal - the signal from an abort controller\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync options(url, headers = {}, abortSignal = null) {\n\t\treturn this.request('OPTIONS', url, headers, null, abortSignal)\n\t}\n\n\t/**\n\t * sends a GET request\n\t *\n\t * @param {string} url - URL to do the request on\n\t * @param {object} headers - additional HTTP headers to send\n\t * @param {string} body - request body\n\t * @param {AbortSignal} abortSignal - the signal from an abort controller\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync get(url, headers = {}, body = null, abortSignal = null) {\n\t\treturn this.request('GET', url, headers, body, abortSignal)\n\t}\n\n\t/**\n\t * sends a PATCH request\n\t *\n\t * @param {string} url - URL to do the request on\n\t * @param {object} headers - additional HTTP headers to send\n\t * @param {string} body - request body\n\t * @param {AbortSignal} abortSignal - the signal from an abort controller\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync patch(url, headers, body, abortSignal = null) {\n\t\treturn this.request('PATCH', url, headers, body, abortSignal)\n\t}\n\n\t/**\n\t * sends a POST request\n\t *\n\t * @param {string} url - URL to do the request on\n\t * @param {object} headers - additional HTTP headers to send\n\t * @param {string} body - request body\n\t * @param {AbortSignal} abortSignal - the signal from an abort controller\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync post(url, headers, body, abortSignal = null) {\n\t\treturn this.request('POST', url, headers, body, abortSignal)\n\t}\n\n\t/**\n\t * sends a PUT request\n\t *\n\t * @param {string} url - URL to do the request on\n\t * @param {object} headers - additional HTTP headers to send\n\t * @param {string} body - request body\n\t * @param {AbortSignal} abortSignal - the signal from an abort controller\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync put(url, headers, body, abortSignal = null) {\n\t\treturn this.request('PUT', url, headers, body, abortSignal)\n\t}\n\n\t/**\n\t * sends a DELETE request\n\t *\n\t * @param {string} url - URL to do the request on\n\t * @param {object} headers - additional HTTP headers to send\n\t * @param {string} body - request body\n\t * @param {AbortSignal} abortSignal - the signal from an abort controller\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync delete(url, headers = {}, body = null, abortSignal = null) {\n\t\treturn this.request('DELETE', url, headers, body, abortSignal)\n\t}\n\n\t/**\n\t * sends a COPY request\n\t * https://tools.ietf.org/html/rfc4918#section-9.8\n\t *\n\t * @param {string} url - URL to do the request on\n\t * @param {string} destination - place to copy the object/collection to\n\t * @param {number | string} depth - 0 = copy collection without content, Infinity = copy collection with content\n\t * @param {boolean} overwrite - whether or not to overwrite destination if existing\n\t * @param {object} headers - additional HTTP headers to send\n\t * @param {string} body - request body\n\t * @param {AbortSignal} abortSignal - the signal from an abort controller\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync copy(url, destination, depth = 0, overwrite = false, headers = {}, body = null, abortSignal = null) {\n\t\theaders.Destination = destination\n\t\theaders.Depth = depth\n\t\theaders.Overwrite = overwrite ? 'T' : 'F'\n\n\t\treturn this.request('COPY', url, headers, body, abortSignal)\n\t}\n\n\t/**\n\t * sends a MOVE request\n\t * https://tools.ietf.org/html/rfc4918#section-9.9\n\t *\n\t * @param {string} url - URL to do the request on\n\t * @param {string} destination - place to move the object/collection to\n\t * @param {boolean} overwrite - whether or not to overwrite destination if existing\n\t * @param {object} headers - additional HTTP headers to send\n\t * @param {string} body - request body\n\t * @param {AbortSignal} abortSignal - the signal from an abort controller\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync move(url, destination, overwrite = false, headers = {}, body = null, abortSignal = null) {\n\t\theaders.Destination = destination\n\t\theaders.Depth = 'Infinity'\n\t\theaders.Overwrite = overwrite ? 'T' : 'F'\n\n\t\treturn this.request('MOVE', url, headers, body, abortSignal)\n\t}\n\n\t/**\n\t * sends a LOCK request\n\t * https://tools.ietf.org/html/rfc4918#section-9.10\n\t *\n\t * @param {string} url - URL to do the request on\n\t * @param {object} headers - additional HTTP headers to send\n\t * @param {string} body - request body\n\t * @param {AbortSignal} abortSignal - the signal from an abort controller\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync lock(url, headers = {}, body = null, abortSignal = null) {\n\n\t\t// TODO - add parameters for Depth and Timeout\n\n\t\treturn this.request('LOCK', url, headers, body, abortSignal)\n\t}\n\n\t/**\n\t * sends an UNLOCK request\n\t * https://tools.ietf.org/html/rfc4918#section-9.11\n\t *\n\t * @param {string} url - URL to do the request on\n\t * @param {object} headers - additional HTTP headers to send\n\t * @param {string} body - request body\n\t * @param {AbortSignal} abortSignal - the signal from an abort controller\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync unlock(url, headers = {}, body = null, abortSignal = null) {\n\n\t\t// TODO - add parameter for Lock-Token\n\n\t\treturn this.request('UNLOCK', url, headers, body, abortSignal)\n\t}\n\n\t/**\n\t * sends a PROPFIND request\n\t * https://tools.ietf.org/html/rfc4918#section-9.1\n\t *\n\t * @param {string} url - URL to do the request on\n\t * @param {string[][]} properties - list of properties to search for, formatted as [namespace, localName]\n\t * @param {number | string} depth - Depth header to send\n\t * @param {object} headers - additional HTTP headers to send\n\t * @param {AbortSignal} abortSignal - the signal from an abort controller\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync propFind(url, properties, depth = 0, headers = {}, abortSignal = null) {\n\t\t// adjust headers\n\t\theaders.Depth = depth\n\n\t\t// create request body\n\t\tconst [skeleton, dPropChildren] = XMLUtility.getRootSkeleton([NS.DAV, 'propfind'], [NS.DAV, 'prop'])\n\t\tdPropChildren.push(...properties.map(p => ({ name: p })))\n\t\tconst body = XMLUtility.serialize(skeleton)\n\n\t\treturn this.request('PROPFIND', url, headers, body, abortSignal)\n\t}\n\n\t/**\n\t * sends a PROPPATCH request\n\t * https://tools.ietf.org/html/rfc4918#section-9.2\n\t *\n\t * @param {string} url - URL to do the request on\n\t * @param {object} headers - additional HTTP headers to send\n\t * @param {string} body - request body\n\t * @param {AbortSignal} abortSignal - the signal from an abort controller\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync propPatch(url, headers, body, abortSignal = null) {\n\t\treturn this.request('PROPPATCH', url, headers, body, abortSignal)\n\t}\n\n\t/**\n\t * sends a MKCOL request\n\t * https://tools.ietf.org/html/rfc4918#section-9.3\n\t * https://tools.ietf.org/html/rfc5689\n\t *\n\t * @param {string} url - URL to do the request on\n\t * @param {object} headers - additional HTTP headers to send\n\t * @param {string} body - request body\n\t * @param {AbortSignal} abortSignal - the signal from an abort controller\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync mkCol(url, headers, body, abortSignal = null) {\n\t\treturn this.request('MKCOL', url, headers, body, abortSignal)\n\t}\n\n\t/**\n\t * sends a REPORT request\n\t * https://tools.ietf.org/html/rfc3253#section-3.6\n\t *\n\t * @param {string} url - URL to do the request on\n\t * @param {object} headers - additional HTTP headers to send\n\t * @param {string} body - request body\n\t * @param {AbortSignal} abortSignal - the signal from an abort controller\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync report(url, headers, body, abortSignal = null) {\n\t\treturn this.request('REPORT', url, headers, body, abortSignal)\n\t}\n\n\t/**\n\t * sends generic request\n\t *\n\t * @param {string} method - HTTP Method name\n\t * @param {string} url - URL to do the request on\n\t * @param {object} headers - additional HTTP headers to send\n\t * @param {string} body - request body\n\t * @param {AbortSignal} abortSignal - the signal from an abort controller\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync request(method, url, headers, body, abortSignal) {\n\t\tconst assignHeaders = Object.assign({}, getDefaultHeaders(), this.defaultHeaders, headers)\n\t\ttry {\n\t\t\tconst response = await axios.request({\n\t\t\t\turl: this.absoluteUrl(url),\n\t\t\t\tmethod,\n\t\t\t\theaders: assignHeaders,\n\t\t\t\tdata: body,\n\t\t\t\t// all statuses not in success are treated as errors in catch\n\t\t\t\tvalidateStatus: wasRequestSuccessful,\n\t\t\t\tsignal: abortSignal,\n\t\t\t})\n\n\t\t\tlet responseBody = response.data\n\t\t\tif (response.status === 207) {\n\t\t\t\tresponseBody = this._parseMultiStatusResponse(responseBody)\n\t\t\t\tif (parseInt(assignHeaders.Depth, 10) === 0 && method === 'PROPFIND') {\n\t\t\t\t\tresponseBody = responseBody[Object.keys(responseBody)[0]]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tbody: responseBody,\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders: response.headers,\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (axios.isCancel(error)) {\n\t\t\t\t// xhr.onabort\n\t\t\t\t// AbortController.abort\n\t\t\t\tthrow new NetworkRequestAbortedError({\n\t\t\t\t\tbody: null,\n\t\t\t\t\tstatus: -1,\n\t\t\t\t\theaders: error.headers || {},\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (error.request) {\n\t\t\t\t// xhr.onerror\n\t\t\t\tthrow new NetworkRequestError({\n\t\t\t\t\tbody: null,\n\t\t\t\t\tstatus: -1,\n\t\t\t\t\theaders: error.headers || {},\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (error.status >= 400 && error.status < 500) {\n\t\t\t\tthrow new NetworkRequestClientError({\n\t\t\t\t\tbody: error.data,\n\t\t\t\t\tstatus: error.status,\n\t\t\t\t\theaders: error.headers || {},\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (error.status >= 500 && error.status < 600) {\n\t\t\t\tthrow new NetworkRequestServerError({\n\t\t\t\t\tbody: error.data,\n\t\t\t\t\tstatus: error.status,\n\t\t\t\t\theaders: error.headers || {},\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tthrow new NetworkRequestHttpError({\n\t\t\t\tbody: error.data,\n\t\t\t\tstatus: error.status,\n\t\t\t\theaders: error.headers || {},\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * returns name of file / folder of a url\n\t *\n\t * @param url\n\t * @params {string} url\n\t * @return {string}\n\t */\n\tfilename(url) {\n\t\tlet pathname = this.pathname(url)\n\t\tif (pathname.slice(-1) === '/') {\n\t\t\tpathname = pathname.slice(0, -1)\n\t\t}\n\n\t\tconst slashPos = pathname.lastIndexOf('/')\n\t\treturn pathname.slice(slashPos)\n\t}\n\n\t/**\n\t * returns pathname for a URL\n\t *\n\t * @param url\n\t * @params {string} url\n\t * @return {string}\n\t */\n\tpathname(url) {\n\t\tconst urlObject = new URL(url, this.baseUrl)\n\t\treturn urlObject.pathname\n\t}\n\n\t/**\n\t * returns absolute url\n\t *\n\t * @param {string} url\n\t * @return {string}\n\t */\n\tabsoluteUrl(url) {\n\t\tconst urlObject = new URL(url, this.baseUrl)\n\t\treturn urlObject.href\n\t}\n\n\t/**\n\t * parses a multi status response (207), sorts them by path\n\t * and drops all unsuccessful responses\n\t *\n\t * @param {string} body\n\t * @return {object}\n\t * @private\n\t */\n\t_parseMultiStatusResponse(body) {\n\t\tconst result = {}\n\t\tconst domParser = new DOMParser()\n\t\tconst document = domParser.parseFromString(body, 'application/xml')\n\n\t\tconst responses = document.evaluate('/d:multistatus/d:response', document, NS.resolve, XPathResult.ANY_TYPE, null)\n\t\tlet responseNode\n\n\t\twhile ((responseNode = responses.iterateNext()) !== null) {\n\t\t\tconst href = document.evaluate('string(d:href)', responseNode, NS.resolve, XPathResult.ANY_TYPE, null).stringValue\n\t\t\tconst parsedProperties = {}\n\t\t\tconst propStats = document.evaluate('d:propstat', responseNode, NS.resolve, XPathResult.ANY_TYPE, null)\n\t\t\tlet propStatNode\n\n\t\t\twhile ((propStatNode = propStats.iterateNext()) !== null) {\n\t\t\t\tconst status = document.evaluate('string(d:status)', propStatNode, NS.resolve, XPathResult.ANY_TYPE, null).stringValue\n\t\t\t\tif (!wasRequestSuccessful(getStatusCodeFromString(status))) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tconst props = document.evaluate('d:prop/*', propStatNode, NS.resolve, XPathResult.ANY_TYPE, null)\n\t\t\t\tlet propNode\n\n\t\t\t\twhile ((propNode = props.iterateNext()) !== null) {\n\t\t\t\t\tif (this.parser.canParse(`{${propNode.namespaceURI}}${propNode.localName}`)) {\n\t\t\t\t\t\tparsedProperties[`{${propNode.namespaceURI}}${propNode.localName}`]\n\t\t\t\t\t\t\t= this.parser.parse(document, propNode, NS.resolve)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tresult[href] = parsedProperties\n\t\t}\n\n\t\treturn result\n\t}\n\n}\n\n/**\n * Check if response code is in the 2xx section\n *\n * @param {number} status\n * @return {boolean}\n * @private\n */\nfunction wasRequestSuccessful(status) {\n\treturn status >= 200 && status < 300\n}\n\n/**\n * Extract numeric status code from string like \"HTTP/1.1 200 OK\"\n *\n * @param {string} status\n * @return {number}\n * @private\n */\nfunction getStatusCodeFromString(status) {\n\treturn parseInt(status.split(' ')[1], 10)\n}\n\n/**\n * get object with default headers to include in every request\n *\n * @return {object}\n * @property {string} depth\n * @property {string} Content-Type\n * @private\n */\nfunction getDefaultHeaders() {\n\t// TODO: https://tools.ietf.org/html/rfc4918#section-9.1\n\t// \"Servers SHOULD treat request without a Depth header\n\t// as if a \"Depth: infinity\" header was included.\"\n\t// Should infinity be the default?\n\n\treturn {\n\t\tDepth: '0',\n\t\t'Content-Type': 'application/xml; charset=utf-8',\n\t}\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n// uuidv4 taken from https://stackoverflow.com/a/2117523\n/**\n *\n */\nfunction uuidv4() {\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n\t\tconst r = Math.random() * 16 | 0; const v = c === 'x' ? r : (r & 0x3 | 0x8)\n\t\treturn v.toString(16).toUpperCase()\n\t})\n}\n\n/**\n * generates a unique id with the option to pass a prefix and a filetype\n *\n * @param {string} prefix\n * @param {string} suffix\n * @return {string}\n */\nexport function uid(prefix, suffix) {\n\tprefix = prefix || ''\n\tsuffix = suffix || ''\n\n\tif (prefix !== '') {\n\t\tprefix += '-'\n\t}\n\tif (suffix !== '') {\n\t\tsuffix = '.' + suffix\n\t}\n\n\treturn prefix + uuidv4() + suffix\n}\n\n/**\n * generates a uri and checks with isAvailable, whether or not the uri is still available\n *\n * @param {string} start\n * @param {Function} isAvailable\n * @return {string}\n */\nexport function uri(start, isAvailable) {\n\tstart = start || ''\n\n\tlet uri = start.toString().toLowerCase()\n\t\t.replace(/\\s+/g, '-') // Replace spaces with -\n\t\t.replace(/[^\\w-]+/g, '') // Remove all non-word chars\n\t\t.replace(/--+/g, '-') // Replace multiple - with single -\n\t\t.replace(/^-+/, '') // Trim - from start of text\n\t\t.replace(/-+$/, '') // Trim - from end of text\n\n\tif (uri === '') {\n\t\turi = '-'\n\t}\n\n\tif (isAvailable(uri)) {\n\t\treturn uri\n\t}\n\n\tif (uri.indexOf('-') === -1) {\n\t\turi = uri + '-1'\n\t\tif (isAvailable(uri)) {\n\t\t\treturn uri\n\t\t}\n\t}\n\n\t// === false because !undefined = true, possible infinite loop\n\tdo {\n\t\tconst positionLastDash = uri.lastIndexOf('-')\n\t\tconst firstPart = uri.slice(0, positionLastDash)\n\t\tlet lastPart = uri.slice(positionLastDash + 1)\n\n\t\tif (lastPart.match(/^\\d+$/)) {\n\t\t\tlastPart = parseInt(lastPart)\n\t\t\tlastPart++\n\n\t\t\turi = firstPart + '-' + lastPart\n\t\t} else {\n\t\t\turi = uri + '-1'\n\t\t}\n\t} while (isAvailable(uri) === false)\n\n\treturn uri\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nexport default class DAVEventListener {\n\n\tconstructor() {\n\t\tthis._eventListeners = {}\n\t}\n\n\t/**\n\t * adds an event listener\n\t *\n\t * @param {string} type\n\t * @param {Function} listener\n\t * @param {object} options\n\t */\n\taddEventListener(type, listener, options = null) {\n\t\tthis._eventListeners[type] = this._eventListeners[type] || []\n\t\tthis._eventListeners[type].push({ listener, options })\n\t}\n\n\t/**\n\t * removes an event listener\n\t *\n\t * @param {string} type\n\t * @param {Function} dListener\n\t */\n\tremoveEventListener(type, dListener) {\n\t\tif (!this._eventListeners[type]) {\n\t\t\treturn\n\t\t}\n\n\t\tconst index = this._eventListeners[type]\n\t\t\t.findIndex(({ listener }) => listener === dListener)\n\t\tif (index === -1) {\n\t\t\treturn\n\t\t}\n\t\tthis._eventListeners[type].splice(index, 1)\n\t}\n\n\t/**\n\t * dispatch event on object\n\t *\n\t * @param {string} type\n\t * @param {DAVEvent} event\n\t */\n\tdispatchEvent(type, event) {\n\t\tif (!this._eventListeners[type]) {\n\t\t\treturn\n\t\t}\n\n\t\tconst listenersToCall = []\n\t\tconst listenersToCallAndRemove = []\n\t\tthis._eventListeners[type].forEach(({ listener, options }) => {\n\t\t\tif (options && options.once) {\n\t\t\t\tlistenersToCallAndRemove.push(listener)\n\t\t\t} else {\n\t\t\t\tlistenersToCall.push(listener)\n\t\t\t}\n\t\t})\n\n\t\tlistenersToCallAndRemove.forEach(listener => {\n\t\t\tthis.removeEventListener(type, listener)\n\t\t\tlistener(event)\n\t\t})\n\t\tlistenersToCall.forEach(listener => {\n\t\t\tlistener(event)\n\t\t})\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/**\n * creates a debug function bound to a context\n * @param {string} context\n * @return {Function}\n */\nexport function debugFactory(context) {\n\treturn (...args) => {\n\t\tif (debugFactory.enabled) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.debug(context, ...args)\n\t\t}\n\t}\n}\n\ndebugFactory.enabled = false\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport * as NS from '../utility/namespaceUtility.js'\n\n/**\n *\n * This function is capable of creating the propset xml structure for:\n * - {DAV:}displayname\n *\n * @param {object} props\n * @return {object}\n */\nexport default function davCollectionPropSet(props) {\n\tconst xmlified = []\n\n\tObject.entries(props).forEach(([key, value]) => {\n\t\tswitch (key) {\n\t\tcase '{DAV:}displayname':\n\t\t\txmlified.push({\n\t\t\t\tname: [NS.DAV, 'displayname'],\n\t\t\t\tvalue,\n\t\t\t})\n\t\t\tbreak\n\n\t\tdefault:\n\t\t\tbreak\n\t\t}\n\t})\n\n\treturn xmlified\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport DAVEventListener from './davEventListener.js'\nimport NetworkRequestClientError from '../errors/networkRequestClientError.js'\nimport * as NS from '../utility/namespaceUtility.js'\n\nimport { debugFactory } from '../debug.js'\nconst debug = debugFactory('DavObject')\n\n/**\n * @class\n * @classdesc Generic DavObject aka file\n */\nexport class DavObject extends DAVEventListener {\n\n\t/**\n\t * @param {DavCollection} parent - The parent collection this DavObject is a child of\n\t * @param {Request} request - The request object initialized by DavClient\n\t * @param {string} url - Full url of this DavObject\n\t * @param {object} props - Properties including etag, content-type, etc.\n\t * @param {boolean} isPartial - Are we dealing with the complete or just partial addressbook / calendar data\n\t */\n\tconstructor(parent, request, url, props, isPartial = false) {\n\t\tsuper()\n\n\t\tObject.assign(this, {\n\t\t\t// parameters\n\t\t\t_parent: parent,\n\t\t\t_request: request,\n\t\t\t_url: url,\n\t\t\t_props: props,\n\t\t\t// housekeeping\n\t\t\t_isPartial: isPartial,\n\t\t\t_isDirty: false,\n\t\t})\n\n\t\tthis._exposeProperty('etag', NS.DAV, 'getetag', true)\n\t\tthis._exposeProperty('contenttype', NS.DAV, 'getcontenttype')\n\n\t\tObject.defineProperty(this, 'url', {\n\t\t\tget: () => this._url,\n\t\t})\n\t}\n\n\t/**\n\t * gets unfiltered data for this object\n\t *\n\t * @param {boolean} forceReFetch Always refetch data, even if not partial\n\t * @return {Promise<void>}\n\t */\n\tasync fetchCompleteData(forceReFetch = false) {\n\t\tif (!forceReFetch && !this.isPartial()) {\n\t\t\treturn\n\t\t}\n\n\t\tconst request = await this._request.propFind(this._url, this.constructor.getPropFindList(), 0)\n\t\tthis._props = request.body\n\t\tthis._isDirty = false\n\t\tthis._isPartial = false\n\t}\n\n\t/**\n\t * copies a DavObject to a different DavCollection\n\t * @param {DavCollection} collection\n\t * @param {boolean} overwrite\n\t * @param headers\n\t * @return {Promise<DavObject>} Promise that resolves to the copied DavObject\n\t */\n\tasync copy(collection, overwrite = false, headers = {}) {\n\t\tdebug(`copying ${this.url} from ${this._parent.url} to ${collection.url}`)\n\n\t\tif (this._parent === collection) {\n\t\t\tthrow new Error('Copying an object to the collection it\\'s already part of is not supported')\n\t\t}\n\t\tif (!this._parent.isSameCollectionTypeAs(collection)) {\n\t\t\tthrow new Error('Copying an object to a collection of a different type is not supported')\n\t\t}\n\t\tif (!collection.isWriteable()) {\n\t\t\tthrow new Error('Can not copy object into read-only destination collection')\n\t\t}\n\n\t\tconst uri = this.url.split('/').splice(-1, 1)[0]\n\t\tconst destination = collection.url + uri\n\n\t\tawait this._request.copy(this.url, destination, 0, overwrite, headers)\n\t\treturn collection.find(uri)\n\t}\n\n\t/**\n\t * moves a DavObject to a different DavCollection\n\t * @param {DavCollection} collection\n\t * @param {boolean} overwrite\n\t * @param headers\n\t * @return {Promise<void>}\n\t */\n\tasync move(collection, overwrite = false, headers = {}) {\n\t\tdebug(`moving ${this.url} from ${this._parent.url} to ${collection.url}`)\n\n\t\tif (this._parent === collection) {\n\t\t\tthrow new Error('Moving an object to the collection it\\'s already part of is not supported')\n\t\t}\n\t\tif (!this._parent.isSameCollectionTypeAs(collection)) {\n\t\t\tthrow new Error('Moving an object to a collection of a different type is not supported')\n\t\t}\n\t\tif (!collection.isWriteable()) {\n\t\t\tthrow new Error('Can not move object into read-only destination collection')\n\t\t}\n\n\t\tconst uri = this.url.split('/').splice(-1, 1)[0]\n\t\tconst destination = collection.url + uri\n\n\t\tawait this._request.move(this.url, destination, overwrite, headers)\n\t\tthis._parent = collection\n\t\tthis._url = destination\n\t}\n\n\t/**\n\t * updates the DavObject on the server\n\t * @return {Promise<void>}\n\t */\n\tasync update() {\n\t\t// 1. Do not update filtered objects, because we would be loosing data on the server\n\t\t// 2. No need to update if object was never modified\n\t\t// 3. Do not update if called directly on DavObject, because there is no data prop\n\t\tif (this.isPartial() || !this.isDirty() || !this.data) {\n\t\t\treturn\n\t\t}\n\n\t\tconst headers = {}\n\n\t\t// updating an object should use it's content-type\n\t\tif (this.contenttype) {\n\t\t\theaders['Content-Type'] = `${this.contenttype}; charset=utf-8`\n\t\t}\n\t\tif (this.etag) {\n\t\t\theaders['If-Match'] = this.etag\n\t\t}\n\n\t\treturn this._request.put(this.url, headers, this.data).then((res) => {\n\t\t\tthis._isDirty = false\n\t\t\t// Don't overwrite content-type, it's set to text/html in the response ...\n\t\t\tthis._props['{DAV:}getetag'] = res.headers.etag || null\n\t\t}).catch((ex) => {\n\t\t\tthis._isDirty = true\n\n\t\t\tif (ex instanceof NetworkRequestClientError && ex.status === 412) {\n\t\t\t\tthis._isPartial = true\n\t\t\t}\n\n\t\t\tthrow ex\n\t\t})\n\t}\n\n\t/**\n\t * deletes the DavObject on the server\n\t *\n\t * @param headers\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync delete(headers = {}) {\n\t\treturn this._request.delete(this.url, headers)\n\t}\n\n\t/**\n\t * returns whether the data in this DavObject is the result of a partial retrieval\n\t *\n\t * @return {boolean}\n\t */\n\tisPartial() {\n\t\treturn this._isPartial\n\t}\n\n\t/**\n\t * returns whether the data in this DavObject contains unsynced changes\n\t *\n\t * @return {boolean}\n\t */\n\tisDirty() {\n\t\treturn this._isDirty\n\t}\n\n\t/**\n\t * @protected\n\t * @param {string} localName\n\t * @param {string} xmlNamespace\n\t * @param {string} xmlName\n\t * @param {boolean} mutable\n\t * @return void\n\t */\n\t_exposeProperty(localName, xmlNamespace, xmlName, mutable = false) {\n\t\tif (mutable) {\n\t\t\tObject.defineProperty(this, localName, {\n\t\t\t\tget: () => this._props[`{${xmlNamespace}}${xmlName}`],\n\t\t\t\tset: (val) => {\n\t\t\t\t\tthis._isDirty = true\n\t\t\t\t\tthis._props[`{${xmlNamespace}}${xmlName}`] = val\n\t\t\t\t},\n\t\t\t})\n\t\t} else {\n\t\t\tObject.defineProperty(this, localName, {\n\t\t\t\tget: () => this._props[`{${xmlNamespace}}${xmlName}`],\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * A list of all property names that should be included\n\t * in propfind requests that may include this object\n\t *\n\t * @return {string[][]}\n\t */\n\tstatic getPropFindList() {\n\t\treturn [\n\t\t\t[NS.DAV, 'getcontenttype'],\n\t\t\t[NS.DAV, 'getetag'],\n\t\t\t[NS.DAV, 'resourcetype'],\n\t\t]\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport * as NS from '../utility/namespaceUtility.js'\nimport * as StringUtility from '../utility/stringUtility.js'\nimport * as XMLUtility from '../utility/xmlUtility.js'\nimport DAVEventListener from './davEventListener.js'\n\nimport { debugFactory } from '../debug.js'\nimport davCollectionPropSet from '../propset/davCollectionPropSet.js'\nimport { DavObject } from './davObject.js'\nconst debug = debugFactory('DavCollection')\n\nexport class DavCollection extends DAVEventListener {\n\n\t/**\n\t * @param {object} parent\n\t * @param {Request} request\n\t * @param {string} url\n\t * @param {object} props\n\t */\n\tconstructor(parent, request, url, props) {\n\t\tsuper()\n\n\t\t// This is a collection, so always make sure to end with a /\n\t\tif (url.slice(-1) !== '/') {\n\t\t\turl += '/'\n\t\t}\n\n\t\tObject.assign(this, {\n\t\t\t// parameters\n\t\t\t_parent: parent,\n\t\t\t_request: request,\n\t\t\t_url: url,\n\t\t\t_props: props,\n\t\t\t// constructors\n\t\t\t_collectionFactoryMapper: {},\n\t\t\t_objectFactoryMapper: {},\n\t\t\t// house keeping\n\t\t\t_updatedProperties: [],\n\t\t\t_childrenNames: [],\n\n\t\t\t// parsers / factories\n\t\t\t_propFindList: [],\n\t\t\t_propSetFactory: [],\n\n\t\t})\n\n\t\tthis._registerPropSetFactory(davCollectionPropSet)\n\n\t\tthis._exposeProperty('displayname', NS.DAV, 'displayname', true)\n\t\tthis._exposeProperty('owner', NS.DAV, 'owner')\n\t\tthis._exposeProperty('resourcetype', NS.DAV, 'resourcetype')\n\t\tthis._exposeProperty('syncToken', NS.DAV, 'sync-token')\n\t\tthis._exposeProperty('currentUserPrivilegeSet', NS.DAV, 'current-user-privilege-set')\n\n\t\tObject.defineProperty(this, 'url', {\n\t\t\tget: () => this._url,\n\t\t})\n\n\t\tthis._propFindList.push(...DavObject.getPropFindList())\n\t\tthis._propFindList.push(...DavCollection.getPropFindList())\n\t}\n\n\t/**\n\t * finds all children of a collection\n\t *\n\t * @return {Promise<DavObject[]|DavCollection[]>}\n\t */\n\tasync findAll() {\n\t\tconst response = await this._request.propFind(this._url, this._propFindList, 1)\n\t\treturn this._handleMultiStatusResponse(response, false)\n\t}\n\n\t/**\n\t * finds all children of a collection filtered by filter\n\t *\n\t * @param {Function} filter\n\t * @return {Promise<DavObject[]|DavCollection[]>}\n\t */\n\tasync findAllByFilter(filter) {\n\t\tconst all = await this.findAll()\n\t\treturn all.filter(filter)\n\t}\n\n\t/**\n\t * find one object by its uri\n\t *\n\t * @param {string} uri\n\t * @return {Promise<DavObject|DavCollection>}\n\t */\n\tasync find(uri) {\n\t\tconst response = await this._request.propFind(this._url + uri, this._propFindList, 0)\n\t\tresponse.body = { [this._url + uri]: response.body }\n\t\treturn this._handleMultiStatusResponse(response, false)[0]\n\t}\n\n\t/**\n\t * creates a new webdav collection\n\t * https://tools.ietf.org/html/rfc5689\n\t *\n\t * You usually don't want to call this method directly\n\t * but instead use:\n\t * - AddressBookHome->createAddressBookCollection\n\t * - CalendarHome->createCalendarCollection\n\t * - CalendarHome->createSubscribedCollection\n\t *\n\t * @param {string} name\n\t * @param {?Array} props\n\t * @return {Promise<DavCollection>}\n\t */\n\tasync createCollection(name, props = null) {\n\t\tdebug('creating a collection')\n\n\t\tif (!props) {\n\t\t\tprops = [{\n\t\t\t\tname: [NS.DAV, 'resourcetype'],\n\t\t\t\tchildren: [{\n\t\t\t\t\tname: [NS.DAV, 'collection'],\n\t\t\t\t}],\n\t\t\t}]\n\t\t}\n\n\t\tconst [skeleton, dPropChildren] = XMLUtility.getRootSkeleton(\n\t\t\t[NS.DAV, 'mkcol'],\n\t\t\t[NS.DAV, 'set'],\n\t\t\t[NS.DAV, 'prop'],\n\t\t)\n\n\t\tdPropChildren.push(...props)\n\n\t\tconst uri = this._getAvailableNameFromToken(name)\n\t\tconst data = XMLUtility.serialize(skeleton)\n\t\tawait this._request.mkCol(this.url + uri, {}, data)\n\t\treturn this.find(uri + '/')\n\t}\n\n\t/**\n\t * creates a new webdav object inside this collection\n\t *\n\t * You usually don't want to call this method directly\n\t * but instead use:\n\t * - AddressBook->createVCard\n\t * - Calendar->createVObject\n\t *\n\t * @param {string} name\n\t * @param {object} headers\n\t * @param {string} data\n\t * @return {Promise<DavObject>}\n\t */\n\tasync createObject(name, headers, data) {\n\t\tdebug('creating an object')\n\n\t\tawait this._request.put(this.url + name, headers, data)\n\t\treturn this.find(name)\n\t}\n\n\t/**\n\t * sends a PropPatch request to update the collections' properties\n\t * The request is only made if properties actually changed\n\t *\n\t * @return {Promise<void>}\n\t */\n\tasync update() {\n\t\tif (this._updatedProperties.length === 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst properties = {}\n\t\tthis._updatedProperties.forEach((updatedProperty) => {\n\t\t\tproperties[updatedProperty] = this._props[updatedProperty]\n\t\t})\n\t\tconst propSet = this._propSetFactory.reduce((arr, p) => [...arr, ...p(properties)], [])\n\n\t\tconst [skeleton, dPropSet] = XMLUtility.getRootSkeleton(\n\t\t\t[NS.DAV, 'propertyupdate'],\n\t\t\t[NS.DAV, 'set'],\n\t\t\t[NS.DAV, 'prop'])\n\n\t\tdPropSet.push(...propSet)\n\n\t\tconst body = XMLUtility.serialize(skeleton)\n\t\tawait this._request.propPatch(this._url, {}, body)\n\t}\n\n\t/**\n\t * deletes the DavCollection on the server\n\t *\n\t * @param {object} headers - additional HTTP headers to send\n\t * @return {Promise<void>}\n\t */\n\tasync delete(headers = {}) {\n\t\tawait this._request.delete(this._url, headers)\n\t}\n\n\t/**\n\t * @deprecated use canReadObject instead\n\t *\n\t * @return {boolean}\n\t */\n\tisReadable() {\n\t\treturn this.currentUserPrivilegeSet.includes('{DAV:}read')\n\t}\n\n\t/**\n\t * @deprecated use canCreateObject, canModifyObject, canDeleteObject instead\n\t *\n\t * @return {boolean}\n\t */\n\tisWriteable() {\n\t\treturn this.currentUserPrivilegeSet.includes('{DAV:}write')\n\t}\n\n\t/**\n\t * checks whether the current user has the privileges to modify properties in this collection\n\t *\n\t * @return {boolean}\n\t */\n\tcanModifyProperties() {\n\t\treturn this.currentUserPrivilegeSet.includes('{DAV:}write-properties')\n\t\t\t|| this.currentUserPrivilegeSet.includes('{DAV:}write')\n\t\t\t|| this.currentUserPrivilegeSet.includes('{DAV:}all')\n\t}\n\n\t/**\n\t * checks whether the current user has the privileges to read ACLs of this collection\n\t *\n\t * @return {boolean}\n\t */\n\tcanReadPermissions() {\n\t\treturn this.currentUserPrivilegeSet.includes('{DAV:}read-acl')\n\t\t\t|| this.currentUserPrivilegeSet.includes('{DAV:}all')\n\t}\n\n\t/**\n\t * checks whether the current user has the privileges to modify ACLs of this collection\n\t *\n\t * @return {boolean}\n\t */\n\tcanModifyPermissions() {\n\t\treturn this.currentUserPrivilegeSet.includes('{DAV:}write-acl')\n\t\t\t|| this.currentUserPrivilegeSet.includes('{DAV:}all')\n\t}\n\n\t/**\n\t * checks whether the current user has the privileges to read objects in this collection\n\t *\n\t * @return {boolean}\n\t */\n\tcanReadObject() {\n\t\treturn this.currentUserPrivilegeSet.includes('{DAV:}read')\n\t\t\t|| this.currentUserPrivilegeSet.includes('{DAV:}write')\n\t\t\t|| this.currentUserPrivilegeSet.includes('{DAV:}all')\n\t}\n\n\t/**\n\t * checks whether the current user has the privileges to create objects in this collection\n\t *\n\t * @return {boolean}\n\t */\n\tcanCreateObject() {\n\t\treturn this.currentUserPrivilegeSet.includes('{DAV:}bind')\n\t\t\t|| this.currentUserPrivilegeSet.includes('{DAV:}write')\n\t\t\t|| this.currentUserPrivilegeSet.includes('{DAV:}all')\n\t}\n\n\t/**\n\t * checks whether the current user has the privileges to modify objects in this collection\n\t *\n\t * @return {boolean}\n\t */\n\tcanModifyObject() {\n\t\treturn this.currentUserPrivilegeSet.includes('{DAV:}write-content')\n\t\t\t|| this.currentUserPrivilegeSet.includes('{DAV:}write')\n\t\t\t|| this.currentUserPrivilegeSet.includes('{DAV:}all')\n\t}\n\n\t/**\n\t * checks whether the current user has the privileges to delete objects in this collection\n\t *\n\t * @return {boolean}\n\t */\n\tcanDeleteObject() {\n\t\treturn this.currentUserPrivilegeSet.includes('{DAV:}unbind')\n\t\t\t|| this.currentUserPrivilegeSet.includes('{DAV:}write')\n\t\t\t|| this.currentUserPrivilegeSet.includes('{DAV:}all')\n\t}\n\n\t/**\n\t * checks whether this is of the same type as another collection\n\t * @param {DavCollection} collection\n\t */\n\tisSameCollectionTypeAs(collection) {\n\t\tconst ownResourceType = this.resourcetype\n\t\tconst foreignResourceType = collection.resourcetype\n\n\t\tconst ownDiff = ownResourceType.find((r) => foreignResourceType.indexOf(r) === -1)\n\t\tconst foreignDiff = foreignResourceType.find((r) => ownResourceType.indexOf(r) === -1)\n\n\t\treturn ownDiff === undefined && foreignDiff === undefined\n\t}\n\n\t/**\n\t * @protected\n\t * @param {string} identifier\n\t * @param {Function} factory\n\t * @return void\n\t */\n\t_registerCollectionFactory(identifier, factory) {\n\t\tthis._collectionFactoryMapper[identifier] = factory\n\t\tif (typeof factory.getPropFindList === 'function') {\n\t\t\tthis._propFindList.push(...factory.getPropFindList())\n\t\t}\n\t}\n\n\t/**\n\t * @protected\n\t * @param {string} identifier\n\t * @param {Function} factory\n\t * @return void\n\t */\n\t_registerObjectFactory(identifier, factory) {\n\t\tthis._objectFactoryMapper[identifier] = factory\n\t\tif (typeof factory.getPropFindList === 'function') {\n\t\t\tthis._propFindList.push(...factory.getPropFindList())\n\t\t}\n\t}\n\n\t/**\n\t * @protected\n\t * @param factory\n\t * @return void\n\t */\n\t_registerPropSetFactory(factory) {\n\t\tthis._propSetFactory.push(factory)\n\t}\n\n\t/**\n\t * @protected\n\t * @param {string} localName\n\t * @param {string} xmlNamespace\n\t * @param {string} xmlName\n\t * @param {boolean} mutable\n\t * @return void\n\t */\n\t_exposeProperty(localName, xmlNamespace, xmlName, mutable = false) {\n\t\tif (mutable) {\n\t\t\tObject.defineProperty(this, localName, {\n\t\t\t\tget: () => this._props[`{${xmlNamespace}}${xmlName}`],\n\t\t\t\tset: (val) => {\n\t\t\t\t\tthis._props[`{${xmlNamespace}}${xmlName}`] = val\n\t\t\t\t\tif (this._updatedProperties.indexOf(`{${xmlNamespace}}${xmlName}`) === -1) {\n\t\t\t\t\t\tthis._updatedProperties.push(`{${xmlNamespace}}${xmlName}`)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t})\n\t\t} else {\n\t\t\tObject.defineProperty(this, localName, {\n\t\t\t\tget: () => this._props[`{${xmlNamespace}}${xmlName}`],\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * @protected\n\t * @param {string} token\n\t * @return {string}\n\t */\n\t_getAvailableNameFromToken(token) {\n\t\treturn StringUtility.uri(token, name => {\n\t\t\treturn this._childrenNames.indexOf(this._url + name) === -1\n\t\t\t\t&& this._childrenNames.indexOf(this._url + name + '/') === -1\n\t\t})\n\t}\n\n\t/**\n\t * get updated properties for this collection from server\n\t * @protected\n\t * @return {object}\n\t */\n\tasync _updatePropsFromServer() {\n\t\tconst response = await this._request.propFind(this.url, this.constructor.getPropFindList())\n\t\tthis._props = response.body\n\t}\n\n\t/**\n\t * @param {object} response\n\t * @param {boolean} isPartial\n\t * @return {DavObject[]|DavCollection[]}\n\t * @protected\n\t */\n\t_handleMultiStatusResponse(response, isPartial = false) {\n\t\tconst index = []\n\t\tconst children = []\n\n\t\tObject.entries(response.body).forEach(([path, props]) => {\n\t\t\t// The DAV Server will always return a propStat\n\t\t\t// block containing properties of the current url\n\t\t\t// we are not interested, so let's filter it out\n\t\t\tif (path === this._url || path + '/' === this.url) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tindex.push(path)\n\t\t\tconst url = this._request.pathname(path)\n\n\t\t\t// empty resourcetype property => this is no collection\n\t\t\tif (((!props['{DAV:}resourcetype']) || (props['{DAV:}resourcetype'].length === 0)) && props['{DAV:}getcontenttype']) {\n\t\t\t\tdebug(`${path} was identified as a file`)\n\n\t\t\t\tconst contentType = props['{DAV:}getcontenttype'].split(';')[0]\n\t\t\t\tif (!this._objectFactoryMapper[contentType]) {\n\t\t\t\t\tdebug(`No constructor for content-type ${contentType} (${path}) registered, treating as generic object`)\n\t\t\t\t\tchildren.push(new DavObject(this, this._request, url, props))\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tchildren.push(new this._objectFactoryMapper[contentType](this, this._request, url, props, isPartial))\n\t\t\t} else {\n\t\t\t\tdebug(`${path} was identified as a collection`)\n\n\t\t\t\t// get first collection type other than DAV collection\n\t\t\t\tconst collectionType = props['{DAV:}resourcetype'].find((r) => {\n\t\t\t\t\treturn r !== `{${NS.DAV}}collection`\n\t\t\t\t})\n\n\t\t\t\tif (!collectionType) {\n\t\t\t\t\tdebug(`Collection-type of ${path} was not specified, treating as generic collection`)\n\t\t\t\t\tchildren.push(new DavCollection(this, this._request, url, props))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (!this._collectionFactoryMapper[collectionType]) {\n\t\t\t\t\tdebug(`No constructor for collection-type ${collectionType} (${path}) registered, treating as generic collection`)\n\t\t\t\t\tchildren.push(new DavCollection(this, this._request, url, props))\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tchildren.push(new this._collectionFactoryMapper[collectionType](this, this._request, url, props))\n\t\t\t}\n\t\t})\n\n\t\tthis._childrenNames.push(...index)\n\t\treturn children\n\t}\n\n\t/**\n\t * A list of all property names that should be included\n\t * in propfind requests that may include this collection\n\t *\n\t * @return {string[][]}\n\t */\n\tstatic getPropFindList() {\n\t\treturn [\n\t\t\t[NS.DAV, 'displayname'],\n\t\t\t[NS.DAV, 'owner'],\n\t\t\t[NS.DAV, 'resourcetype'],\n\t\t\t[NS.DAV, 'sync-token'],\n\t\t\t[NS.DAV, 'current-user-privilege-set'],\n\t\t]\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport * as NS from '../utility/namespaceUtility.js'\nimport * as XMLUtility from '../utility/xmlUtility.js'\n\nimport { debugFactory } from '../debug.js'\nconst debug = debugFactory('DavCollectionPublishable')\n\n/**\n *\n * @param Base\n */\nexport function davCollectionPublishable(Base) {\n\treturn class extends Base {\n\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tconstructor(...args) {\n\t\t\tsuper(...args)\n\n\t\t\tsuper._exposeProperty('publishURL', NS.CALENDARSERVER, 'publish-url')\n\t\t}\n\n\t\t/**\n\t\t * publishes the DavCollection\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync publish() {\n\t\t\tdebug(`Publishing ${this.url}`)\n\n\t\t\tconst [skeleton] = XMLUtility.getRootSkeleton(\n\t\t\t\t[NS.CALENDARSERVER, 'publish-calendar'])\n\t\t\tconst xml = XMLUtility.serialize(skeleton)\n\n\t\t\t// TODO - ideally the server should return a 'pre-publish-url' as described in the standard\n\n\t\t\tawait this._request.post(this._url, { 'Content-Type': 'application/xml; charset=utf-8' }, xml)\n\t\t\tawait this._updatePropsFromServer()\n\t\t}\n\n\t\t/**\n\t\t * unpublishes the DavCollection\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync unpublish() {\n\t\t\tdebug(`Unpublishing ${this.url}`)\n\n\t\t\tconst [skeleton] = XMLUtility.getRootSkeleton(\n\t\t\t\t[NS.CALENDARSERVER, 'unpublish-calendar'])\n\t\t\tconst xml = XMLUtility.serialize(skeleton)\n\n\t\t\tawait this._request.post(this._url, { 'Content-Type': 'application/xml; charset=utf-8' }, xml)\n\t\t\tdelete this._props['{http://calendarserver.org/ns/}publish-url']\n\t\t}\n\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tstatic getPropFindList() {\n\t\t\treturn super.getPropFindList().concat([\n\t\t\t\t[NS.CALENDARSERVER, 'publish-url'],\n\t\t\t])\n\t\t}\n\n\t}\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport * as NS from '../utility/namespaceUtility.js'\nimport * as XMLUtility from '../utility/xmlUtility.js'\n\nimport { debugFactory } from '../debug.js'\nconst debug = debugFactory('DavCollectionShareable')\n\n/**\n *\n * @param Base\n */\nexport function davCollectionShareable(Base) {\n\treturn class extends Base {\n\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tconstructor(...args) {\n\t\t\tsuper(...args)\n\n\t\t\tsuper._exposeProperty('shares', NS.OWNCLOUD, 'invite')\n\t\t\tsuper._exposeProperty('allowedSharingModes', NS.CALENDARSERVER, 'allowed-sharing-modes')\n\t\t}\n\n\t\t/**\n\t\t * shares a DavCollection\n\t\t *\n\t\t * @param {string} principalScheme\n\t\t * @param {boolean} writeable\n\t\t * @param {string} summary\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync share(principalScheme, writeable = false, summary = '') {\n\t\t\tdebug(`Sharing ${this.url} with ${principalScheme}`)\n\t\t\tconst [skeleton, setProp] = XMLUtility.getRootSkeleton(\n\t\t\t\t[NS.OWNCLOUD, 'share'], [NS.OWNCLOUD, 'set'])\n\n\t\t\tsetProp.push({\n\t\t\t\tname: [NS.DAV, 'href'],\n\t\t\t\tvalue: principalScheme,\n\t\t\t})\n\n\t\t\tif (writeable) {\n\t\t\t\tsetProp.push({\n\t\t\t\t\tname: [NS.OWNCLOUD, 'read-write'],\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (summary !== '') {\n\t\t\t\tsetProp.push({\n\t\t\t\t\tname: [NS.OWNCLOUD, 'summary'],\n\t\t\t\t\tvalue: summary,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst xml = XMLUtility.serialize(skeleton)\n\t\t\treturn this._request.post(this._url, { 'Content-Type': 'application/xml; charset=utf-8' }, xml).then(() => {\n\t\t\t\tconst index = this.shares.findIndex((e) => e.href === principalScheme)\n\n\t\t\t\tif (index === -1) {\n\t\t\t\t\tthis.shares.push({\n\t\t\t\t\t\thref: principalScheme,\n\t\t\t\t\t\taccess: [writeable ? '{http://owncloud.org/ns}read-write' : '{http://owncloud.org/ns}read'],\n\t\t\t\t\t\t'common-name': null,\n\t\t\t\t\t\t'invite-accepted': true,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tthis.shares[index].access\n\t\t\t\t\t\t= [writeable ? '{http://owncloud.org/ns}read-write' : '{http://owncloud.org/ns}read']\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\t/**\n\t\t * unshares a DAVCollection\n\t\t *\n\t\t * @param {string} principalScheme\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync unshare(principalScheme) {\n\t\t\tdebug(`Unsharing ${this.url} with ${principalScheme}`)\n\n\t\t\tconst [skeleton, oSetChildren] = XMLUtility.getRootSkeleton(\n\t\t\t\t[NS.OWNCLOUD, 'share'], [NS.OWNCLOUD, 'remove'])\n\n\t\t\toSetChildren.push({\n\t\t\t\tname: [NS.DAV, 'href'],\n\t\t\t\tvalue: principalScheme,\n\t\t\t})\n\n\t\t\tconst xml = XMLUtility.serialize(skeleton)\n\t\t\treturn this._request.post(this._url, { 'Content-Type': 'application/xml; charset=utf-8' }, xml).then(() => {\n\t\t\t\tconst index = this.shares.findIndex((e) => e.href === principalScheme)\n\t\t\t\tif (index === -1) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tthis.shares.splice(index, 1)\n\t\t\t})\n\t\t}\n\n\t\t/**\n\t\t * checks whether a collection is shareable\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisShareable() {\n\t\t\tif (!Array.isArray(this.allowedSharingModes)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn this.allowedSharingModes.includes(`{${NS.CALENDARSERVER}}can-be-shared`)\n\t\t}\n\n\t\t/**\n\t\t * checks whether a collection is publishable\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisPublishable() {\n\t\t\tif (!Array.isArray(this.allowedSharingModes)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn this.allowedSharingModes.includes(`{${NS.CALENDARSERVER}}can-be-published`)\n\t\t}\n\n\t\t/**\n\t\t * @inheritDoc\n\t\t */\n\t\tstatic getPropFindList() {\n\t\t\treturn super.getPropFindList().concat([\n\t\t\t\t[NS.OWNCLOUD, 'invite'],\n\t\t\t\t[NS.CALENDARSERVER, 'allowed-sharing-modes'],\n\t\t\t])\n\t\t}\n\n\t}\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { DavObject } from './davObject.js'\nimport * as NS from '../utility/namespaceUtility.js'\n\n/**\n * @class\n */\nexport class VObject extends DavObject {\n\n\t/**\n\t * Creates a VObject that is supposed to store calendar-data\n\t * as specified in RFC 5545.\n\t *\n\t * https://tools.ietf.org/html/rfc5545\n\t *\n\t * @inheritDoc\n\t */\n\tconstructor(...args) {\n\t\tsuper(...args)\n\n\t\tsuper._exposeProperty('data', NS.IETF_CALDAV, 'calendar-data', true)\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic getPropFindList() {\n\t\treturn super.getPropFindList().concat([\n\t\t\t[NS.IETF_CALDAV, 'calendar-data'],\n\t\t])\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport * as NS from '../utility/namespaceUtility.js'\n\n/**\n *\n * This function is capable of creating the propset xml structure for:\n * - {http://apple.com/ns/ical/}calendar-order\n * - {http://apple.com/ns/ical/}calendar-color\n * - {http://calendarserver.org/ns/}source\n * - {urn:ietf:params:xml:ns:caldav}calendar-description\n * - {urn:ietf:params:xml:ns:caldav}calendar-timezone\n * - {http://owncloud.org/ns}calendar-enabled\n * - {http://nextcloud.com/ns}default-alarm\n *\n * @param {object} props\n * @return {object}\n */\nexport default function calendarPropSet(props) {\n\tconst xmlified = []\n\n\tObject.entries(props).forEach(([key, value]) => {\n\t\tswitch (key) {\n\t\tcase '{http://apple.com/ns/ical/}calendar-order':\n\t\t\txmlified.push({\n\t\t\t\tname: [NS.APPLE, 'calendar-order'],\n\t\t\t\tvalue: value.toString(),\n\t\t\t})\n\t\t\tbreak\n\n\t\tcase '{http://apple.com/ns/ical/}calendar-color':\n\t\t\txmlified.push({\n\t\t\t\tname: [NS.APPLE, 'calendar-color'],\n\t\t\t\tvalue,\n\t\t\t})\n\t\t\tbreak\n\n\t\tcase '{http://calendarserver.org/ns/}source':\n\t\t\txmlified.push({\n\t\t\t\tname: [NS.CALENDARSERVER, 'source'],\n\t\t\t\tchildren: [{\n\t\t\t\t\tname: [NS.DAV, 'href'],\n\t\t\t\t\tvalue,\n\t\t\t\t}],\n\t\t\t})\n\t\t\tbreak\n\n\t\tcase '{urn:ietf:params:xml:ns:caldav}calendar-description':\n\t\t\txmlified.push({\n\t\t\t\tname: [NS.IETF_CALDAV, 'calendar-description'],\n\t\t\t\tvalue,\n\t\t\t})\n\t\t\tbreak\n\n\t\tcase '{urn:ietf:params:xml:ns:caldav}calendar-timezone':\n\t\t\txmlified.push({\n\t\t\t\tname: [NS.IETF_CALDAV, 'calendar-timezone'],\n\t\t\t\tvalue,\n\t\t\t})\n\t\t\tbreak\n\n\t\tcase '{http://owncloud.org/ns}calendar-enabled':\n\t\t\txmlified.push({\n\t\t\t\tname: [NS.OWNCLOUD, 'calendar-enabled'],\n\t\t\t\tvalue: value ? '1' : '0',\n\t\t\t})\n\t\t\tbreak\n\t\tcase '{http://nextcloud.com/ns}default-alarm':\n\t\t\txmlified.push({\n\t\t\t\tname: [NS.NEXTCLOUD, 'default-alarm'],\n\t\t\t\tvalue,\n\t\t\t})\n\t\t\tbreak\n\t\tcase '{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp':\n\t\t\txmlified.push({\n\t\t\t\tname: [NS.IETF_CALDAV, 'schedule-calendar-transp'],\n\t\t\t\tchildren: [{\n\t\t\t\t\tname: [NS.IETF_CALDAV, value],\n\t\t\t\t}],\n\t\t\t})\n\t\t\tbreak\n\t\tdefault:\n\t\t\tbreak\n\t\t}\n\t})\n\n\treturn xmlified\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { DavCollection } from './davCollection.js'\nimport { davCollectionPublishable } from './davCollectionPublishable.js'\nimport { davCollectionShareable } from './davCollectionShareable.js'\nimport { VObject } from './vobject.js'\nimport calendarPropSet from '../propset/calendarPropSet.js'\nimport * as NS from '../utility/namespaceUtility.js'\nimport * as StringUtility from '../utility/stringUtility.js'\nimport * as XMLUtility from '../utility/xmlUtility.js'\n\nimport { debugFactory } from '../debug.js'\nconst debug = debugFactory('Calendar')\n\n/**\n * This class represents an calendar collection as specified in\n * https://tools.ietf.org/html/rfc4791#section-4.2\n *\n * On top of all the properties provided by davCollectionShareable,\n * davCollectionPublishable and DavCollection,\n * It allows you access to the following list of properties:\n * - color\n * - enabled\n * - order\n * - timezone\n * - defaultAlarm\n * - components\n *\n * The first five allowing read-write access\n *\n * @augments DavCollection\n */\nexport class Calendar extends davCollectionPublishable(davCollectionShareable(DavCollection)) {\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor(...args) {\n\t\tsuper(...args)\n\n\t\tsuper._registerObjectFactory('text/calendar', VObject)\n\t\tsuper._registerPropSetFactory(calendarPropSet)\n\n\t\tsuper._exposeProperty('color', NS.APPLE, 'calendar-color', true)\n\t\tsuper._exposeProperty('enabled', NS.OWNCLOUD, 'calendar-enabled', true)\n\t\tsuper._exposeProperty('order', NS.APPLE, 'calendar-order', true)\n\t\tsuper._exposeProperty('timezone', NS.IETF_CALDAV, 'calendar-timezone', true)\n\t\tsuper._exposeProperty('components', NS.IETF_CALDAV, 'supported-calendar-component-set')\n\t\tsuper._exposeProperty('transparency', NS.IETF_CALDAV, 'schedule-calendar-transp', true)\n\t\tsuper._exposeProperty('defaultAlarm', NS.NEXTCLOUD, 'default-alarm', true)\n\t}\n\n\t/**\n\t * finds all VObjects in this calendar\n\t *\n\t * @return {Promise<VObject[]>}\n\t */\n\tasync findAllVObjects() {\n\t\treturn super.findAllByFilter((elm) => elm instanceof VObject)\n\t}\n\n\t/**\n\t * find all VObjects filtered by type\n\t *\n\t * @param {string} type\n\t * @return {Promise<VObject[]>}\n\t */\n\tasync findByType(type) {\n\t\treturn this.calendarQuery([{\n\t\t\tname: [NS.IETF_CALDAV, 'comp-filter'],\n\t\t\tattributes: [\n\t\t\t\t['name', 'VCALENDAR'],\n\t\t\t],\n\t\t\tchildren: [{\n\t\t\t\tname: [NS.IETF_CALDAV, 'comp-filter'],\n\t\t\t\tattributes: [\n\t\t\t\t\t['name', type],\n\t\t\t\t],\n\t\t\t}],\n\t\t}])\n\t}\n\n\t/**\n\t * find all VObjects in a time-range filtered by type\n\t *\n\t * @param {number} type\n\t * @param {Date} from\n\t * @param {Date} to\n\t * @return {Promise<VObject[]>}\n\t */\n\tasync findByTypeInTimeRange(type, from, to) {\n\t\treturn this.calendarQuery([{\n\t\t\tname: [NS.IETF_CALDAV, 'comp-filter'],\n\t\t\tattributes: [\n\t\t\t\t['name', 'VCALENDAR'],\n\t\t\t],\n\t\t\tchildren: [{\n\t\t\t\tname: [NS.IETF_CALDAV, 'comp-filter'],\n\t\t\t\tattributes: [\n\t\t\t\t\t['name', type],\n\t\t\t\t],\n\t\t\t\tchildren: [{\n\t\t\t\t\tname: [NS.IETF_CALDAV, 'time-range'],\n\t\t\t\t\tattributes: [\n\t\t\t\t\t\t['start', Calendar._getICalendarDateTimeFromDateObject(from)],\n\t\t\t\t\t\t['end', Calendar._getICalendarDateTimeFromDateObject(to)],\n\t\t\t\t\t],\n\t\t\t\t}],\n\t\t\t}],\n\t\t}])\n\t}\n\n\t/**\n\t * create a VObject inside this calendar\n\t *\n\t * @param data\n\t * @return {Promise<VObject>}\n\t */\n\tasync createVObject(data) {\n\t\tconst name = StringUtility.uid('', 'ics')\n\t\tconst headers = {\n\t\t\t'Content-Type': 'text/calendar; charset=utf-8',\n\t\t}\n\n\t\treturn super.createObject(name, headers, data)\n\t}\n\n\t/**\n\t * sends a calendar query as defined in\n\t * https://tools.ietf.org/html/rfc4791#section-7.8\n\t *\n\t * @param {object[]} filter\n\t * @param {object[]} prop\n\t * @param {string} timezone\n\t * @return {Promise<VObject[]>}\n\t */\n\tasync calendarQuery(filter, prop = null, timezone = null) {\n\t\tdebug('sending an calendar-query request')\n\n\t\tconst [skeleton] = XMLUtility.getRootSkeleton(\n\t\t\t[NS.IETF_CALDAV, 'calendar-query'],\n\t\t)\n\n\t\tif (!prop) {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.DAV, 'prop'],\n\t\t\t\tchildren: this._propFindList.map((p) => ({ name: p })),\n\t\t\t})\n\t\t} else {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.DAV, 'prop'],\n\t\t\t\tchildren: prop,\n\t\t\t})\n\t\t}\n\n\t\t// According to the spec, every calendar-query needs a filter,\n\t\t// but Nextcloud just returns all elements without a filter.\n\t\tif (filter) {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.IETF_CALDAV, 'filter'],\n\t\t\t\tchildren: filter,\n\t\t\t})\n\t\t}\n\n\t\tif (timezone) {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.IETF_CALDAV, 'timezone'],\n\t\t\t\tvalue: timezone,\n\t\t\t})\n\t\t}\n\n\t\tconst headers = {\n\t\t\tDepth: '1',\n\t\t}\n\n\t\tconst body = XMLUtility.serialize(skeleton)\n\t\tconst response = await this._request.report(this.url, headers, body)\n\t\treturn super._handleMultiStatusResponse(response, Calendar._isRetrievalPartial(prop))\n\t}\n\n\t/**\n\t * sends a calendar multiget query as defined in\n\t * https://tools.ietf.org/html/rfc4791#section-7.9\n\t *\n\t * @param {string[]} hrefs\n\t * @param {object[]} prop\n\t * @return {Promise<VObject[]>}\n\t */\n\tasync calendarMultiget(hrefs = [], prop) {\n\t\tdebug('sending an calendar-multiget request')\n\n\t\tif (hrefs.length === 0) {\n\t\t\treturn []\n\t\t}\n\n\t\tconst [skeleton] = XMLUtility.getRootSkeleton(\n\t\t\t[NS.IETF_CALDAV, 'calendar-multiget'],\n\t\t)\n\n\t\tif (!prop) {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.DAV, 'prop'],\n\t\t\t\tchildren: this._propFindList.map((p) => ({ name: p })),\n\t\t\t})\n\t\t} else {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.DAV, 'prop'],\n\t\t\t\tchildren: prop,\n\t\t\t})\n\t\t}\n\n\t\threfs.forEach((href) => {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.DAV, 'href'],\n\t\t\t\tvalue: href,\n\t\t\t})\n\t\t})\n\n\t\tconst headers = {\n\t\t\tDepth: '1',\n\t\t}\n\t\tconst body = XMLUtility.serialize(skeleton)\n\t\tconst response = await this._request.report(this.url, headers, body)\n\t\treturn super._handleMultiStatusResponse(response, Calendar._isRetrievalPartial(prop))\n\t}\n\n\t/**\n\t * sends a calendar free-busy-query as defined in\n\t * https://tools.ietf.org/html/rfc4791#section-7.10\n\t *\n\t * @param {Date} from\n\t * @param {Date} to\n\t * @return {Promise<string>}\n\t */\n\tasync freeBusyQuery(from, to) {\n\t\t/* eslint-disable no-tabs */\n\t\t// debug('sending a free-busy-query request');\n\t\t//\n\t\t// const [skeleton] = XMLUtility.getRootSkeleton(\n\t\t// \t[NS.IETF_CALDAV, 'free-busy-query'],\n\t\t// \t[NS.IETF_CALDAV, 'time-range']\n\t\t// );\n\t\t//\n\t\t// skeleton[0][0].attributes.push(['start', Calendar._getICalendarDateTimeFromDateObject(from)]);\n\t\t// skeleton[0][0].attributes.push(['end', Calendar._getICalendarDateTimeFromDateObject(to)]);\n\t\t//\n\t\t// const headers = {\n\t\t// \t'Depth': '1'\n\t\t// };\n\t\t// const body = XMLUtility.serialize(skeleton);\n\t\t// const response = await this._request.report(this.url, headers, body);\n\t\t/* eslint-enable no-tabs */\n\n\t\t// TODO - finish implementation\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic getPropFindList() {\n\t\treturn super.getPropFindList().concat([\n\t\t\t[NS.APPLE, 'calendar-order'],\n\t\t\t[NS.APPLE, 'calendar-color'],\n\t\t\t[NS.CALENDARSERVER, 'getctag'],\n\t\t\t[NS.IETF_CALDAV, 'calendar-description'],\n\t\t\t[NS.IETF_CALDAV, 'calendar-timezone'],\n\t\t\t[NS.IETF_CALDAV, 'supported-calendar-component-set'],\n\t\t\t[NS.IETF_CALDAV, 'supported-calendar-data'],\n\t\t\t[NS.IETF_CALDAV, 'max-resource-size'],\n\t\t\t[NS.IETF_CALDAV, 'min-date-time'],\n\t\t\t[NS.IETF_CALDAV, 'max-date-time'],\n\t\t\t[NS.IETF_CALDAV, 'max-instances'],\n\t\t\t[NS.IETF_CALDAV, 'max-attendees-per-instance'],\n\t\t\t[NS.IETF_CALDAV, 'supported-collation-set'],\n\t\t\t[NS.IETF_CALDAV, 'calendar-free-busy-set'],\n\t\t\t[NS.IETF_CALDAV, 'schedule-calendar-transp'],\n\t\t\t[NS.IETF_CALDAV, 'schedule-default-calendar-URL'],\n\t\t\t[NS.OWNCLOUD, 'calendar-enabled'],\n\t\t\t[NS.NEXTCLOUD, 'default-alarm'],\n\t\t\t[NS.NEXTCLOUD, 'owner-displayname'],\n\t\t\t[NS.NEXTCLOUD, 'trash-bin-retention-duration'],\n\t\t\t[NS.NEXTCLOUD, 'deleted-at'],\n\t\t])\n\t}\n\n\t/**\n\t * checks if the prop part of a report requested partial data\n\t *\n\t * @param {object[]} prop\n\t * @return {boolean}\n\t * @private\n\t */\n\tstatic _isRetrievalPartial(prop) {\n\t\tif (!prop) {\n\t\t\treturn false\n\t\t}\n\n\t\tconst addressBookDataProperty = prop.find((p) => {\n\t\t\treturn p.name[0] === NS.IETF_CALDAV && p.name[1] === 'calendar-data'\n\t\t})\n\n\t\tif (!addressBookDataProperty) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn !!addressBookDataProperty.children\n\t}\n\n\t/**\n\t * creates an iCalendar formatted DATE-TIME string from a date object\n\t *\n\t * @param {Date} date\n\t * @return {string}\n\t * @private\n\t */\n\tstatic _getICalendarDateTimeFromDateObject(date) {\n\t\treturn [\n\t\t\tdate.getUTCFullYear(),\n\t\t\t('0' + (date.getUTCMonth() + 1)).slice(-2),\n\t\t\t('0' + date.getUTCDate()).slice(-2),\n\t\t\t'T',\n\t\t\t('0' + date.getUTCHours()).slice(-2),\n\t\t\t('0' + date.getUTCMinutes()).slice(-2),\n\t\t\t('0' + date.getUTCSeconds()).slice(-2),\n\t\t\t'Z',\n\t\t].join('')\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { Calendar } from './calendar.js'\nimport * as NS from '../utility/namespaceUtility.js'\n\n/**\n * This class represents a subscription collection\n * It is being cached on the Nextcloud server and allows to be queried by standard CalDAV requests.\n *\n * On top of that it contains more non-standard apple properties\n */\nexport class Subscription extends Calendar {\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor(...args) {\n\t\tsuper(...args)\n\n\t\tsuper._exposeProperty('source', NS.CALENDARSERVER, 'source', true)\n\t\tsuper._exposeProperty('refreshRate', NS.APPLE, 'refreshrate', true)\n\t\tsuper._exposeProperty('stripTodos', NS.CALENDARSERVER, 'subscribed-strip-todos', true)\n\t\tsuper._exposeProperty('stripAlarms', NS.CALENDARSERVER, 'subscribed-strip-alarms', true)\n\t\tsuper._exposeProperty('stripAttachments', NS.CALENDARSERVER, 'subscribed-strip-attachments', true)\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic getPropFindList() {\n\t\treturn super.getPropFindList().concat([\n\t\t\t[NS.CALENDARSERVER, 'source'],\n\t\t\t[NS.APPLE, 'refreshrate'],\n\t\t\t[NS.CALENDARSERVER, 'subscribed-strip-todos'],\n\t\t\t[NS.CALENDARSERVER, 'subscribed-strip-alarms'],\n\t\t\t[NS.CALENDARSERVER, 'subscribed-strip-attachments'],\n\t\t])\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport * as NS from '../utility/namespaceUtility.js'\n\n/**\n * This function is capable of creating the propset xml structure for:\n * - {urn:ietf:params:xml:ns:caldav}calendar-availability\n *\n * @param {object} props\n * @return {object}\n */\nexport default function calendarPropSet(props) {\n\tconst xmlified = []\n\n\tObject.entries(props).forEach(([key, value]) => {\n\t\tswitch (key) {\n\t\tcase '{urn:ietf:params:xml:ns:caldav}calendar-availability':\n\t\t\txmlified.push({\n\t\t\t\tname: [NS.IETF_CALDAV, 'calendar-availability'],\n\t\t\t\tvalue: value.toString(),\n\t\t\t})\n\t\t\tbreak\n\t\t}\n\t})\n\n\treturn xmlified\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { Calendar } from './calendar.js'\nimport * as NS from '../utility/namespaceUtility.js'\nimport scheduleInboxPropSet from '../propset/scheduleInboxPropSet.js'\n\nexport default class ScheduleInbox extends Calendar {\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor(...args) {\n\t\tsuper(...args)\n\n\t\tsuper._registerPropSetFactory(scheduleInboxPropSet)\n\n\t\t// https://tools.ietf.org/html/rfc7953#section-7.2.4\n\t\tsuper._exposeProperty('availability', NS.IETF_CALDAV, 'calendar-availability', true)\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic getPropFindList() {\n\t\treturn super.getPropFindList().concat([\n\t\t\t[NS.IETF_CALDAV, 'calendar-availability'],\n\t\t])\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { DavCollection } from './davCollection.js'\nimport * as NS from '../utility/namespaceUtility.js'\n\nexport default class ScheduleOutbox extends DavCollection {\n\n\t/**\n\t * Sends a free-busy-request for the scheduling outbox\n\t * The data is required to be a valid iTIP data.\n\t * For an example, see https://tools.ietf.org/html/rfc6638#appendix-B.5\n\t *\n\t * @param {string} data iTIP with VFREEBUSY component and METHOD:REQUEST\n\t * @return {Promise<string[]>}\n\t */\n\tasync freeBusyRequest(data) {\n\t\tconst result = {}\n\t\tconst response = await this._request.post(this.url, {\n\t\t\t'Content-Type': 'text/calendar; charset=\"utf-8\"',\n\t\t}, data)\n\n\t\tconst domParser = new DOMParser()\n\t\tconst document = domParser.parseFromString(response.body, 'application/xml')\n\n\t\tconst responses = document.evaluate('/cl:schedule-response/cl:response', document, NS.resolve, XPathResult.ANY_TYPE, null)\n\t\tlet responseNode\n\n\t\twhile ((responseNode = responses.iterateNext()) !== null) {\n\t\t\tconst recipient = document.evaluate('string(cl:recipient/d:href)', responseNode, NS.resolve, XPathResult.ANY_TYPE, null).stringValue\n\t\t\tconst status = document.evaluate('string(cl:request-status)', responseNode, NS.resolve, XPathResult.ANY_TYPE, null).stringValue\n\t\t\tconst calendarData = document.evaluate('string(cl:calendar-data)', responseNode, NS.resolve, XPathResult.ANY_TYPE, null).stringValue\n\t\t\tconst success = /^2.\\d(;.+)?$/.test(status)\n\n\t\t\tresult[recipient] = {\n\t\t\t\tcalendarData,\n\t\t\t\tstatus,\n\t\t\t\tsuccess,\n\t\t\t}\n\t\t}\n\n\t\treturn result\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { DavCollection } from './davCollection.js'\nimport * as NS from '../utility/namespaceUtility.js'\nimport { VObject } from './vobject.js'\nimport * as XMLUtility from '../utility/xmlUtility.js'\n\nexport class CalendarTrashBin extends DavCollection {\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor(...args) {\n\t\tsuper(...args)\n\n\t\tsuper._registerObjectFactory('text/calendar', VObject)\n\n\t\tsuper._exposeProperty('retentionDuration', NS.NEXTCLOUD, 'trash-bin-retention-duration')\n\t}\n\n\tasync findDeletedObjects() {\n\t\tconst [skeleton] = XMLUtility.getRootSkeleton(\n\t\t\t[NS.IETF_CALDAV, 'calendar-query'],\n\t\t)\n\t\tskeleton.children.push({\n\t\t\tname: [NS.DAV, 'prop'],\n\t\t\tchildren: VObject.getPropFindList()\n\t\t\t\t.map((p) => ({ name: p }))\n\t\t\t\t.concat([\n\t\t\t\t\t{ name: [NS.NEXTCLOUD, 'calendar-uri'] },\n\t\t\t\t\t{ name: [NS.NEXTCLOUD, 'deleted-at'] },\n\t\t\t\t]),\n\t\t})\n\t\tskeleton.children.push({\n\t\t\tname: [NS.IETF_CALDAV, 'filter'],\n\t\t\tchildren: [{\n\t\t\t\tname: [NS.IETF_CALDAV, 'comp-filter'],\n\t\t\t\tattributes: [\n\t\t\t\t\t['name', 'VCALENDAR'],\n\t\t\t\t],\n\t\t\t\tchildren: [{\n\t\t\t\t\tname: [NS.IETF_CALDAV, 'comp-filter'],\n\t\t\t\t\tattributes: [\n\t\t\t\t\t\t['name', 'VEVENT'],\n\t\t\t\t\t],\n\t\t\t\t\tchildren: [],\n\t\t\t\t}],\n\t\t\t}],\n\t\t})\n\t\tconst headers = {\n\t\t\tDepth: '1',\n\t\t}\n\t\tconst body = XMLUtility.serialize(skeleton)\n\t\tconst response = await this._request.report(this._url + 'objects', headers, body)\n\t\treturn super._handleMultiStatusResponse(response)\n\t}\n\n\tasync restore(uri) {\n\t\tawait this._request.move(uri, this._url + 'restore/file')\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { Calendar } from './calendar.js'\n\n/**\n * This class represents a deleted calendar collection.\n *\n * @augments Calendar\n */\nexport class DeletedCalendar extends Calendar {\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { DavCollection } from './davCollection.js'\nimport { Calendar } from './calendar.js'\nimport { Subscription } from './subscription.js'\nimport ScheduleInbox from './scheduleInbox.js'\nimport ScheduleOutbox from './scheduleOutbox.js'\nimport * as NS from '../utility/namespaceUtility.js'\nimport * as XMLUtility from '../utility/xmlUtility.js'\n\nimport { debugFactory } from '../debug.js'\nimport { CalendarTrashBin } from './calendarTrashBin.js'\nimport { DeletedCalendar } from './deletedCalendar.js'\nconst debug = debugFactory('CalendarHome')\n\n/**\n * This class represents a calendar home as specified in\n * https://tools.ietf.org/html/rfc4791#section-6.2.1\n *\n * As of this versions' release, the Nextcloud server will always\n * return only one calendar home. Despite that, RFC4791 allows\n * a server to return multiple calendar homes though.\n */\nexport class CalendarHome extends DavCollection {\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor(...args) {\n\t\tsuper(...args)\n\n\t\tsuper._registerCollectionFactory('{' + NS.IETF_CALDAV + '}calendar', Calendar)\n\t\tsuper._registerCollectionFactory('{' + NS.NEXTCLOUD + '}deleted-calendar', DeletedCalendar)\n\t\tsuper._registerCollectionFactory('{' + NS.CALENDARSERVER + '}subscribed', Subscription)\n\t\tsuper._registerCollectionFactory('{' + NS.IETF_CALDAV + '}schedule-inbox', ScheduleInbox)\n\t\tsuper._registerCollectionFactory('{' + NS.IETF_CALDAV + '}schedule-outbox', ScheduleOutbox)\n\t\tsuper._registerCollectionFactory('{' + NS.NEXTCLOUD + '}trash-bin', CalendarTrashBin)\n\t}\n\n\t/**\n\t * Finds all CalDAV-specific collections in this calendar home\n\t *\n\t * @return {Promise<(Calendar|Subscription|ScheduleInbox|ScheduleOutbox|CalendarTrashBin|DeletedCalendar)[]>}\n\t */\n\tasync findAllCalDAVCollections() {\n\t\treturn super.findAllByFilter((elm) => elm instanceof Calendar || elm instanceof CalendarTrashBin\n\t\t\t|| elm instanceof Subscription || elm instanceof ScheduleInbox || elm instanceof ScheduleOutbox\n\t\t\t|| elm instanceof DeletedCalendar)\n\t}\n\n\t/**\n\t * Finds all CalDAV-specific collections in this calendar home, grouped by type\n\t *\n\t * @return {Promise<{\n\t\t\tcalendars: Calendar[],\n\t\t\tdeletedCalendars: DeletedCalendar[],\n\t\t\ttrashBins: CalendarTrashBin[],\n\t\t\tsubscriptions: Subscription[],\n\t\t\tscheduleInboxes: ScheduleInbox[],\n\t\t\tscheduleOutboxes: ScheduleOutbox[],\n\t\t}>}\n\t */\n\tasync findAllCalDAVCollectionsGrouped() {\n\t\tconst collections = await super.findAll()\n\n\t\treturn {\n\t\t\tcalendars: collections.filter(c => c instanceof Calendar && !(c instanceof ScheduleInbox) && !(c instanceof Subscription) && !(c instanceof DeletedCalendar)),\n\t\t\tdeletedCalendars: collections.filter(c => c instanceof DeletedCalendar),\n\t\t\ttrashBins: collections.filter(c => c instanceof CalendarTrashBin),\n\t\t\tsubscriptions: collections.filter(c => c instanceof Subscription),\n\t\t\tscheduleInboxes: collections.filter(c => c instanceof ScheduleInbox),\n\t\t\tscheduleOutboxes: collections.filter(c => c instanceof ScheduleOutbox),\n\t\t}\n\t}\n\n\t/**\n\t * finds all calendars in this calendar home\n\t *\n\t * @return {Promise<Calendar[]>}\n\t */\n\tasync findAllCalendars() {\n\t\treturn super.findAllByFilter((elm) => elm instanceof Calendar && !(elm instanceof ScheduleInbox) && !(elm instanceof Subscription) && !(elm instanceof DeletedCalendar))\n\t}\n\n\t/**\n\t * Finds all deleted calendars in this calendar home\n\t *\n\t * @return {Promise<DeletedCalendar[]>}\n\t */\n\tasync findAllDeletedCalendars() {\n\t\treturn super.findAllByFilter((elm) => elm instanceof DeletedCalendar)\n\t}\n\n\t/**\n\t * finds all subscriptions in this calendar home\n\t *\n\t * @return {Promise<Subscription[]>}\n\t */\n\tasync findAllSubscriptions() {\n\t\treturn super.findAllByFilter((elm) => elm instanceof Subscription)\n\t}\n\n\t/**\n\t * finds all schedule inboxes in this calendar home\n\t *\n\t * @return {Promise<ScheduleInbox[]>}\n\t */\n\tasync findAllScheduleInboxes() {\n\t\treturn super.findAllByFilter((elm) => elm instanceof ScheduleInbox)\n\t}\n\n\t/**\n\t * finds all schedule outboxes in this calendar home\n\t *\n\t * @return {Promise<ScheduleOutbox[]>}\n\t */\n\tasync findAllScheduleOutboxes() {\n\t\treturn super.findAllByFilter((elm) => elm instanceof ScheduleOutbox)\n\t}\n\n\t/**\n\t * creates a new calendar collection\n\t *\n\t * @param {string} displayname\n\t * @param {string} color\n\t * @param {string[]} supportedComponentSet\n\t * @param {number} order\n\t * @param {string=} timezone\n\t * @return {Promise<Calendar>}\n\t */\n\tasync createCalendarCollection(displayname, color, supportedComponentSet = null, order = null, timezone = null) {\n\t\tdebug('creating a calendar collection')\n\n\t\tconst props = [{\n\t\t\tname: [NS.DAV, 'resourcetype'],\n\t\t\tchildren: [{\n\t\t\t\tname: [NS.DAV, 'collection'],\n\t\t\t}, {\n\t\t\t\tname: [NS.IETF_CALDAV, 'calendar'],\n\t\t\t}],\n\t\t}, {\n\t\t\tname: [NS.DAV, 'displayname'],\n\t\t\tvalue: displayname,\n\t\t}, {\n\t\t\tname: [NS.APPLE, 'calendar-color'],\n\t\t\tvalue: color,\n\t\t}, {\n\t\t\tname: [NS.OWNCLOUD, 'calendar-enabled'],\n\t\t\tvalue: '1',\n\t\t}]\n\n\t\tif (timezone) {\n\t\t\tprops.push({\n\t\t\t\tname: [NS.IETF_CALDAV, 'calendar-timezone'],\n\t\t\t\tvalue: timezone,\n\t\t\t})\n\t\t}\n\n\t\tif (supportedComponentSet) {\n\t\t\tprops.push({\n\t\t\t\tname: [NS.IETF_CALDAV, 'supported-calendar-component-set'],\n\t\t\t\tchildren: supportedComponentSet.map((supportedComponent) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: [NS.IETF_CALDAV, 'comp'],\n\t\t\t\t\t\tattributes: [\n\t\t\t\t\t\t\t['name', supportedComponent],\n\t\t\t\t\t\t],\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t})\n\t\t}\n\n\t\tif (order) {\n\t\t\tprops.push({\n\t\t\t\tname: [NS.APPLE, 'calendar-order'],\n\t\t\t\tvalue: order,\n\t\t\t})\n\t\t}\n\n\t\tconst name = super._getAvailableNameFromToken(displayname)\n\t\treturn super.createCollection(name, props)\n\t}\n\n\t/**\n\t * creates a new subscription\n\t *\n\t * @param {string} displayname\n\t * @param {string} color\n\t * @param {string} source\n\t * @param {number} order\n\t * @return {Promise<Subscription>}\n\t */\n\tasync createSubscribedCollection(displayname, color, source, order = null) {\n\t\tdebug('creating a subscribed collection')\n\n\t\tconst props = [{\n\t\t\tname: [NS.DAV, 'resourcetype'],\n\t\t\tchildren: [{\n\t\t\t\tname: [NS.DAV, 'collection'],\n\t\t\t}, {\n\t\t\t\tname: [NS.CALENDARSERVER, 'subscribed'],\n\t\t\t}],\n\t\t}, {\n\t\t\tname: [NS.DAV, 'displayname'],\n\t\t\tvalue: displayname,\n\t\t}, {\n\t\t\tname: [NS.APPLE, 'calendar-color'],\n\t\t\tvalue: color,\n\t\t}, {\n\t\t\tname: [NS.OWNCLOUD, 'calendar-enabled'],\n\t\t\tvalue: '1',\n\t\t}, {\n\t\t\tname: [NS.CALENDARSERVER, 'source'],\n\t\t\tchildren: [{\n\t\t\t\tname: [NS.DAV, 'href'],\n\t\t\t\tvalue: source,\n\t\t\t}],\n\t\t}]\n\n\t\tif (order) {\n\t\t\tprops.push({\n\t\t\t\tname: [NS.APPLE, 'calendar-order'],\n\t\t\t\tvalue: order,\n\t\t\t})\n\t\t}\n\n\t\tconst name = super._getAvailableNameFromToken(displayname)\n\t\treturn super.createCollection(name, props)\n\t}\n\n\t/**\n\t * Search all calendars the user has access to\n\t * This method makes use of Nextcloud's custom\n\t * calendar Search API\n\t *\n\t * Documentation about that API can be found at: ...\n\t *\n\t * @return {Promise<VObject[]>}\n\t */\n\tasync search() {\n\t\t// TODO - implement me\n\t}\n\n\t/**\n\t * enables the birthday calendar for the Calendar Home that belongs to this user\n\t *\n\t * @return {Promise<void>}\n\t */\n\tasync enableBirthdayCalendar() {\n\t\tconst [skeleton] = XMLUtility.getRootSkeleton(\n\t\t\t[NS.NEXTCLOUD, 'enable-birthday-calendar'],\n\t\t)\n\t\tconst xmlBody = XMLUtility.serialize(skeleton)\n\n\t\tawait this._request.post(this.url, {}, xmlBody)\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport * as NS from '../utility/namespaceUtility.js'\n\n/**\n *\n * This function is capable of creating the propset xml structure for:\n * - {urn:ietf:params:xml:ns:carddav}addressbook-description\n * - {http://owncloud.org/ns}enabled\n *\n * @param {object} props\n * @return {object}\n */\nexport default function addressBookPropSet(props) {\n\tconst xmlified = []\n\n\tObject.entries(props).forEach(([key, value]) => {\n\t\tswitch (key) {\n\t\tcase '{urn:ietf:params:xml:ns:carddav}addressbook-description':\n\t\t\txmlified.push({\n\t\t\t\tname: [NS.IETF_CARDDAV, 'addressbook-description'],\n\t\t\t\tvalue,\n\t\t\t})\n\t\t\tbreak\n\n\t\tcase '{http://owncloud.org/ns}enabled':\n\t\t\txmlified.push({\n\t\t\t\tname: [NS.OWNCLOUD, 'enabled'],\n\t\t\t\tvalue: value ? '1' : '0',\n\t\t\t})\n\t\t\tbreak\n\n\t\tdefault:\n\t\t\tbreak\n\t\t}\n\t})\n\n\treturn xmlified\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { DavObject } from './davObject.js'\nimport * as NS from '../utility/namespaceUtility.js'\n\n/**\n * @class\n */\nexport class VCard extends DavObject {\n\n\t/**\n\t * Creates a VCard that is supposed to store address-data\n\t * as specified in RFC 6350.\n\t *\n\t * https://tools.ietf.org/html/rfc6350\n\t *\n\t * @inheritDoc\n\t */\n\tconstructor(...args) {\n\t\tsuper(...args)\n\n\t\tsuper._exposeProperty('data', NS.IETF_CARDDAV, 'address-data', true)\n\t\tsuper._exposeProperty('hasphoto', NS.NEXTCLOUD, 'has-photo', false)\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic getPropFindList() {\n\t\treturn super.getPropFindList().concat([\n\t\t\t[NS.IETF_CARDDAV, 'address-data'],\n\t\t])\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { davCollectionShareable } from './davCollectionShareable.js'\nimport { DavCollection } from './davCollection.js'\nimport * as NS from '../utility/namespaceUtility.js'\nimport * as StringUtility from '../utility/stringUtility.js'\nimport * as XMLUtility from '../utility/xmlUtility.js'\nimport addressBookPropSet from '../propset/addressBookPropSet.js'\nimport { VCard } from './vcard.js'\n\nimport { debugFactory } from '../debug.js'\nconst debug = debugFactory('AddressBook')\n\n/**\n * This class represents an address book collection as specified in\n * https://tools.ietf.org/html/rfc6352#section-5.2\n *\n * On top of all the properties provided by davCollectionShareable and DavCollection,\n * It allows you access to the following list of properties:\n * - description\n * - enabled\n * - readOnly\n *\n * The first two allowing read-write access\n *\n * @augments DavCollection\n */\nexport class AddressBook extends davCollectionShareable(DavCollection) {\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor(...args) {\n\t\tsuper(...args)\n\n\t\tsuper._registerObjectFactory('text/vcard', VCard)\n\t\tsuper._registerPropSetFactory(addressBookPropSet)\n\n\t\tsuper._exposeProperty('description', NS.IETF_CARDDAV, 'addressbook-description', true)\n\t\tsuper._exposeProperty('enabled', NS.OWNCLOUD, 'enabled', true)\n\t\tsuper._exposeProperty('readOnly', NS.OWNCLOUD, 'read-only')\n\t}\n\n\t/**\n\t * finds all VCards in this address book\n\t *\n\t * @return {Promise<VCard[]>}\n\t */\n\tfindAllVCards() {\n\t\treturn super.findAllByFilter((elm) => elm instanceof VCard)\n\t}\n\n\t/**\n\t * finds all contacts in an address-book, but with filtered data.\n\t *\n\t * Example use:\n\t * findAllAndFilterBySimpleProperties(['EMAIL', 'UID', 'CATEGORIES', 'FN', 'TEL', 'NICKNAME', 'N'])\n\t *\n\t * @param {string[]} props\n\t * @return {Promise<VCard[]>}\n\t */\n\tasync findAllAndFilterBySimpleProperties(props) {\n\t\tconst children = []\n\t\tprops.forEach((prop) => {\n\t\t\tchildren.push({\n\t\t\t\tname: [NS.IETF_CARDDAV, 'prop'],\n\t\t\t\tattributes: [['name', prop]],\n\t\t\t})\n\t\t})\n\n\t\treturn this.addressbookQuery(null, [{\n\t\t\tname: [NS.DAV, 'getetag'],\n\t\t}, {\n\t\t\tname: [NS.DAV, 'getcontenttype'],\n\t\t}, {\n\t\t\tname: [NS.DAV, 'resourcetype'],\n\t\t}, {\n\t\t\tname: [NS.IETF_CARDDAV, 'address-data'],\n\t\t\tchildren,\n\t\t}, {\n\t\t\tname: [NS.NEXTCLOUD, 'has-photo'],\n\t\t}])\n\t}\n\n\t/**\n\t * creates a new VCard object in this address book\n\t *\n\t * @param {string} data\n\t * @return {Promise<VCard>}\n\t */\n\tasync createVCard(data) {\n\t\tdebug('creating VCard object')\n\n\t\tconst name = StringUtility.uid('', 'vcf')\n\t\tconst headers = {\n\t\t\t'Content-Type': 'text/vcard; charset=utf-8',\n\t\t}\n\n\t\treturn super.createObject(name, headers, data)\n\t}\n\n\t/**\n\t * sends an addressbook query as defined in\n\t * https://tools.ietf.org/html/rfc6352#section-8.6\n\t *\n\t * @param {object[]} filter\n\t * @param {object[]} prop\n\t * @param {number} limit\n\t * @param {string} test Either anyof or allof\n\t * @return {Promise<VCard[]>}\n\t */\n\tasync addressbookQuery(filter, prop = null, limit = null, test = 'anyof') {\n\t\tdebug('sending an addressbook-query request')\n\n\t\tconst [skeleton] = XMLUtility.getRootSkeleton(\n\t\t\t[NS.IETF_CARDDAV, 'addressbook-query'],\n\t\t)\n\n\t\tif (!prop) {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.DAV, 'prop'],\n\t\t\t\tchildren: this._propFindList.map((p) => ({ name: p })),\n\t\t\t})\n\t\t} else {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.DAV, 'prop'],\n\t\t\t\tchildren: prop,\n\t\t\t})\n\t\t}\n\n\t\t// According to the spec, every address-book query needs a filter,\n\t\t// but Nextcloud just returns all elements without a filter.\n\t\tif (filter) {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.IETF_CARDDAV, 'filter'],\n\t\t\t\tattributes: [\n\t\t\t\t\t['test', test],\n\t\t\t\t],\n\t\t\t\tchildren: filter,\n\t\t\t})\n\t\t}\n\n\t\tif (limit) {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.IETF_CARDDAV, 'limit'],\n\t\t\t\tchildren: [{\n\t\t\t\t\tname: [NS.IETF_CARDDAV, 'nresults'],\n\t\t\t\t\tvalue: limit,\n\t\t\t\t}],\n\t\t\t})\n\t\t}\n\n\t\tconst headers = {\n\t\t\tDepth: '1',\n\t\t}\n\t\tconst body = XMLUtility.serialize(skeleton)\n\t\tconst response = await this._request.report(this.url, headers, body)\n\t\treturn super._handleMultiStatusResponse(response, AddressBook._isRetrievalPartial(prop))\n\t}\n\n\t/**\n\t * sends an addressbook multiget query as defined in\n\t * https://tools.ietf.org/html/rfc6352#section-8.7\n\t *\n\t * @param {string[]} hrefs\n\t * @param {object[]} prop\n\t * @return {Promise<VCard[]>}\n\t */\n\tasync addressbookMultiget(hrefs = [], prop) {\n\t\tdebug('sending an addressbook-multiget request')\n\n\t\tif (hrefs.length === 0) {\n\t\t\treturn []\n\t\t}\n\n\t\tconst headers = {\n\t\t\tDepth: '1',\n\t\t}\n\t\tconst body = this._buildMultiGetBody(hrefs, prop)\n\t\tconst response = await this._request.report(this.url, headers, body)\n\t\treturn super._handleMultiStatusResponse(response, AddressBook._isRetrievalPartial(prop))\n\t}\n\n\t/**\n\t * sends an addressbook multiget query as defined in\n\t * https://tools.ietf.org/html/rfc6352#section-8.7\n\t * and requests a download of the result\n\t *\n\t * @param {string[]} hrefs\n\t * @param {object[]} prop\n\t * @return {Promise<{body: string|object, status: number, headers: object}>}\n\t */\n\tasync addressbookMultigetExport(hrefs = [], prop) {\n\t\tdebug('sending an addressbook-multiget request and request download')\n\n\t\tif (hrefs.length === 0) {\n\t\t\treturn ''\n\t\t}\n\n\t\tconst headers = {\n\t\t\tDepth: '1',\n\t\t}\n\t\tconst body = this._buildMultiGetBody(hrefs, prop)\n\t\treturn this._request.report(this.url + '?export', headers, body)\n\t}\n\n\t/**\n\t *\n\t * @param {string[]} hrefs\n\t * @param {object[]} prop\n\t * @return String\n\t * @private\n\t */\n\t_buildMultiGetBody(hrefs, prop) {\n\t\tconst [skeleton] = XMLUtility.getRootSkeleton(\n\t\t\t[NS.IETF_CARDDAV, 'addressbook-multiget'],\n\t\t)\n\n\t\tif (!prop) {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.DAV, 'prop'],\n\t\t\t\tchildren: this._propFindList.map((p) => ({ name: p })),\n\t\t\t})\n\t\t} else {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.DAV, 'prop'],\n\t\t\t\tchildren: prop,\n\t\t\t})\n\t\t}\n\n\t\threfs.forEach((href) => {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.DAV, 'href'],\n\t\t\t\tvalue: href,\n\t\t\t})\n\t\t})\n\n\t\treturn XMLUtility.serialize(skeleton)\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic getPropFindList() {\n\t\treturn super.getPropFindList().concat([\n\t\t\t[NS.IETF_CARDDAV, 'addressbook-description'],\n\t\t\t[NS.IETF_CARDDAV, 'supported-address-data'],\n\t\t\t[NS.IETF_CARDDAV, 'max-resource-size'],\n\t\t\t[NS.CALENDARSERVER, 'getctag'],\n\t\t\t[NS.OWNCLOUD, 'enabled'],\n\t\t\t[NS.OWNCLOUD, 'read-only'],\n\t\t])\n\t}\n\n\t/**\n\t * checks if the prop part of a report requested partial data\n\t *\n\t * @param {object[]} prop\n\t * @return {boolean}\n\t * @private\n\t */\n\tstatic _isRetrievalPartial(prop) {\n\t\tif (!prop) {\n\t\t\treturn false\n\t\t}\n\n\t\tconst addressBookDataProperty = prop.find((p) => {\n\t\t\treturn p.name[0] === NS.IETF_CARDDAV && p.name[1] === 'address-data'\n\t\t})\n\n\t\tif (!addressBookDataProperty) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn !!addressBookDataProperty.children\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { DavCollection } from './davCollection.js'\nimport * as NS from '../utility/namespaceUtility.js'\nimport { AddressBook } from './addressBook.js'\n\nimport { debugFactory } from '../debug.js'\nconst debug = debugFactory('AddressBookHome')\n\n/**\n * This class represents an address book home as specified in\n * https://tools.ietf.org/html/rfc6352#section-7.1.1\n *\n * As of this versions' release, the Nextcloud server will always\n * return only one address book home. Despite that, RFC6352 allows\n * a server to return multiple address book homes though.\n */\nexport class AddressBookHome extends DavCollection {\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor(...args) {\n\t\tsuper(...args)\n\n\t\tsuper._registerCollectionFactory('{' + NS.IETF_CARDDAV + '}addressbook', AddressBook)\n\t}\n\n\t/**\n\t * finds all address books in this address book home\n\t *\n\t * @return {Promise<AddressBook[]>}\n\t */\n\tasync findAllAddressBooks() {\n\t\treturn super.findAllByFilter((elm) => elm instanceof AddressBook)\n\t}\n\n\t/**\n\t * creates a new address book collection\n\t *\n\t * @param {string} displayname\n\t * @return {Promise<AddressBook>}\n\t */\n\tasync createAddressBookCollection(displayname) {\n\t\tdebug('creating an addressbook collection')\n\n\t\tconst props = [{\n\t\t\tname: [NS.DAV, 'resourcetype'],\n\t\t\tchildren: [{\n\t\t\t\tname: [NS.DAV, 'collection'],\n\t\t\t}, {\n\t\t\t\tname: [NS.IETF_CARDDAV, 'addressbook'],\n\t\t\t}],\n\t\t}, {\n\t\t\tname: [NS.DAV, 'displayname'],\n\t\t\tvalue: displayname,\n\t\t}]\n\n\t\tconst name = super._getAvailableNameFromToken(displayname)\n\t\treturn super.createCollection(name, props)\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport * as NS from '../utility/namespaceUtility.js'\n\n/**\n * This function is capable of creating the propset xml structure for:\n * - '{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL':\n *\n * @param {object} props\n * @return {object}\n */\nexport default function prinicipalPropSet(props) {\n\tconst xmlified = []\n\n\tObject.entries(props).forEach(([key, value]) => {\n\t\tswitch (key) {\n\t\tcase '{urn:ietf:params:xml:ns:caldav}schedule-default-calendar-URL':\n\t\t\txmlified.push({\n\t\t\t\tname: [NS.IETF_CALDAV, 'schedule-default-calendar-URL'],\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: ['DAV:', 'href'],\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t})\n\t\t\tbreak\n\t\t}\n\t})\n\n\treturn xmlified\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { DavObject } from './davObject.js'\nimport * as NS from '../utility/namespaceUtility.js'\nimport * as XMLUtility from '../utility/xmlUtility.js'\n\nimport prinicipalPropSet from '../propset/principalPropSet.js'\n\n/**\n * @typedef  {object}   PrincipalPropfindOptions\n * @property {boolean=} PrincipalPropfindOptions.enableCalDAV\n * @property {boolean=} PrincipalPropfindOptions.enableCalDAVResourceBooking\n * @property {boolean=} PrincipalPropfindOptions.enableCardDAV\n */\n\n/**\n * @class\n */\nexport class Principal extends DavObject {\n\n\t/**\n\t * Creates an object that represents a single principal\n\t * as specified in RFC 3744\n\t *\n\t * https://tools.ietf.org/html/rfc3744#section-2\n\t *\n\t * @inheritDoc\n\t */\n\tconstructor(...args) {\n\t\tsuper(...args)\n\n\t\tObject.assign(this, {\n\t\t\t// house keeping\n\t\t\t_updatedProperties: [],\n\n\t\t\t// parsers / factories\n\t\t\t_propSetFactory: [],\n\t\t})\n\n\t\tthis._registerPropSetFactory(prinicipalPropSet)\n\n\t\tthis._exposeProperty('displayname', NS.DAV, 'displayname')\n\t\tthis._exposeProperty('calendarUserType', NS.IETF_CALDAV, 'calendar-user-type')\n\t\tthis._exposeProperty('calendarUserAddressSet', NS.IETF_CALDAV, 'calendar-user-address-set')\n\t\tthis._exposeProperty('principalUrl', NS.DAV, 'principal-URL')\n\t\tthis._exposeProperty('email', NS.SABREDAV, 'email-address')\n\t\tthis._exposeProperty('language', NS.NEXTCLOUD, 'language')\n\n\t\tthis._exposeProperty('calendarHomes', NS.IETF_CALDAV, 'calendar-home-set')\n\t\tthis._exposeProperty('scheduleInbox', NS.IETF_CALDAV, 'schedule-inbox-URL')\n\t\tthis._exposeProperty('scheduleOutbox', NS.IETF_CALDAV, 'schedule-outbox-URL')\n\t\tthis._exposeProperty('scheduleDefaultCalendarUrl', NS.IETF_CALDAV, 'schedule-default-calendar-URL', true)\n\n\t\tthis._exposeProperty('addressBookHomes', NS.IETF_CARDDAV, 'addressbook-home-set')\n\n\t\t// Room and resource booking related\n\t\tthis._exposeProperty('roomType', NS.NEXTCLOUD, 'room-type')\n\t\tthis._exposeProperty('roomSeatingCapacity', NS.NEXTCLOUD, 'room-seating-capacity')\n\t\tthis._exposeProperty('roomBuildingAddress', NS.NEXTCLOUD, 'room-building-address')\n\t\tthis._exposeProperty('roomBuildingStory', NS.NEXTCLOUD, 'room-building-story')\n\t\tthis._exposeProperty('roomBuildingRoomNumber', NS.NEXTCLOUD, 'room-building-room-number')\n\t\tthis._exposeProperty('roomFeatures', NS.NEXTCLOUD, 'room-features')\n\n\t\tObject.defineProperties(this, {\n\t\t\tprincipalScheme: {\n\t\t\t\tget: () => {\n\t\t\t\t\tconst baseUrl = this._request.pathname(this._request.baseUrl)\n\t\t\t\t\tlet principalURI = this.url.slice(baseUrl.length)\n\t\t\t\t\tif (principalURI.slice(-1) === '/') {\n\t\t\t\t\t\tprincipalURI = principalURI.slice(0, -1)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn 'principal:' + principalURI\n\t\t\t\t},\n\t\t\t},\n\t\t\tuserId: {\n\t\t\t\tget: () => {\n\t\t\t\t\tif (this.calendarUserType !== 'INDIVIDUAL') {\n\t\t\t\t\t\treturn null\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this.url.split('/').splice(-2, 2)[this.url.endsWith('/') ? 0 : 1]\n\t\t\t\t},\n\t\t\t},\n\t\t\tgroupId: {\n\t\t\t\tget: () => {\n\t\t\t\t\tif (this.calendarUserType !== 'GROUP') {\n\t\t\t\t\t\treturn null\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this.url.split('/').splice(-2, 2)[this.url.endsWith('/') ? 0 : 1]\n\t\t\t\t},\n\t\t\t},\n\t\t\tresourceId: {\n\t\t\t\tget: () => {\n\t\t\t\t\tif (this.calendarUserType !== 'RESOURCE') {\n\t\t\t\t\t\treturn null\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this.url.split('/').splice(-2, 2)[this.url.endsWith('/') ? 0 : 1]\n\t\t\t\t},\n\t\t\t},\n\t\t\troomId: {\n\t\t\t\tget: () => {\n\t\t\t\t\tif (this.calendarUserType !== 'ROOM') {\n\t\t\t\t\t\treturn null\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this.url.split('/').splice(-2, 2)[this.url.endsWith('/') ? 0 : 1]\n\t\t\t\t},\n\t\t\t},\n\t\t\troomAddress: {\n\t\t\t\tget: () => {\n\t\t\t\t\tconst data = [\n\t\t\t\t\t\tthis.roomBuildingRoomNumber,\n\t\t\t\t\t\tthis.roomBuildingStory,\n\t\t\t\t\t\tthis.roomBuildingAddress,\n\t\t\t\t\t]\n\t\t\t\t\treturn data\n\t\t\t\t\t\t.filter(value => !!value)\n\t\t\t\t\t\t.join(', ')\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t}\n\n\t/**\n\t * Expose property to the outside and track changes if it's mutable\n\t *\n\t * @protected\n\t * @param {string} localName\n\t * @param {string} xmlNamespace\n\t * @param {string} xmlName\n\t * @param {boolean} mutable\n\t * @return void\n\t */\n\t_exposeProperty(localName, xmlNamespace, xmlName, mutable = false) {\n\t\tif (mutable) {\n\t\t\tObject.defineProperty(this, localName, {\n\t\t\t\tget: () => this._props[`{${xmlNamespace}}${xmlName}`],\n\t\t\t\tset: (val) => {\n\t\t\t\t\tthis._props[`{${xmlNamespace}}${xmlName}`] = val\n\t\t\t\t\tif (this._updatedProperties.indexOf(`{${xmlNamespace}}${xmlName}`) === -1) {\n\t\t\t\t\t\tthis._updatedProperties.push(`{${xmlNamespace}}${xmlName}`)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t})\n\t\t} else {\n\t\t\tObject.defineProperty(this, localName, {\n\t\t\t\tget: () => this._props[`{${xmlNamespace}}${xmlName}`],\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * @protected\n\t * @param factory\n\t * @return void\n\t */\n\t_registerPropSetFactory(factory) {\n\t\tthis._propSetFactory.push(factory)\n\t}\n\n\t/**\n\t * @inheritDoc\n\t *\n\t * @param {PrincipalPropfindOptions} options\n\t */\n\tstatic getPropFindList(options = {}) {\n\t\tconst list = [\n\t\t\t[NS.DAV, 'displayname'],\n\t\t\t[NS.IETF_CALDAV, 'calendar-user-type'],\n\t\t\t[NS.IETF_CALDAV, 'calendar-user-address-set'],\n\t\t\t[NS.DAV, 'principal-URL'],\n\t\t\t[NS.DAV, 'alternate-URI-set'],\n\t\t\t[NS.SABREDAV, 'email-address'],\n\t\t\t[NS.NEXTCLOUD, 'language'],\n\t\t]\n\n\t\tif (options.enableCalDAV) {\n\t\t\tlist.push(\n\t\t\t\t[NS.IETF_CALDAV, 'calendar-home-set'],\n\t\t\t\t[NS.IETF_CALDAV, 'schedule-inbox-URL'],\n\t\t\t\t[NS.IETF_CALDAV, 'schedule-outbox-URL'],\n\t\t\t\t[NS.IETF_CALDAV, 'schedule-default-calendar-URL'],\n\t\t\t)\n\t\t}\n\t\tif (options.enableCalDAVResourceBooking || options.enableCalDAV) {\n\t\t\tlist.push(\n\t\t\t\t// Room and Resource booking related\n\t\t\t\t[NS.NEXTCLOUD, 'resource-type'],\n\t\t\t\t[NS.NEXTCLOUD, 'resource-vehicle-type'],\n\t\t\t\t[NS.NEXTCLOUD, 'resource-vehicle-make'],\n\t\t\t\t[NS.NEXTCLOUD, 'resource-vehicle-model'],\n\t\t\t\t[NS.NEXTCLOUD, 'resource-vehicle-is-electric'],\n\t\t\t\t[NS.NEXTCLOUD, 'resource-vehicle-range'],\n\t\t\t\t[NS.NEXTCLOUD, 'resource-vehicle-seating-capacity'],\n\t\t\t\t[NS.NEXTCLOUD, 'resource-contact-person'],\n\t\t\t\t[NS.NEXTCLOUD, 'resource-contact-person-vcard'],\n\t\t\t\t[NS.NEXTCLOUD, 'room-type'],\n\t\t\t\t[NS.NEXTCLOUD, 'room-seating-capacity'],\n\t\t\t\t[NS.NEXTCLOUD, 'room-building-address'],\n\t\t\t\t[NS.NEXTCLOUD, 'room-building-story'],\n\t\t\t\t[NS.NEXTCLOUD, 'room-building-room-number'],\n\t\t\t\t[NS.NEXTCLOUD, 'room-features'],\n\t\t\t)\n\t\t}\n\t\tif (options.enableCardDAV) {\n\t\t\tlist.push(\n\t\t\t\t[NS.IETF_CARDDAV, 'addressbook-home-set'],\n\t\t\t)\n\t\t}\n\n\t\treturn list\n\t}\n\n\t/**\n\t * Sends a PropPatch request to update the principal's properties.\n\t * The request is only made if properties actually changed.\n\t *\n\t * @return {Promise<void>}\n\t */\n\tasync update() {\n\t\tif (this._updatedProperties.length === 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst properties = {}\n\t\tthis._updatedProperties.forEach((updatedProperty) => {\n\t\t\tproperties[updatedProperty] = this._props[updatedProperty]\n\t\t})\n\t\tconst propSet = this._propSetFactory.reduce((arr, p) => [...arr, ...p(properties)], [])\n\n\t\tconst [skeleton, dPropSet] = XMLUtility.getRootSkeleton(\n\t\t\t[NS.DAV, 'propertyupdate'],\n\t\t\t[NS.DAV, 'set'],\n\t\t\t[NS.DAV, 'prop'])\n\n\t\tdPropSet.push(...propSet)\n\n\t\tconst body = XMLUtility.serialize(skeleton)\n\t\tawait this._request.propPatch(this._url, {}, body)\n\t}\n\n}\n","/**\n * CDAV Library\n *\n * This library is part of the Nextcloud project\n *\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport Parser from './parser.js'\nimport Request from './request.js'\nimport * as NS from './utility/namespaceUtility.js'\nimport * as XMLUtility from './utility/xmlUtility.js'\nimport { CalendarHome } from './models/calendarHome.js'\nimport { AddressBookHome } from './models/addressBookHome.js'\nimport { Principal } from './models/principal.js'\n\nimport { debugFactory } from './debug.js'\nconst debug = debugFactory('index.js')\n\nexport { debugFactory as debug, NS as namespaces }\n\n/**\n *\n */\nexport default class DavClient {\n\n\t/**\n\t * @param {object} options\n\t * @param {string} options.rootUrl\n\t * @param {{[name: string]: any}} [options.defaultHeaders] A dictionary of default headers to apply to each request.\n\t * @param {object} factories\n\t */\n\tconstructor(options, factories = {}) {\n\t\t/**\n\t\t * root URL of DAV Server\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.rootUrl = options.rootUrl\n\n\t\tif (this.rootUrl.slice(-1) !== '/') {\n\t\t\tthis.rootUrl += '/'\n\t\t}\n\n\t\t/**\n\t\t * List of advertised DAV features\n\t\t *\n\t\t * @type {string[]}\n\t\t */\n\t\tthis.advertisedFeatures = []\n\n\t\t/**\n\t\t * Principal object of current user\n\t\t *\n\t\t * @type {Principal}\n\t\t */\n\t\tthis.currentUserPrincipal = null\n\n\t\t/**\n\t\t * Array of links to principal collections\n\t\t *\n\t\t * @type {string[]}\n\t\t */\n\t\tthis.principalCollections = []\n\n\t\t/**\n\t\t * Array of calendar homes\n\t\t * will be filled after connect() was called\n\t\t *\n\t\t * @type {CalendarHome[]}\n\t\t */\n\t\tthis.calendarHomes = []\n\n\t\t/**\n\t\t * The calendar-home that houses all public calendars\n\t\t * findAll will obviously not work ;)\n\t\t * use find(token) to get a public calendar\n\t\t *\n\t\t * @type {CalendarHome|null}\n\t\t */\n\t\tthis.publicCalendarHome = null\n\n\t\t/**\n\t\t * Array of address book homes\n\t\t * will be filled after connect() was called\n\t\t *\n\t\t * @type {AddressBookHome[]}\n\t\t */\n\t\tthis.addressBookHomes = []\n\n\t\t/**\n\t\t *\n\t\t * @type {Parser}\n\t\t */\n\t\tthis.parser = new Parser()\n\n\t\t/**\n\t\t *\n\t\t * @type {boolean}\n\t\t * @private\n\t\t */\n\t\tthis._isConnected = false\n\n\t\t/**\n\t\t *\n\t\t * @type {Request}\n\t\t * @private\n\t\t */\n\t\tthis._request = new Request(this.rootUrl, this.parser, options.defaultHeaders)\n\t}\n\n\t/**\n\t * initializes the DAVClient\n\t * @param {object} options\n\t * @return {Promise<DavClient>}\n\t */\n\tasync connect(options = { enableCalDAV: false, enableCardDAV: false }) {\n\t\tif (this._isConnected) {\n\t\t\treturn this\n\t\t}\n\n\t\t// we don't support rfc 6764 for now - Pull-requests welcome :)\n\t\tif (!this.rootUrl) {\n\t\t\tthrow new Error('No rootUrl configured')\n\t\t}\n\n\t\tconst principalUrl = await this._discoverPrincipalUri()\n\t\tdebug(`PrincipalURL: ${principalUrl}`)\n\n\t\tconst propFindList = Principal.getPropFindList(options)\n\t\tif (options.enableCalDAV || options.enableCardDAV) {\n\t\t\tpropFindList.push(\n\t\t\t\t[NS.DAV, 'principal-collection-set'],\n\t\t\t\t[NS.DAV, 'supported-report-set'],\n\t\t\t)\n\t\t}\n\n\t\tconst [propFindResponse, optionsResponse] = await Promise.all([\n\t\t\tthis._request.propFind(principalUrl, propFindList),\n\t\t\tthis._request.options(principalUrl),\n\t\t])\n\n\t\tthis.currentUserPrincipal = new Principal(null, this._request, principalUrl, propFindResponse.body)\n\t\tthis._extractAdvertisedDavFeatures(optionsResponse.headers)\n\t\tthis._extractAddressBookHomes(propFindResponse.body)\n\t\tthis._extractCalendarHomes(propFindResponse.body)\n\t\tthis._extractPrincipalCollectionSets(propFindResponse.body)\n\t\tthis._createPublicCalendarHome()\n\n\t\tthis._isConnected = true\n\n\t\treturn this\n\t}\n\n\t// /**\n\t//  * @returns {Promise<[any , any , any , any , any , any , any , any , any , any]>}\n\t//  */\n\t// async sync() {\n\t//     const promises = [];\n\t//\n\t//     // Ideally we would also check for new calendar-homes and\n\t//     // new addressbook-homes as well, but then Nextcloud will\n\t//     // ever only send provide one each, so we omit this step\n\t//     // to cut down network traffic\n\t//\n\t//     this.calendarHomes.forEach((calendarHome) => {\n\t//         promises.push(calendarHome.sync());\n\t//     });\n\t//     this.addressbookHomes.forEach((addressbookHome) => {\n\t//         promises.push(addressbookHome.sync());\n\t//     });\n\t//\n\t//     return Promise.all(promises);\n\t// }\n\n\t/**\n\t * performs a principal property search based on a principal's displayname\n\t *\n\t * @param {string} name\n\t * @return {Promise<Principal[]>}\n\t */\n\tasync principalPropertySearchByDisplayname(name) {\n\t\treturn this.principalPropertySearch([\n\t\t\t{ name: [NS.DAV, 'displayname'] },\n\t\t], name)\n\t}\n\n\t/**\n\t * performs a principal property search based on a principal's displayname OR email address\n\t *\n\t * @param {string} value\n\t * @return {Promise<Principal[]>}\n\t */\n\tasync principalPropertySearchByDisplaynameOrEmail(value) {\n\t\treturn this.principalPropertySearch([\n\t\t\t{ name: [NS.DAV, 'displayname'] },\n\t\t\t{ name: [NS.SABREDAV, 'email-address'] },\n\t\t], value, 'anyof')\n\t}\n\n\t/**\n\t * Performs a principal property based on the address of a room\n\t *\n\t * @param {string} address Address of the building the room is in\n\t * @return {Promise<Principal[]>}\n\t */\n\tasync principalPropertySearchByAddress(address) {\n\t\treturn this.principalPropertySearch([\n\t\t\t{ name: [NS.NEXTCLOUD, 'room-building-address'] },\n\t\t], address)\n\t}\n\n\t/**\n\t * Performs a principal property search based on the address and story of a room\n\t *\n\t * @param {string} address Address of the building the room is in\n\t * @param {string} story Story inside the building the room is in\n\t * @return {Promise<[]>}\n\t */\n\tasync principalPropertySearchByAddressAndStory(address, story) {\n\t\tconst [skeleton] = XMLUtility.getRootSkeleton(\n\t\t\t[NS.DAV, 'principal-property-search'])\n\n\t\tskeleton.children.push({\n\t\t\tname: [NS.DAV, 'property-search'],\n\t\t\tchildren: [{\n\t\t\t\tname: [NS.DAV, 'prop'],\n\t\t\t\tchildren: [{\n\t\t\t\t\tname: [NS.NEXTCLOUD, 'room-building-address'],\n\t\t\t\t}],\n\t\t\t}, {\n\t\t\t\tname: [NS.DAV, 'match'],\n\t\t\t\tvalue: address,\n\t\t\t}],\n\t\t})\n\t\tskeleton.children.push({\n\t\t\tname: [NS.DAV, 'property-search'],\n\t\t\tchildren: [{\n\t\t\t\tname: [NS.DAV, 'prop'],\n\t\t\t\tchildren: [{\n\t\t\t\t\tname: [NS.NEXTCLOUD, 'room-building-story'],\n\t\t\t\t}],\n\t\t\t}, {\n\t\t\t\tname: [NS.DAV, 'match'],\n\t\t\t\tvalue: story,\n\t\t\t}],\n\t\t})\n\n\t\tskeleton.children.push({\n\t\t\tname: [NS.DAV, 'prop'],\n\t\t\tchildren: Principal\n\t\t\t\t.getPropFindList({ enableCalDAV: true })\n\t\t\t\t.map((propFindListItem) => ({ name: propFindListItem })),\n\t\t})\n\n\t\t// We are searching all principal collections, not just one\n\t\tskeleton.children.push({ name: [NS.DAV, 'apply-to-principal-collection-set'] })\n\n\t\tconst xml = XMLUtility.serialize(skeleton)\n\t\treturn this._request.report(this.rootUrl, { Depth: 0 }, xml).then((response) => {\n\t\t\tconst result = []\n\n\t\t\tObject.entries(response.body).forEach(([path, props]) => {\n\t\t\t\tconst url = this._request.pathname(path)\n\t\t\t\tresult.push(new Principal(null, this._request, url, props))\n\t\t\t})\n\n\t\t\treturn result\n\t\t})\n\t}\n\n\t/**\n\t * Performs a principal property search based on multiple advanced filters\n\t *\n\t * @param {object} query The destructuring query object\n\t * @param {string=} query.displayName The display name to filter by\n\t * @param {number=} query.capacity The minimum required seating capacity\n\t * @param {string[]=} query.features The features to filter by\n\t * @param {string=} query.roomType The room type to filter by\n\t * @return {Promise<Principal[]>}\n\t */\n\tasync advancedPrincipalPropertySearch(query) {\n\t\tconst [skeleton] = XMLUtility.getRootSkeleton([NS.DAV, 'principal-property-search'])\n\n\t\t// Every prop has to match\n\t\tskeleton.attributes = [\n\t\t\t['test', 'allof'],\n\t\t]\n\n\t\tconst { displayName, capacity, features, roomType } = query\n\t\tif (displayName) {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.DAV, 'property-search'],\n\t\t\t\tchildren: [{\n\t\t\t\t\tname: [NS.DAV, 'prop'],\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{ name: [NS.DAV, 'displayname'] },\n\t\t\t\t\t],\n\t\t\t\t}, {\n\t\t\t\t\tname: [NS.DAV, 'match'],\n\t\t\t\t\tvalue: displayName,\n\t\t\t\t}],\n\t\t\t})\n\t\t}\n\t\tif (capacity) {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.DAV, 'property-search'],\n\t\t\t\tchildren: [{\n\t\t\t\t\tname: [NS.DAV, 'prop'],\n\t\t\t\t\tchildren: [{\n\t\t\t\t\t\tname: [NS.NEXTCLOUD, 'room-seating-capacity'],\n\t\t\t\t\t}],\n\t\t\t\t}, {\n\t\t\t\t\tname: [NS.DAV, 'match'],\n\t\t\t\t\tvalue: capacity,\n\t\t\t\t}],\n\t\t\t})\n\t\t}\n\t\tif (features && features.length > 0) {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.DAV, 'property-search'],\n\t\t\t\tchildren: [{\n\t\t\t\t\tname: [NS.DAV, 'prop'],\n\t\t\t\t\tchildren: [{\n\t\t\t\t\t\tname: [NS.NEXTCLOUD, 'room-features'],\n\t\t\t\t\t}],\n\t\t\t\t}, {\n\t\t\t\t\tname: [NS.DAV, 'match'],\n\t\t\t\t\tvalue: features.join(','),\n\t\t\t\t}],\n\t\t\t})\n\t\t}\n\t\tif (roomType) {\n\t\t\tskeleton.children.push({\n\t\t\t\tname: [NS.DAV, 'property-search'],\n\t\t\t\tchildren: [{\n\t\t\t\t\tname: [NS.DAV, 'prop'],\n\t\t\t\t\tchildren: [{\n\t\t\t\t\t\tname: [NS.NEXTCLOUD, 'room-type'],\n\t\t\t\t\t}],\n\t\t\t\t}, {\n\t\t\t\t\tname: [NS.DAV, 'match'],\n\t\t\t\t\tvalue: roomType,\n\t\t\t\t}],\n\t\t\t})\n\t\t}\n\n\t\t// Do not perform search if no parameter is given\n\t\tif (skeleton.children.length === 0) {\n\t\t\treturn []\n\t\t}\n\n\t\tskeleton.children.push({\n\t\t\tname: [NS.DAV, 'prop'],\n\t\t\tchildren: Principal\n\t\t\t\t.getPropFindList({ enableCalDAV: true })\n\t\t\t\t.map((propFindListItem) => ({ name: propFindListItem })),\n\t\t})\n\n\t\t// We are searching all principal collections, not just one\n\t\tskeleton.children.push({ name: [NS.DAV, 'apply-to-principal-collection-set'] })\n\n\t\tconst xml = XMLUtility.serialize(skeleton)\n\t\tconst response = await this._request.report(this.rootUrl, { Depth: 0 }, xml)\n\t\treturn Object\n\t\t\t.entries(response.body)\n\t\t\t.map(([path, props]) => {\n\t\t\t\tconst url = this._request.pathname(path)\n\t\t\t\treturn new Principal(null, this._request, url, props)\n\t\t\t})\n\t}\n\n\t/**\n\t * performs a principal property search\n\t * @see https://tools.ietf.org/html/rfc3744#section-9.4\n\t *\n\t * @param {Array} props\n\t * @param {string} match\n\t * @param {string} test 'anyof', 'allof' or none\n\t * @return {Promise<Principal[]>}\n\t */\n\tasync principalPropertySearch(props, match, test) {\n\t\tconst [skeleton, propSearch] = XMLUtility.getRootSkeleton(\n\t\t\t[NS.DAV, 'principal-property-search'],\n\t\t\t[NS.DAV, 'property-search'],\n\t\t)\n\t\tif (test) {\n\t\t\tskeleton.attributes = [\n\t\t\t\t['test', test],\n\t\t\t]\n\t\t}\n\n\t\tpropSearch.push({\n\t\t\tname: [NS.DAV, 'prop'],\n\t\t\tchildren: props,\n\t\t}, {\n\t\t\tname: [NS.DAV, 'match'],\n\t\t\tvalue: match,\n\t\t})\n\n\t\tskeleton.children.push({\n\t\t\tname: [NS.DAV, 'prop'],\n\t\t\tchildren: Principal\n\t\t\t\t.getPropFindList({ enableCalDAV: true })\n\t\t\t\t.map((propFindListItem) => ({ name: propFindListItem })),\n\t\t})\n\n\t\t// We are searching all principal collections, not just one\n\t\tskeleton.children.push({ name: [NS.DAV, 'apply-to-principal-collection-set'] })\n\n\t\tconst xml = XMLUtility.serialize(skeleton)\n\t\treturn this._request.report(this.rootUrl, { Depth: 0 }, xml).then((response) => {\n\t\t\tconst result = []\n\n\t\t\tObject.entries(response.body).forEach(([path, props]) => {\n\t\t\t\tconst url = this._request.pathname(path)\n\t\t\t\tresult.push(new Principal(null, this._request, url, props))\n\t\t\t})\n\n\t\t\treturn result\n\t\t})\n\t}\n\n\t/**\n\t * finds one principal at a given principalUrl\n\t *\n\t * @param {string} principalUrl\n\t * @return {Promise<Principal>}\n\t */\n\tasync findPrincipal(principalUrl) {\n\t\treturn this._request.propFind(principalUrl, Principal.getPropFindList()).then(({ body }) => {\n\t\t\treturn new Principal(null, this._request, principalUrl, body)\n\t\t}).catch((err) => {\n\t\t\t// TODO: improve error handling\n\t\t\tconsole.debug(err)\n\t\t})\n\t}\n\n\t/**\n\t * finds all principals in a collection at a given principalCollectionUrl\n\t *\n\t * @param {string} principalCollectionUrl\n\t * @param {import('./models/principal.js').PrincipalPropfindOptions} options Passed to Principal.getPropFindList()\n\t * @return {Promise<Principal[]>}\n\t */\n\tasync findPrincipalsInCollection(principalCollectionUrl, options = {}) {\n\t\ttry {\n\t\t\tconst { body } = await this._request.propFind(\n\t\t\t\tprincipalCollectionUrl,\n\t\t\t\tPrincipal.getPropFindList(options),\n\t\t\t\t1,\n\t\t\t)\n\t\t\tconst principals = Object.entries(body)\n\t\t\t\t.filter(([principalUrl]) => !principalCollectionUrl.endsWith(principalUrl))\n\t\t\t\t.map(([principalUrl, principal]) => new Principal(\n\t\t\t\t\tnull,\n\t\t\t\t\tthis._request,\n\t\t\t\t\tprincipalUrl,\n\t\t\t\t\tprincipal,\n\t\t\t\t))\n\t\t\treturn principals\n\t\t} catch (err) {\n\t\t\t// TODO: improve error handling\n\t\t\tconsole.debug(err)\n\t\t}\n\t}\n\n\t/**\n\t * discovers the accounts principal uri solely based on rootURL\n\t *\n\t * @return {Promise<string>}\n\t * @private\n\t */\n\tasync _discoverPrincipalUri() {\n\t\tconst response = await this._request.propFind(this.rootUrl, [\n\t\t\t[NS.DAV, 'current-user-principal'],\n\t\t], 0)\n\n\t\tif (!response.body['{DAV:}current-user-principal']) {\n\t\t\tthrow new Error('Error retrieving current user principal')\n\t\t}\n\t\tif (response.body['{DAV:}current-user-principal'].type === 'unauthenticated') {\n\t\t\tthrow new Error('Current user is not authenticated')\n\t\t}\n\t\treturn this._request.pathname(response.body['{DAV:}current-user-principal'].href)\n\t}\n\n\t/**\n\t * discovers all calendar-homes in this account, all principal collections\n\t * and advertised features\n\t *\n\t * a user will most commonly only have one calendar-home,\n\t * the CalDAV standard allows multiple calendar-homes though\n\t *\n\t * @param {object} props\n\t * @return void\n\t * @private\n\t */\n\tasync _extractCalendarHomes(props) {\n\t\tconst calendarHomes = props[`{${NS.IETF_CALDAV}}calendar-home-set`]\n\t\tif (!calendarHomes) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.calendarHomes = calendarHomes.map((calendarHome) => {\n\t\t\tconst url = this._request.pathname(calendarHome)\n\t\t\treturn new CalendarHome(this, this._request, url, props)\n\t\t})\n\t}\n\n\t/**\n\t * discovers all address-book-homes in this account, all principal collections\n\t * and advertised features\n\t *\n\t * a user will most commonly only have one address-book-home,\n\t * the CardDAV standard allows multiple address-book-homes though\n\t *\n\t * @param {object} props\n\t * @return void\n\t * @private\n\t */\n\tasync _extractAddressBookHomes(props) {\n\t\tconst addressBookHomes = props[`{${NS.IETF_CARDDAV}}addressbook-home-set`]\n\t\tif (!addressBookHomes) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.addressBookHomes = addressBookHomes.map((addressbookHome) => {\n\t\t\tconst url = this._request.pathname(addressbookHome)\n\t\t\treturn new AddressBookHome(this, this._request, url, props)\n\t\t})\n\t}\n\n\t/**\n\t * extracts principalCollection Information from an existing props object\n\t * returned from the server\n\t *\n\t * @param {object} props\n\t * @return void\n\t * @private\n\t */\n\t_extractPrincipalCollectionSets(props) {\n\t\tconst principalCollectionSets = props[`{${NS.DAV}}principal-collection-set`]\n\t\tthis.principalCollections = principalCollectionSets.map((principalCollection) => {\n\t\t\treturn this._request.pathname(principalCollection)\n\t\t})\n\t}\n\n\t/**\n\t * extracts the advertised features supported by the DAV server\n\t *\n\t * @param {object} headers\n\t * @return void\n\t * @private\n\t */\n\t_extractAdvertisedDavFeatures(headers) {\n\t\tconst dav = headers.dav\n\t\tthis.advertisedFeatures.push(...dav.split(',').map((s) => s.trim()))\n\t}\n\n\t/**\n\t * Creates a public calendar home\n\t *\n\t * @return void\n\t * @private\n\t */\n\t_createPublicCalendarHome() {\n\t\tconst url = this._request.pathname(this.rootUrl) + 'public-calendars/'\n\t\tthis.publicCalendarHome = new CalendarHome(this, this._request, url, {})\n\t}\n\n}\n"],"names":["document","localName","XMLUtility.getRootSkeleton","NS.DAV","XMLUtility.serialize","axios","NS.resolve","uri","debug","StringUtility.uri","NS.CALENDARSERVER","NS.OWNCLOUD","NS.IETF_CALDAV","calendarPropSet","NS.APPLE","NS.NEXTCLOUD","StringUtility.uid","scheduleInboxPropSet","NS.IETF_CARDDAV","NS.SABREDAV","props"],"mappings":"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"}