{"version":3,"file":"bulkDownloadCorsProxyService.mjs","sources":["../../lib/services/bulkDownloadCorsProxyService.ts"],"sourcesContent":["// @ts-nocheck\n/**\n * Vue plugin that exposes a http client based on Axios,\n * which proxies client requests to a given CORS proxy service\n */\n\nimport axios from 'axios';\n\nconst BulkDownloadAxiosInstance = {\n  install(app, glueConfig, corsproxyUrl = '') {\n    // Create a modified axios instance such that its API\n    // works just as if requests are called without proxy\n    const bulkDownloadAxiosInstance = axios.create();\n\n    // ensure MAX_REQUESTS_COUNT connections\n    let PENDING_REQUESTS = 0;\n    bulkDownloadAxiosInstance.interceptors.request.use(config => new Promise((resolve) => {\n      const interval = setInterval(() => {\n        if (PENDING_REQUESTS < glueConfig.content.datasetDetails.bulkDownload.MAX_REQUESTS_COUNT) {\n          PENDING_REQUESTS += 1;\n          clearInterval(interval);\n          resolve(config);\n        }\n      }, glueConfig.content.datasetDetails.bulkDownload.INTERVAL_MS);\n    }));\n\n    bulkDownloadAxiosInstance.interceptors.response.use((response) => {\n      PENDING_REQUESTS = Math.max(0, PENDING_REQUESTS - 1);\n      return Promise.resolve(response);\n    }, (error) => {\n      PENDING_REQUESTS = Math.max(0, PENDING_REQUESTS - 1);\n      return Promise.reject(error);\n    });\n\n    // If corsproxyUrl is not given, just provide unmodified axios client\n    // to pass requests as-is\n    if (corsproxyUrl) {\n\n      // Remove trailing slashes\n      const normalizedCorsproxyUrl = corsproxyUrl.replace(/\\/+$/, '');\n\n      bulkDownloadAxiosInstance.interceptors.request.use(async (config) => {\n        try {\n          // Get CSRF token first using the base axios instance with credentials\n          const csrfResponse = await axios({\n            method: 'get',\n            url: `${normalizedCorsproxyUrl}/csrf-token`,\n            headers: {\n              'Accept': 'application/json'\n            },\n            withCredentials: true\n          });\n\n\n          if (!csrfResponse.data || !csrfResponse.data.csrf_token) {\n            throw new Error('CSRF token not received');\n          }\n\n          const csrfToken = csrfResponse.data.csrf_token;\n\n\n          // Create proxy request with CSRF token\n          const requestedUri = config.url;\n\n          const modifiedConfig = {\n            ...config,\n            url: normalizedCorsproxyUrl,\n            params: { uri: requestedUri },\n            headers: {\n              ...config.headers,\n              'X-CSRFToken': csrfToken,\n              'Accept': 'application/json'\n            },\n            withCredentials: true\n          };\n\n          return modifiedConfig;\n        } catch (error) {\n          console.error('Failed to get CSRF token:', error);\n          return Promise.reject(error);\n        }\n      });\n    }\n\n    app.config.globalProperties.$bulkDownloadAxiosInstance = bulkDownloadAxiosInstance; // eslint-disable-line\n  },\n};\n\nexport default BulkDownloadAxiosInstance;\n"],"names":["BulkDownloadAxiosInstance","app","glueConfig","corsproxyUrl","bulkDownloadAxiosInstance","axios","PENDING_REQUESTS","resolve","interval","config","response","error","normalizedCorsproxyUrl","csrfResponse","csrfToken","requestedUri"],"mappings":";AAQA,MAAMA,IAA4B;AAAA,EAChC,QAAQC,GAAKC,GAAYC,IAAe,IAAI;AAGpC,UAAAC,IAA4BC,EAAM;AAGxC,QAAIC,IAAmB;AAqBvB,QApBAF,EAA0B,aAAa,QAAQ,IAAI,OAAU,IAAI,QAAQ,CAACG,MAAY;AAC9E,YAAAC,IAAW,YAAY,MAAM;AACjC,QAAIF,IAAmBJ,EAAW,QAAQ,eAAe,aAAa,uBAChDI,KAAA,GACpB,cAAcE,CAAQ,GACtBD,EAAQE,CAAM;AAAA,MAEf,GAAAP,EAAW,QAAQ,eAAe,aAAa,WAAW;AAAA,IAC9D,CAAA,CAAC,GAEFE,EAA0B,aAAa,SAAS,IAAI,CAACM,OACnDJ,IAAmB,KAAK,IAAI,GAAGA,IAAmB,CAAC,GAC5C,QAAQ,QAAQI,CAAQ,IAC9B,CAACC,OACFL,IAAmB,KAAK,IAAI,GAAGA,IAAmB,CAAC,GAC5C,QAAQ,OAAOK,CAAK,EAC5B,GAIGR,GAAc;AAGhB,YAAMS,IAAyBT,EAAa,QAAQ,QAAQ,EAAE;AAE9D,MAAAC,EAA0B,aAAa,QAAQ,IAAI,OAAOK,MAAW;AAC/D,YAAA;AAEI,gBAAAI,IAAe,MAAMR,EAAM;AAAA,YAC/B,QAAQ;AAAA,YACR,KAAK,GAAGO,CAAsB;AAAA,YAC9B,SAAS;AAAA,cACP,QAAU;AAAA,YACZ;AAAA,YACA,iBAAiB;AAAA,UAAA,CAClB;AAGD,cAAI,CAACC,EAAa,QAAQ,CAACA,EAAa,KAAK;AACrC,kBAAA,IAAI,MAAM,yBAAyB;AAGrC,gBAAAC,IAAYD,EAAa,KAAK,YAI9BE,IAAeN,EAAO;AAcrB,iBAZgB;AAAA,YACrB,GAAGA;AAAA,YACH,KAAKG;AAAA,YACL,QAAQ,EAAE,KAAKG,EAAa;AAAA,YAC5B,SAAS;AAAA,cACP,GAAGN,EAAO;AAAA,cACV,eAAeK;AAAA,cACf,QAAU;AAAA,YACZ;AAAA,YACA,iBAAiB;AAAA,UAAA;AAAA,iBAIZH,GAAO;AACN,yBAAA,MAAM,6BAA6BA,CAAK,GACzC,QAAQ,OAAOA,CAAK;AAAA,QAC7B;AAAA,MAAA,CACD;AAAA,IACH;AAEI,IAAAV,EAAA,OAAO,iBAAiB,6BAA6BG;AAAA,EAC3D;AACF;"}