{"version":3,"file":"dav-SmFgKjZ4.chunk.mjs","sources":["../node_modules/@nextcloud/files/node_modules/@nextcloud/sharing/dist/public.js","../node_modules/@nextcloud/files/dist/dav.mjs"],"sourcesContent":["/*!\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: GPL-3.0-or-later\n */\n/**\n * @module public\n */\nimport { loadState } from '@nextcloud/initial-state';\n/**\n * Check if the current page is on a public share\n */\nexport function isPublicShare() {\n // check both the new initial state version and fallback to legacy input\n return (loadState('files_sharing', 'isPublic', null)\n ?? document.querySelector('input#isPublic[type=\"hidden\"][name=\"isPublic\"][value=\"1\"]') !== null);\n}\n/**\n * Get the sharing token for the current public share\n */\nexport function getSharingToken() {\n return (loadState('files_sharing', 'sharingToken', null)\n ?? document.querySelector('input#sharingToken[type=\"hidden\"]')?.value\n ?? null);\n}\n","import { getCurrentUser, onRequestTokenUpdate, getRequestToken } from \"@nextcloud/auth\";\nimport { generateRemoteUrl } from \"@nextcloud/router\";\nimport { isPublicShare, getSharingToken } from \"@nextcloud/sharing/public\";\nimport { createClient, getPatcher } from \"webdav\";\nimport { P as Permission, s as scopedGlobals, l as logger, c as NodeStatus, a as File, b as Folder } from \"./chunks/folder-29HuacU_.mjs\";\nimport \"@nextcloud/paths\";\n/*!\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nfunction parsePermissions(permString = \"\") {\n let permissions = Permission.NONE;\n if (!permString) {\n return permissions;\n }\n if (permString.includes(\"G\")) {\n permissions |= Permission.READ;\n }\n if (permString.includes(\"W\")) {\n permissions |= Permission.WRITE;\n }\n if (permString.includes(\"CK\")) {\n permissions |= Permission.CREATE;\n }\n if (permString.includes(\"NV\")) {\n permissions |= Permission.UPDATE;\n }\n if (permString.includes(\"D\")) {\n permissions |= Permission.DELETE;\n }\n if (permString.includes(\"R\")) {\n permissions |= Permission.SHARE;\n }\n return permissions;\n}\nconst defaultDavProperties = [\n \"d:getcontentlength\",\n \"d:getcontenttype\",\n \"d:getetag\",\n \"d:getlastmodified\",\n \"d:creationdate\",\n \"d:displayname\",\n \"d:quota-available-bytes\",\n \"d:resourcetype\",\n \"nc:has-preview\",\n \"nc:is-encrypted\",\n \"nc:mount-type\",\n \"oc:comments-unread\",\n \"oc:favorite\",\n \"oc:fileid\",\n \"oc:owner-display-name\",\n \"oc:owner-id\",\n \"oc:permissions\",\n \"oc:size\"\n];\nconst defaultDavNamespaces = {\n d: \"DAV:\",\n nc: \"http://nextcloud.org/ns\",\n oc: \"http://owncloud.org/ns\",\n ocs: \"http://open-collaboration-services.org/ns\"\n};\nfunction registerDavProperty(prop, namespace = { nc: \"http://nextcloud.org/ns\" }) {\n scopedGlobals.davNamespaces ??= { ...defaultDavNamespaces };\n scopedGlobals.davProperties ??= [...defaultDavProperties];\n const namespaces = { ...scopedGlobals.davNamespaces, ...namespace };\n if (scopedGlobals.davProperties.find((search) => search === prop)) {\n logger.warn(`${prop} already registered`, { prop });\n return false;\n }\n if (prop.startsWith(\"<\") || prop.split(\":\").length !== 2) {\n logger.error(`${prop} is not valid. See example: 'oc:fileid'`, { prop });\n return false;\n }\n const ns = prop.split(\":\")[0];\n if (!namespaces[ns]) {\n logger.error(`${prop} namespace unknown`, { prop, namespaces });\n return false;\n }\n scopedGlobals.davProperties.push(prop);\n scopedGlobals.davNamespaces = namespaces;\n return true;\n}\nfunction getDavProperties() {\n scopedGlobals.davProperties ??= [...defaultDavProperties];\n return scopedGlobals.davProperties.map((prop) => `<${prop} />`).join(\" \");\n}\nfunction getDavNameSpaces() {\n scopedGlobals.davNamespaces ??= { ...defaultDavNamespaces };\n return Object.keys(scopedGlobals.davNamespaces).map((ns) => `xmlns:${ns}=\"${scopedGlobals.davNamespaces?.[ns]}\"`).join(\" \");\n}\nfunction getDefaultPropfind() {\n return `\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t`;\n}\nfunction getFavoritesReport() {\n return `\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t\t\n\t\t\t\t1\n\t\t\t\n\t\t`;\n}\nfunction getRecentSearch(lastModified) {\n return `\n\n\t\n\t\t\n\t\t\t\n\t\t\t\t${getDavProperties()}\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t/files/${getCurrentUser()?.uid}/\n\t\t\t\tinfinity\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\thttpd/unix-directory\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t0\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t${lastModified}\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t100\n\t\t\t0\n\t\t\n\t\n`;\n}\nfunction getRootPath() {\n if (isPublicShare()) {\n return `/files/${getSharingToken()}`;\n }\n return `/files/${getCurrentUser()?.uid}`;\n}\nconst defaultRootPath = getRootPath();\nfunction getRemoteURL() {\n const url = generateRemoteUrl(\"dav\");\n if (isPublicShare()) {\n return url.replace(\"remote.php\", \"public.php\");\n }\n return url;\n}\nconst defaultRemoteURL = getRemoteURL();\nfunction getClient(remoteURL = defaultRemoteURL, headers = {}) {\n const client = createClient(remoteURL, { headers });\n function setHeaders(token) {\n client.setHeaders({\n ...headers,\n // Add this so the server knows it is an request from the browser\n \"X-Requested-With\": \"XMLHttpRequest\",\n // Inject user auth\n requesttoken: token ?? \"\"\n });\n }\n onRequestTokenUpdate(setHeaders);\n setHeaders(getRequestToken());\n const patcher = getPatcher();\n patcher.patch(\"fetch\", (url, options) => {\n const headers2 = options.headers;\n if (headers2?.method) {\n options.method = headers2.method;\n delete headers2.method;\n }\n return fetch(url, options);\n });\n return client;\n}\nasync function getFavoriteNodes(options = {}) {\n const client = options.client ?? getClient();\n const path = options.path ?? \"/\";\n const davRoot = options.davRoot ?? defaultRootPath;\n const contentsResponse = await client.getDirectoryContents(`${davRoot}${path}`, {\n signal: options.signal,\n details: true,\n data: getFavoritesReport(),\n headers: {\n // see getClient for patched webdav client\n method: \"REPORT\"\n },\n includeSelf: true\n });\n return contentsResponse.data.filter((node) => node.filename !== path).map((result) => resultToNode(result, davRoot));\n}\nfunction resultToNode(node, filesRoot = defaultRootPath, remoteURL = defaultRemoteURL) {\n let userId = getCurrentUser()?.uid;\n if (isPublicShare()) {\n userId = userId ?? \"anonymous\";\n } else if (!userId) {\n throw new Error(\"No user id found\");\n }\n const props = node.props;\n const permissions = parsePermissions(props?.permissions);\n const owner = String(props?.[\"owner-id\"] || userId);\n const id = props.fileid || 0;\n const mtime = new Date(Date.parse(node.lastmod));\n const crtime = new Date(Date.parse(props.creationdate));\n const nodeData = {\n id,\n source: `${remoteURL}${node.filename}`,\n mtime: !isNaN(mtime.getTime()) && mtime.getTime() !== 0 ? mtime : void 0,\n crtime: !isNaN(crtime.getTime()) && crtime.getTime() !== 0 ? crtime : void 0,\n mime: node.mime || \"application/octet-stream\",\n // Manually cast to work around for https://github.com/perry-mitchell/webdav-client/pull/380\n displayname: props.displayname !== void 0 ? String(props.displayname) : void 0,\n size: props?.size || Number.parseInt(props.getcontentlength || \"0\"),\n // The fileid is set to -1 for failed requests\n status: id < 0 ? NodeStatus.FAILED : void 0,\n permissions,\n owner,\n root: filesRoot,\n attributes: {\n ...node,\n ...props,\n hasPreview: props?.[\"has-preview\"]\n }\n };\n delete nodeData.attributes?.props;\n return node.type === \"file\" ? new File(nodeData) : new Folder(nodeData);\n}\nexport {\n defaultDavNamespaces,\n defaultDavProperties,\n defaultRemoteURL,\n defaultRootPath,\n getClient,\n getDavNameSpaces,\n getDavProperties,\n getDefaultPropfind,\n getFavoriteNodes,\n getFavoritesReport,\n getRecentSearch,\n getRemoteURL,\n getRootPath,\n parsePermissions,\n registerDavProperty,\n resultToNode\n};\n//# sourceMappingURL=dav.mjs.map\n"],"names":["isPublicShare","loadState","getSharingToken","parsePermissions","permString","permissions","Permission","defaultDavProperties","defaultDavNamespaces","registerDavProperty","prop","namespace","scopedGlobals","namespaces","search","logger","ns","getDavProperties","getDavNameSpaces","getRootPath","getCurrentUser","defaultRootPath","getRemoteURL","url","generateRemoteUrl","defaultRemoteURL","getClient","remoteURL","headers","client","createClient","setHeaders","token","onRequestTokenUpdate","getRequestToken","getPatcher","options","headers2","resultToNode","node","filesRoot","userId","props","owner","id","mtime","crtime","nodeData","NodeStatus","File","Folder"],"mappings":"6SAWO,SAASA,GAAgB,CAE5B,OAAQC,EAAU,gBAAiB,WAAY,IAAI,GAC5C,SAAS,cAAc,2DAA2D,IAAM,IACnG,CAIO,SAASC,GAAkB,CAC9B,OAAQD,EAAU,gBAAiB,eAAgB,IAAI,GAChD,SAAS,cAAc,mCAAmC,GAAG,OAC7D,IACX,CCbA,SAASE,EAAiBC,EAAa,GAAI,CACzC,IAAIC,EAAcC,EAAW,KAC7B,OAAKF,IAGDA,EAAW,SAAS,GAAG,IACzBC,GAAeC,EAAW,MAExBF,EAAW,SAAS,GAAG,IACzBC,GAAeC,EAAW,OAExBF,EAAW,SAAS,IAAI,IAC1BC,GAAeC,EAAW,QAExBF,EAAW,SAAS,IAAI,IAC1BC,GAAeC,EAAW,QAExBF,EAAW,SAAS,GAAG,IACzBC,GAAeC,EAAW,QAExBF,EAAW,SAAS,GAAG,IACzBC,GAAeC,EAAW,QAErBD,CACT,CACA,MAAME,EAAuB,CAC3B,qBACA,mBACA,YACA,oBACA,iBACA,gBACA,0BACA,iBACA,iBACA,kBACA,gBACA,qBACA,cACA,YACA,wBACA,cACA,iBACA,SACF,EACMC,EAAuB,CAC3B,EAAG,OACH,GAAI,0BACJ,GAAI,yBACJ,IAAK,2CACP,EACA,SAASC,EAAoBC,EAAMC,EAAY,CAAE,GAAI,yBAAyB,EAAI,CAChFC,EAAc,gBAAkB,CAAE,GAAGJ,CAAoB,EACzDI,EAAc,gBAAkB,CAAC,GAAGL,CAAoB,EACxD,MAAMM,EAAa,CAAE,GAAGD,EAAc,cAAe,GAAGD,CAAS,EACjE,GAAIC,EAAc,cAAc,KAAME,GAAWA,IAAWJ,CAAI,EAC9D,OAAAK,EAAO,KAAK,GAAGL,CAAI,sBAAuB,CAAE,KAAAA,EAAM,EAC3C,GAET,GAAIA,EAAK,WAAW,GAAG,GAAKA,EAAK,MAAM,GAAG,EAAE,SAAW,EACrD,OAAAK,EAAO,MAAM,GAAGL,CAAI,0CAA2C,CAAE,KAAAA,EAAM,EAChE,GAET,MAAMM,EAAKN,EAAK,MAAM,GAAG,EAAE,CAAC,EAC5B,OAAKG,EAAWG,CAAE,GAIlBJ,EAAc,cAAc,KAAKF,CAAI,EACrCE,EAAc,cAAgBC,EACvB,KALLE,EAAO,MAAM,GAAGL,CAAI,qBAAsB,CAAE,KAAAA,EAAM,WAAAG,EAAY,EACvD,GAKX,CACA,SAASI,GAAmB,CAC1B,OAAAL,EAAc,gBAAkB,CAAC,GAAGL,CAAoB,EACjDK,EAAc,cAAc,IAAKF,GAAS,IAAIA,CAAI,KAAK,EAAE,KAAK,GAAG,CAC1E,CACA,SAASQ,GAAmB,CAC1B,OAAAN,EAAc,gBAAkB,CAAE,GAAGJ,CAAoB,EAClD,OAAO,KAAKI,EAAc,aAAa,EAAE,IAAKI,GAAO,SAASA,CAAE,KAAKJ,EAAc,gBAAgBI,CAAE,CAAC,GAAG,EAAE,KAAK,GAAG,CAC5H,CA6EA,SAASG,GAAc,CACrB,OAAInB,EAAa,EACR,UAAUE,EAAe,CAAE,GAE7B,UAAUkB,EAAc,GAAI,GAAG,EACxC,CACA,MAAMC,EAAkBF,EAAW,EACnC,SAASG,GAAe,CACtB,MAAMC,EAAMC,EAAkB,KAAK,EACnC,OAAIxB,EAAa,EACRuB,EAAI,QAAQ,aAAc,YAAY,EAExCA,CACT,CACK,MAACE,EAAmBH,EAAY,EACrC,SAASI,EAAUC,EAAYF,EAAkBG,EAAU,CAAA,EAAI,CAC7D,MAAMC,EAASC,EAAaH,EAAW,CAAE,QAAAC,CAAO,CAAE,EAClD,SAASG,EAAWC,EAAO,CACzBH,EAAO,WAAW,CAChB,GAAGD,EAEH,mBAAoB,iBAEpB,aAAcI,GAAS,EAC7B,CAAK,CACH,CACA,OAAAC,EAAqBF,CAAU,EAC/BA,EAAWG,EAAe,CAAE,EACZC,EAAU,EAClB,MAAM,QAAS,CAACZ,EAAKa,IAAY,CACvC,MAAMC,EAAWD,EAAQ,QACzB,OAAIC,GAAU,SACZD,EAAQ,OAASC,EAAS,OAC1B,OAAOA,EAAS,QAEX,MAAMd,EAAKa,CAAO,CAC3B,CAAC,EACMP,CACT,CAiBA,SAASS,EAAaC,EAAMC,EAAYnB,EAAiBM,EAAYF,EAAkB,CACrF,IAAIgB,EAASrB,EAAc,GAAI,IAC/B,GAAIpB,EAAa,EACfyC,EAASA,GAAU,oBACV,CAACA,EACV,MAAM,IAAI,MAAM,kBAAkB,EAEpC,MAAMC,EAAQH,EAAK,MACblC,EAAcF,EAAiBuC,GAAO,WAAW,EACjDC,EAAQ,OAAOD,IAAQ,UAAU,GAAKD,CAAM,EAC5CG,EAAKF,EAAM,QAAU,EACrBG,EAAQ,IAAI,KAAK,KAAK,MAAMN,EAAK,OAAO,CAAC,EACzCO,EAAS,IAAI,KAAK,KAAK,MAAMJ,EAAM,YAAY,CAAC,EAChDK,EAAW,CACf,GAAAH,EACA,OAAQ,GAAGjB,CAAS,GAAGY,EAAK,QAAQ,GACpC,MAAO,CAAC,MAAMM,EAAM,QAAO,CAAE,GAAKA,EAAM,QAAO,IAAO,EAAIA,EAAQ,OAClE,OAAQ,CAAC,MAAMC,EAAO,QAAO,CAAE,GAAKA,EAAO,QAAO,IAAO,EAAIA,EAAS,OACtE,KAAMP,EAAK,MAAQ,2BAEnB,YAAaG,EAAM,cAAgB,OAAS,OAAOA,EAAM,WAAW,EAAI,OACxE,KAAMA,GAAO,MAAQ,OAAO,SAASA,EAAM,kBAAoB,GAAG,EAElE,OAAQE,EAAK,EAAII,EAAW,OAAS,OACrC,YAAA3C,EACA,MAAAsC,EACA,KAAMH,EACN,WAAY,CACV,GAAGD,EACH,GAAGG,EACH,WAAYA,IAAQ,aAAa,CACvC,CACA,EACE,cAAOK,EAAS,YAAY,MACrBR,EAAK,OAAS,OAAS,IAAIU,EAAKF,CAAQ,EAAI,IAAIG,EAAOH,CAAQ,CACxE","x_google_ignoreList":[0,1]}