{ "version": 3, "sources": ["../../UI-Common/environment.ts", "../../UI-Common/xsrf-token-retriever.ts", "../../UI-Common/jquery-ajax-prefilter.ts"], "sourcesContent": ["const joinURL = (...args: string[]) =>\n args\n .join('/')\n .replace(/[/]+/g, '/')\n .replace(/^(.+):\\//, '$1://')\n .replace(/^file:/, 'file:/')\n .replace(/\\/(\\?|&|#[^!])/g, '$1')\n .replace(/\\?/g, '&')\n .replace('&', '?');\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\nconst API_HOST = process.env.API_HOST!;\nconst PATH_BASE = process.env.PATH_BASE;\nconst BASE_URL = new URL(PATH_BASE?.length ? PATH_BASE : '', API_HOST);\nconst API_URL = new URL(joinURL(BASE_URL.pathname + process.env.API_PATH_BASE!), BASE_URL);\nconst IS_DEV = process.env.NODE_ENV === 'development';\nconst XSRF_COOKIE_NAME = process.env.XSRF_COOKIE_NAME!;\nconst XSRF_HEADER_NAME = process.env.XSRF_HEADER_NAME!;\n\nexport { API_HOST, API_URL, BASE_URL, IS_DEV, PATH_BASE, XSRF_COOKIE_NAME, XSRF_HEADER_NAME };\n", "import { XSRF_COOKIE_NAME, XSRF_HEADER_NAME } from './environment.js';\n\nexport interface FetchTokenOptions {\n headers?: Record;\n tokenEndpoint: string;\n}\n\n/**\n * Sends HTTP GET request to `options.tokenEndpoint` and expects a cookie to be\n * set with name `XSRF_COOKIE_NAME`.\n *\n * @param {FetchTokenOptions} options\n * @returns {PromiseLike} The XSRF token retrieved from the cookie.\n */\nexport async function fetchToken({ headers, tokenEndpoint }: FetchTokenOptions): Promise {\n const afResponse = await fetch(tokenEndpoint, { headers });\n\n if (afResponse.ok) {\n const xsrfToken = getTokenFromCookie();\n\n if (xsrfToken?.length) {\n return Promise.resolve(xsrfToken);\n } else {\n return Promise.reject(new Error(`Could not find cookie named ${XSRF_COOKIE_NAME}`));\n }\n } else {\n return Promise.reject(\n new Error(`Request to ${tokenEndpoint} failed (${afResponse.status.toLocaleString()}: ${afResponse.statusText})`)\n );\n }\n}\n\n/**\n * Sends HTTP GET request to `options.tokenEndpoint` and expects a cookie to be\n * set with name `XSRF_COOKIE_NAME`. The value of the cookie is assigned to an object\n * property named `XSRF_HEADER_NAME`.\n *\n * @param {FetchTokenOptions} options\n * @returns {PromiseLike>} An object with the XSRF token assinged to the correct HTTP header name.\n */\nexport async function fetchTokenAsHeaderEntry(options: FetchTokenOptions): Promise> {\n return fetchToken(options).then(token => {\n return Object.defineProperty({}, XSRF_HEADER_NAME, { value: token, enumerable: true });\n });\n}\n\n/**\n * Synchronously sends HTTP GET request to `options.tokenEndpoint` and expects a cookie to be\n * set with name `XSRF_COOKIE_NAME`.\n *\n * @param {FetchTokenOptions} options\n * @param {(request: XMLHttpRequest) => void} [error] - A callback function to handle the error.\n * @returns {string} The XSRF token retrieved from the cookie.\n */\nexport function fetchTokenSync(\n { tokenEndpoint, headers }: FetchTokenOptions,\n error?: (request: XMLHttpRequest) => void\n): string | null {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', tokenEndpoint, false);\n\n for (const [key, value] of Object.entries(headers ?? {})) {\n xhr.setRequestHeader(key, value);\n }\n\n xhr.send(null);\n\n if (xhr.status === 200) {\n return getTokenFromCookie();\n } else {\n error?.(xhr);\n }\n\n return null;\n}\n\n/**\n * Synchronously sends HTTP GET request to `options.tokenEndpoint` and expects a cookie to be\n * set with name `XSRF_COOKIE_NAME`. The value of the cookie is assigned to an object\n * property named `XSRF_HEADER_NAME`.\n *\n * @param {FetchTokenOptions} options\n * @param {(request: XMLHttpRequest) => void} [error] - A callback function to handle the error.\n * @returns {Record} An object with the XSRF token assinged to the correct HTTP header name.\n */\nexport function fetchTokenAsHeaderEntrySync(\n options: FetchTokenOptions,\n error?: (request: XMLHttpRequest) => void\n): Record {\n const token = fetchTokenSync(options, error);\n\n return token?.length ? Object.defineProperty({}, XSRF_HEADER_NAME, { value: token, enumerable: true }) : {};\n}\n\nfunction getTokenFromCookie(): string | null {\n const cookies = document.cookie.length ? document.cookie.split('; ') : [];\n const xsrfCookie = cookies.find(row => row.startsWith(`${XSRF_COOKIE_NAME}=`));\n return xsrfCookie?.split('=').at(1) ?? null;\n}\n", "import jQuery from 'jquery';\nimport { API_URL } from './environment.js';\nimport { fetchTokenAsHeaderEntrySync } from './xsrf-token-retriever.js';\n\nconst afTokenUrl = API_URL.href + 'antiforgery/token';\nconst fetchTokenOptions = {\n tokenEndpoint: afTokenUrl\n};\n\n$.ajaxPrefilter(function (options: JQuery.AjaxSettings, _originalOptions: JQuery.AjaxSettings, _jqXHR: JQuery.jqXHR) {\n if ([options.method, options.type].some(m => m === 'POST')) {\n options.headers = { ...options.headers, ...fetchTokenAsHeaderEntrySync(fetchTokenOptions) };\n }\n});\n\ndeclare global {\n interface Window {\n jQuery: typeof jQuery;\n }\n}\n"], "mappings": "mBAAA,IAAMA,EAAU,IAAIC,IAClBA,EACG,KAAK,GAAG,EACR,QAAQ,QAAS,GAAG,EACpB,QAAQ,WAAY,OAAO,EAC3B,QAAQ,SAAU,QAAQ,EAC1B,QAAQ,kBAAmB,IAAI,EAC/B,QAAQ,MAAO,GAAG,EAClB,QAAQ,IAAK,GAAG,EAGfC,EAAW,2BACXC,EAAY,OACZC,EAAW,IAAI,IAAID,GAAW,OAASA,EAAY,GAAID,CAAQ,EAC/DG,EAAU,IAAI,IAAIL,EAAQI,EAAS,SAAW,gBAA0B,EAAGA,CAAQ,EAEzF,IAAME,EAAmB,aACnBC,EAAmB,eCqClB,SAASC,EACd,CAAE,cAAAC,EAAe,QAAAC,CAAQ,EACzBC,EACe,CACf,IAAMC,EAAM,IAAI,eAChBA,EAAI,KAAK,MAAOH,EAAe,EAAK,EAEpC,OAAW,CAACI,EAAKC,CAAK,IAAK,OAAO,QAAQJ,GAAW,CAAC,CAAC,EACrDE,EAAI,iBAAiBC,EAAKC,CAAK,EAKjC,OAFAF,EAAI,KAAK,IAAI,EAETA,EAAI,SAAW,IACVG,EAAmB,GAE1BJ,IAAQC,CAAG,EAGN,KACT,CAWO,SAASI,EACdC,EACAN,EACwB,CACxB,IAAMO,EAAQV,EAAeS,EAASN,CAAK,EAE3C,OAAOO,GAAO,OAAS,OAAO,eAAe,CAAC,EAAGC,EAAkB,CAAE,MAAOD,EAAO,WAAY,EAAK,CAAC,EAAI,CAAC,CAC5G,CAEA,SAASH,GAAoC,CAG3C,OAFgB,SAAS,OAAO,OAAS,SAAS,OAAO,MAAM,IAAI,EAAI,CAAC,GAC7C,KAAKK,GAAOA,EAAI,WAAW,GAAGC,CAAgB,GAAG,CAAC,GAC1D,MAAM,GAAG,EAAE,GAAG,CAAC,GAAK,IACzC,CC9FA,IAAMC,EAAaC,EAAQ,KAAO,oBAC5BC,EAAoB,CACxB,cAAeF,CACjB,EAEA,EAAE,cAAc,SAAUG,EAA8BC,EAAuCC,EAAsB,CAC/G,CAACF,EAAQ,OAAQA,EAAQ,IAAI,EAAE,KAAKG,GAAKA,IAAM,MAAM,IACvDH,EAAQ,QAAU,CAAE,GAAGA,EAAQ,QAAS,GAAGI,EAA4BL,CAAiB,CAAE,EAE9F,CAAC", "names": ["joinURL", "args", "API_HOST", "PATH_BASE", "BASE_URL", "API_URL", "XSRF_COOKIE_NAME", "XSRF_HEADER_NAME", "fetchTokenSync", "tokenEndpoint", "headers", "error", "xhr", "key", "value", "getTokenFromCookie", "fetchTokenAsHeaderEntrySync", "options", "token", "XSRF_HEADER_NAME", "row", "XSRF_COOKIE_NAME", "afTokenUrl", "API_URL", "fetchTokenOptions", "options", "_originalOptions", "_jqXHR", "m", "fetchTokenAsHeaderEntrySync"] }