{"version":3,"file":"index.mjs","sources":["../lib/requesttoken.ts","../lib/csp-nonce.ts","../lib/guest.ts","../lib/user.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: GPL-3.0-or-later\n */\nimport { subscribe } from '@nextcloud/event-bus'\n\nexport interface CsrfTokenObserver {\n\t(token: string): void;\n}\n\nlet token: string | null | undefined\nconst observers: CsrfTokenObserver[] = []\n\n/**\n * Get current request token\n *\n * @return {string|null} Current request token or null if not set\n */\nexport function getRequestToken(): string | null {\n\tif (token === undefined) {\n\t\t// Only on first load, try to get token from document\n\t\ttoken = document.head.dataset.requesttoken ?? null\n\t}\n\treturn token\n}\n\n/**\n * Add an observer which is called when the CSRF token changes\n *\n * @param observer The observer\n */\nexport function onRequestTokenUpdate(observer: CsrfTokenObserver): void {\n\tobservers.push(observer)\n}\n\n// Listen to server event and keep token in sync\nsubscribe('csrf-token-update', (e: unknown) => {\n\ttoken = (e as { token: string }).token\n\n\tobservers.forEach((observer) => {\n\t\ttry {\n\t\t\tobserver(token!)\n\t\t} catch (e) {\n\t\t\tconsole.error('Error updating CSRF token observer', e)\n\t\t}\n\t})\n})\n","/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: GPL-3.0-or-later\n */\n\nimport { getRequestToken } from './requesttoken'\n\n/**\n * Get the CSP nonce for script loading\n *\n * @return Current nonce if set\n * @example When using webpack this can be used to allow webpack to dynamically load additional modules:\n * ```js\n * import { getCSPNonce } from '@nextcloud/auth'\n *\n * __webpack_nonce__ = getCSPNonce()\n * ```\n */\nexport function getCSPNonce(): string | undefined {\n\tconst meta = document?.querySelector('meta[name=\"csp-nonce\"]')\n\t// backwards compatibility with older Nextcloud versions\n\tif (!meta) {\n\t\tconst token = getRequestToken()\n\t\treturn token ? btoa(token) : undefined\n\t}\n\treturn meta.nonce\n}\n","/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: GPL-3.0-or-later\n */\nimport { getBuilder } from '@nextcloud/browser-storage'\n\nconst browserStorage = getBuilder('public').persist().build()\n\n/**\n * Get the guest nickname for public pages\n */\nexport function getGuestNickname(): string | null {\n\treturn browserStorage.getItem('guestNickname')\n}\n\n/**\n * Set the guest nickname for public pages\n * @param nickname The nickname to set\n */\nexport function setGuestNickname(nickname: string): void {\n\tbrowserStorage.setItem('guestNickname', nickname)\n}\n","/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: GPL-3.0-or-later\n */\ndeclare global {\n\tinterface Window {\n\t\t_oc_isadmin?: boolean\n\t}\n}\n\nexport interface NextcloudUser {\n\tuid: string,\n\tdisplayName: string | null,\n\tisAdmin: boolean,\n}\n\nlet currentUser: NextcloudUser | null | undefined\n\nconst getAttribute = (el: HTMLHeadElement | undefined, attribute: string): string | null => {\n\tif (el) {\n\t\treturn el.getAttribute(attribute)\n\t}\n\n\treturn null\n}\n\n/**\n * Get the currently logged in Nextcloud user or null if not logged in\n */\nexport function getCurrentUser(): NextcloudUser | null {\n\tif (currentUser !== undefined) {\n\t\treturn currentUser\n\t}\n\n\tconst head = document?.getElementsByTagName('head')[0]\n\tif (!head) {\n\t\treturn null\n\t}\n\n\t// No user logged in so cache and return null\n\tconst uid = getAttribute(head, 'data-user')\n\tif (uid === null) {\n\t\tcurrentUser = null\n\t\treturn currentUser\n\t}\n\n\tcurrentUser = {\n\t\tuid,\n\t\tdisplayName: getAttribute(head, 'data-user-displayname'),\n\t\tisAdmin: !!window._oc_isadmin,\n\t} as NextcloudUser\n\n\treturn currentUser\n}\n"],"names":["e","token"],"mappings":";;AAUA,IAAI;AACJ,MAAM,YAAiC,CAAA;AAOhC,SAAS,kBAAiC;AAChD,MAAI,UAAU,QAAW;AAEhB,YAAA,SAAS,KAAK,QAAQ,gBAAgB;AAAA,EAC/C;AACO,SAAA;AACR;AAOO,SAAS,qBAAqB,UAAmC;AACvE,YAAU,KAAK,QAAQ;AACxB;AAGA,UAAU,qBAAqB,CAAC,MAAe;AAC9C,UAAS,EAAwB;AAEvB,YAAA,QAAQ,CAAC,aAAa;AAC3B,QAAA;AACH,eAAS,KAAM;AAAA,aACPA,IAAG;AACH,cAAA,MAAM,sCAAsCA,EAAC;AAAA,IACtD;AAAA,EAAA,CACA;AACF,CAAC;AC5BM,SAAS,cAAkC;AAC3C,QAAA,OAAO,UAAU,cAA+B,wBAAwB;AAE9E,MAAI,CAAC,MAAM;AACV,UAAMC,SAAQ;AACP,WAAAA,SAAQ,KAAKA,MAAK,IAAI;AAAA,EAC9B;AACA,SAAO,KAAK;AACb;ACpBA,MAAM,iBAAiB,WAAW,QAAQ,EAAE,UAAU,MAAM;AAKrD,SAAS,mBAAkC;AAC1C,SAAA,eAAe,QAAQ,eAAe;AAC9C;AAMO,SAAS,iBAAiB,UAAwB;AACzC,iBAAA,QAAQ,iBAAiB,QAAQ;AACjD;ACLA,IAAI;AAEJ,MAAM,eAAe,CAAC,IAAiC,cAAqC;AAC3F,MAAI,IAAI;AACA,WAAA,GAAG,aAAa,SAAS;AAAA,EACjC;AAEO,SAAA;AACR;AAKO,SAAS,iBAAuC;AACtD,MAAI,gBAAgB,QAAW;AACvB,WAAA;AAAA,EACR;AAEA,QAAM,OAAO,UAAU,qBAAqB,MAAM,EAAE,CAAC;AACrD,MAAI,CAAC,MAAM;AACH,WAAA;AAAA,EACR;AAGM,QAAA,MAAM,aAAa,MAAM,WAAW;AAC1C,MAAI,QAAQ,MAAM;AACH,kBAAA;AACP,WAAA;AAAA,EACR;AAEc,gBAAA;AAAA,IACb;AAAA,IACA,aAAa,aAAa,MAAM,uBAAuB;AAAA,IACvD,SAAS,CAAC,CAAC,OAAO;AAAA,EAAA;AAGZ,SAAA;AACR;"}