diff --git a/.env b/.env index 2af86ad7d2..9fcdf4e6b4 100644 --- a/.env +++ b/.env @@ -1,5 +1,4 @@ NODE_ENV='production' -USE_API_CACHE=true ENABLE_SKILLS_QUIZ=false FEATURE_ENABLE_PROGRAMS=true FEATURE_PROGRAM_TYPE_FACET=true diff --git a/.env.development b/.env.development index c9e9aa394b..f880596307 100644 --- a/.env.development +++ b/.env.development @@ -27,7 +27,6 @@ ALGOLIA_INDEX_NAME='' ALGOLIA_REPLICA_INDEX_NAME='' ALGOLIA_INDEX_NAME_JOBS='' FULLSTORY_ORG_ID='' -USE_API_CACHE='' LOGO_URL=https://edx-cdn.org/v3/default/logo.svg LOGO_TRADEMARK_URL=https://edx-cdn.org/v3/default/logo-trademark.svg LOGO_WHITE_URL=https://edx-cdn.org/v3/default/logo-white.svg diff --git a/.env.development-stage b/.env.development-stage index 48678b67a9..d40d331d31 100644 --- a/.env.development-stage +++ b/.env.development-stage @@ -26,7 +26,6 @@ SEGMENT_KEY='' PORT=8734 SITE_NAME='edX' FULLSTORY_ORG_ID='' -USE_API_CACHE='' LOGO_URL=https://edx-cdn.org/v3/default/logo.svg LOGO_TRADEMARK_URL=https://edx-cdn.org/v3/default/logo-trademark.svg LOGO_WHITE_URL=https://edx-cdn.org/v3/default/logo-white.svg diff --git a/docs/decisions/0015-useCache-deprecation.rst b/docs/decisions/0015-useCache-deprecation.rst new file mode 100644 index 0000000000..4f96f9d11c --- /dev/null +++ b/docs/decisions/0015-useCache-deprecation.rst @@ -0,0 +1,45 @@ +15. Deprecation of `useCache` option +=================================== + +Status +****** + +Accepted + +Context +******* + +Frontend platform offers a variety of helpers to facilitate API calls to our backend services. Part of their suite of +helper functions are `getAuthenticatedHttpClient` which allows a `useCache` option. The inclusion of the `useCache` option +treats the original `getAuthenticatedHttpClient` as a +`cachedAuthenticatedHttpClient` `method `_. +This has the effect of modifying the headers of the API request to our backend service. Within the the +`Access-Control-Request-Headers` preflight request or OPTIONS call, the inclusion of `useCache` resulted in the +`Cache-Control` header also being sent resulting in an unresolved API response and breaking usability for certain +components that depended on the upstream data. + +Decision +******** + +Deprecate the usage of `useCache` within `getAuthenticatedHttpClient` to avoid inadvertently modifying the expected +request headers to our backend services. For instances where client side caching of API calls is necessary, use +`React Query `_ when constructing the API call. There are +several examples that currently reside in our enterprise MFEs that +`effectively leverage `_ React Query, and the +usage of `query keys `_ and +`helpers `_. + + +Consequences +************ + +This will in the intermediary remove any client side caching facilitated by the `useCache` option. But should intentionally +be updated with a React Query implementation to maintain the benefits of client side caching. In the meantime, the backend +services cache will suffice + +Alternatives Considered +*********************** +The underlying package, `frontend-platform`, which depended on the breaking package upgrade, `Axios`, was downgraded as part of resolving +issues related to the `useCache` field. It was determined that the `useCache` field was primarily used in enterprise, so +it made the most sense to remove the `useCache` field in favor of introducing tools like `React Query` for client side +caching. diff --git a/package-lock.json b/package-lock.json index 82e0adb15e..1e05baea87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "@edx/frontend-enterprise-hotjar": "7.1.0", "@edx/frontend-enterprise-logistration": "9.1.0", "@edx/frontend-enterprise-utils": "9.1.0", - "@edx/frontend-platform": "8.0.0", + "@edx/frontend-platform": "8.1.5", "@edx/openedx-atlas": "0.6.2", "@edx/reactifex": "2.2.0", "@loadable/component": "5.16.3", @@ -26,7 +26,6 @@ "@tanstack/react-query-devtools": "4.29.0", "accessible-nprogress": "2.1.2", "algoliasearch": "4.6.0", - "axios": "0.28.0", "classnames": "2.2.6", "color": "3.1.3", "core-js": "3.7.0", @@ -74,6 +73,7 @@ "@testing-library/user-event": "13.5.0", "@wojtekmaj/enzyme-adapter-react-17": "0.8.0", "acorn": "8.5.0", + "axios": "1.6.7", "axios-mock-adapter": "1.19.0", "enzyme": "3.11.0", "jest-canvas-mock": "2.5.2", @@ -2341,15 +2341,15 @@ } }, "node_modules/@edx/frontend-platform": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@edx/frontend-platform/-/frontend-platform-8.0.0.tgz", - "integrity": "sha512-vcjo4khqi8Y3tUdhqfQ0iyJFg/kPFpuBjeDrs6nsLh5e8RT5ZGX4ImXhsdOAzJShcxapHHp3jrCtkmocslhP7g==", + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@edx/frontend-platform/-/frontend-platform-8.1.5.tgz", + "integrity": "sha512-tihHh4CQZrAerU9DeHIIfuN6vtZd5ahjLK9hFMb7o1aac/grjVUPueLONrdxLHSxb2LQsjga3YMXA5WIy5vOJQ==", "dependencies": { "@cospired/i18n-iso-languages": "4.2.0", "@formatjs/intl-pluralrules": "4.3.3", "@formatjs/intl-relativetimeformat": "10.0.1", - "axios": "0.28.0", - "axios-cache-interceptor": "0.10.7", + "axios": "1.6.7", + "axios-cache-interceptor": "1.6.2", "form-urlencoded": "4.1.4", "glob": "7.2.3", "history": "4.10.1", @@ -2361,8 +2361,8 @@ "lodash.memoize": "4.1.2", "lodash.merge": "4.6.2", "lodash.snakecase": "4.1.1", - "pubsub-js": "1.9.4", - "react-intl": "6.6.5", + "pubsub-js": "1.9.5", + "react-intl": "6.8.9", "universal-cookie": "4.0.4" }, "bin": { @@ -2372,7 +2372,7 @@ "peerDependencies": { "@openedx/frontend-build": ">= 14.0.0", "@openedx/paragon": ">= 21.5.7 < 23.0.0", - "prop-types": "^15.7.2", + "prop-types": ">=15.7.2 <16.0.0", "react": "^16.9.0 || ^17.0.0", "react-dom": "^16.9.0 || ^17.0.0", "react-redux": "^7.1.1 || ^8.1.1", @@ -2628,11 +2628,11 @@ } }, "node_modules/@formatjs/fast-memoize": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz", - "integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.3.tgz", + "integrity": "sha512-3jeJ+HyOfu8osl3GNSL4vVHUuWFXR03Iz9jjgI7RwjG6ysu/Ymdr0JRCPHfF5yGbTE6JCrd63EpvX1/WybYRbA==", "dependencies": { - "tslib": "^2.4.0" + "tslib": "2" } }, "node_modules/@formatjs/icu-messageformat-parser": { @@ -2689,17 +2689,17 @@ } }, "node_modules/@formatjs/intl": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.1.tgz", - "integrity": "sha512-dsLG15U7xDi8yzKf4hcAWSsCaez3XrjTO2oaRHPyHtXLm1aEzYbDw6bClo/HMHu+iwS5GbDqT3DV+hYP2ylScg==", + "version": "2.10.15", + "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.15.tgz", + "integrity": "sha512-i6+xVqT+6KCz7nBfk4ybMXmbKO36tKvbMKtgFz9KV+8idYFyFbfwKooYk8kGjyA5+T5f1kEPQM5IDLXucTAQ9g==", "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "@formatjs/fast-memoize": "2.2.0", - "@formatjs/icu-messageformat-parser": "2.7.6", - "@formatjs/intl-displaynames": "6.6.6", - "@formatjs/intl-listformat": "7.5.5", - "intl-messageformat": "10.5.11", - "tslib": "^2.4.0" + "@formatjs/ecma402-abstract": "2.2.4", + "@formatjs/fast-memoize": "2.2.3", + "@formatjs/icu-messageformat-parser": "2.9.4", + "@formatjs/intl-displaynames": "6.8.5", + "@formatjs/intl-listformat": "7.7.5", + "intl-messageformat": "10.7.7", + "tslib": "2" }, "peerDependencies": { "typescript": "^4.7 || 5" @@ -2711,57 +2711,59 @@ } }, "node_modules/@formatjs/intl-displaynames": { - "version": "6.6.6", - "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-6.6.6.tgz", - "integrity": "sha512-Dg5URSjx0uzF8VZXtHb6KYZ6LFEEhCbAbKoYChYHEOnMFTw/ZU3jIo/NrujzQD2EfKPgQzIq73LOUvW6Z/LpFA==", + "version": "6.8.5", + "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-6.8.5.tgz", + "integrity": "sha512-85b+GdAKCsleS6cqVxf/Aw/uBd+20EM0wDpgaxzHo3RIR3bxF4xCJqH/Grbzx8CXurTgDDZHPdPdwJC+May41w==", "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "@formatjs/intl-localematcher": "0.5.4", - "tslib": "^2.4.0" + "@formatjs/ecma402-abstract": "2.2.4", + "@formatjs/intl-localematcher": "0.5.8", + "tslib": "2" } }, "node_modules/@formatjs/intl-displaynames/node_modules/@formatjs/ecma402-abstract": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz", - "integrity": "sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.2.4.tgz", + "integrity": "sha512-lFyiQDVvSbQOpU+WFd//ILolGj4UgA/qXrKeZxdV14uKiAUiPAtX6XAn7WBCRi7Mx6I7EybM9E5yYn4BIpZWYg==", "dependencies": { - "@formatjs/intl-localematcher": "0.5.4", - "tslib": "^2.4.0" + "@formatjs/fast-memoize": "2.2.3", + "@formatjs/intl-localematcher": "0.5.8", + "tslib": "2" } }, "node_modules/@formatjs/intl-displaynames/node_modules/@formatjs/intl-localematcher": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", - "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.8.tgz", + "integrity": "sha512-I+WDNWWJFZie+jkfkiK5Mp4hEDyRSEvmyfYadflOno/mmKJKcB17fEpEH0oJu/OWhhCJ8kJBDz2YMd/6cDl7Mg==", "dependencies": { - "tslib": "^2.4.0" + "tslib": "2" } }, "node_modules/@formatjs/intl-listformat": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.5.5.tgz", - "integrity": "sha512-XoI52qrU6aBGJC9KJddqnacuBbPlb/bXFN+lIFVFhQ1RnFHpzuFrlFdjD9am2O7ZSYsyqzYRpkVcXeT1GHkwDQ==", + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.7.5.tgz", + "integrity": "sha512-Wzes10SMNeYgnxYiKsda4rnHP3Q3II4XT2tZyOgnH5fWuHDtIkceuWlRQNsvrI3uiwP4hLqp2XdQTCsfkhXulg==", "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "@formatjs/intl-localematcher": "0.5.4", - "tslib": "^2.4.0" + "@formatjs/ecma402-abstract": "2.2.4", + "@formatjs/intl-localematcher": "0.5.8", + "tslib": "2" } }, "node_modules/@formatjs/intl-listformat/node_modules/@formatjs/ecma402-abstract": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz", - "integrity": "sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.2.4.tgz", + "integrity": "sha512-lFyiQDVvSbQOpU+WFd//ILolGj4UgA/qXrKeZxdV14uKiAUiPAtX6XAn7WBCRi7Mx6I7EybM9E5yYn4BIpZWYg==", "dependencies": { - "@formatjs/intl-localematcher": "0.5.4", - "tslib": "^2.4.0" + "@formatjs/fast-memoize": "2.2.3", + "@formatjs/intl-localematcher": "0.5.8", + "tslib": "2" } }, "node_modules/@formatjs/intl-listformat/node_modules/@formatjs/intl-localematcher": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", - "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.8.tgz", + "integrity": "sha512-I+WDNWWJFZie+jkfkiK5Mp4hEDyRSEvmyfYadflOno/mmKJKcB17fEpEH0oJu/OWhhCJ8kJBDz2YMd/6cDl7Mg==", "dependencies": { - "tslib": "^2.4.0" + "tslib": "2" } }, "node_modules/@formatjs/intl-localematcher": { @@ -2793,20 +2795,40 @@ } }, "node_modules/@formatjs/intl/node_modules/@formatjs/ecma402-abstract": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz", - "integrity": "sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.2.4.tgz", + "integrity": "sha512-lFyiQDVvSbQOpU+WFd//ILolGj4UgA/qXrKeZxdV14uKiAUiPAtX6XAn7WBCRi7Mx6I7EybM9E5yYn4BIpZWYg==", "dependencies": { - "@formatjs/intl-localematcher": "0.5.4", - "tslib": "^2.4.0" + "@formatjs/fast-memoize": "2.2.3", + "@formatjs/intl-localematcher": "0.5.8", + "tslib": "2" + } + }, + "node_modules/@formatjs/intl/node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.9.4.tgz", + "integrity": "sha512-Tbvp5a9IWuxUcpWNIW6GlMQYEc4rwNHR259uUFoKWNN1jM9obf9Ul0e+7r7MvFOBNcN+13K7NuKCKqQiAn1QEg==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.2.4", + "@formatjs/icu-skeleton-parser": "1.8.8", + "tslib": "2" + } + }, + "node_modules/@formatjs/intl/node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.8.tgz", + "integrity": "sha512-vHwK3piXwamFcx5YQdCdJxUQ1WdTl6ANclt5xba5zLGDv5Bsur7qz8AD7BevaKxITwpgDeU0u8My3AIibW9ywA==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.2.4", + "tslib": "2" } }, "node_modules/@formatjs/intl/node_modules/@formatjs/intl-localematcher": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", - "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.8.tgz", + "integrity": "sha512-I+WDNWWJFZie+jkfkiK5Mp4hEDyRSEvmyfYadflOno/mmKJKcB17fEpEH0oJu/OWhhCJ8kJBDz2YMd/6cDl7Mg==", "dependencies": { - "tslib": "^2.4.0" + "tslib": "2" } }, "node_modules/@formatjs/ts-transformer": { @@ -6218,26 +6240,32 @@ } }, "node_modules/axios": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.28.0.tgz", - "integrity": "sha512-Tu7NYoGY4Yoc7I+Npf9HhUMtEEpV7ZiLH9yndTCoNhcpBH0kwcvFbzYN9/u5QKI5A6uefjsNNWaz5olJVYS62Q==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.4", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "node_modules/axios-cache-interceptor": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/axios-cache-interceptor/-/axios-cache-interceptor-0.10.7.tgz", - "integrity": "sha512-UjpxChG5DpF6Kf1IPGMLOzRDNL8ZNS6TOn1jTaVvCE7cWFU904jJwi0T1s+IbijpnLEjK2iq5uLIuR8Sj+RsFQ==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios-cache-interceptor/-/axios-cache-interceptor-1.6.2.tgz", + "integrity": "sha512-YLbAODIHZZIcD4b3WYFVQOa5W2TY/WnJ6sBHqAg6Z+hx+RVj8/OcjQyRopO6awn7/kOkGL5X9TP16AucnlJ/lw==", "dependencies": { - "cache-parser": "^1.2.4", - "fast-defer": "^1.1.7", - "object-code": "^1.2.4" + "cache-parser": "1.2.5", + "fast-defer": "1.1.8", + "object-code": "1.3.3" + }, + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/ArthurFiorette/axios-cache-interceptor?sponsor=1" + "url": "https://github.com/arthurfiorette/axios-cache-interceptor?sponsor=1" + }, + "peerDependencies": { + "axios": "^1" } }, "node_modules/axios-mock-adapter": { @@ -6835,9 +6863,9 @@ } }, "node_modules/cache-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/cache-parser/-/cache-parser-1.2.4.tgz", - "integrity": "sha512-O0KwuHuJnbHUrghHi2kGp0SxnWSIBXTYt7M8WVhW0kbPRUNUKoE/Of6e1rRD6AAxmfxFunKnt90yEK09D+sc5g==" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/cache-parser/-/cache-parser-1.2.5.tgz", + "integrity": "sha512-Md/4VhAHByQ9frQ15WD6LrMNiVw9AEl/J7vWIXw+sxT6fSOpbtt6LHTp76vy8+bOESPBO94117Hm2bIjlI7XjA==" }, "node_modules/call-bind": { "version": "1.0.8", @@ -11325,31 +11353,51 @@ } }, "node_modules/intl-messageformat": { - "version": "10.5.11", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.11.tgz", - "integrity": "sha512-eYq5fkFBVxc7GIFDzpFQkDOZgNayNTQn4Oufe8jw6YY6OHVw70/4pA3FyCsQ0Gb2DnvEJEMmN2tOaXUGByM+kg==", + "version": "10.7.7", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.7.tgz", + "integrity": "sha512-F134jIoeYMro/3I0h08D0Yt4N9o9pjddU/4IIxMMURqbAtI2wu70X8hvG1V48W49zXHXv3RKSF/po+0fDfsGjA==", "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "@formatjs/fast-memoize": "2.2.0", - "@formatjs/icu-messageformat-parser": "2.7.6", - "tslib": "^2.4.0" + "@formatjs/ecma402-abstract": "2.2.4", + "@formatjs/fast-memoize": "2.2.3", + "@formatjs/icu-messageformat-parser": "2.9.4", + "tslib": "2" } }, "node_modules/intl-messageformat/node_modules/@formatjs/ecma402-abstract": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz", - "integrity": "sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.2.4.tgz", + "integrity": "sha512-lFyiQDVvSbQOpU+WFd//ILolGj4UgA/qXrKeZxdV14uKiAUiPAtX6XAn7WBCRi7Mx6I7EybM9E5yYn4BIpZWYg==", "dependencies": { - "@formatjs/intl-localematcher": "0.5.4", - "tslib": "^2.4.0" + "@formatjs/fast-memoize": "2.2.3", + "@formatjs/intl-localematcher": "0.5.8", + "tslib": "2" + } + }, + "node_modules/intl-messageformat/node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.9.4.tgz", + "integrity": "sha512-Tbvp5a9IWuxUcpWNIW6GlMQYEc4rwNHR259uUFoKWNN1jM9obf9Ul0e+7r7MvFOBNcN+13K7NuKCKqQiAn1QEg==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.2.4", + "@formatjs/icu-skeleton-parser": "1.8.8", + "tslib": "2" + } + }, + "node_modules/intl-messageformat/node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.8.tgz", + "integrity": "sha512-vHwK3piXwamFcx5YQdCdJxUQ1WdTl6ANclt5xba5zLGDv5Bsur7qz8AD7BevaKxITwpgDeU0u8My3AIibW9ywA==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.2.4", + "tslib": "2" } }, "node_modules/intl-messageformat/node_modules/@formatjs/intl-localematcher": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", - "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.8.tgz", + "integrity": "sha512-I+WDNWWJFZie+jkfkiK5Mp4hEDyRSEvmyfYadflOno/mmKJKcB17fEpEH0oJu/OWhhCJ8kJBDz2YMd/6cDl7Mg==", "dependencies": { - "tslib": "^2.4.0" + "tslib": "2" } }, "node_modules/invariant": { @@ -15599,9 +15647,9 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "node_modules/pubsub-js": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/pubsub-js/-/pubsub-js-1.9.4.tgz", - "integrity": "sha512-hJYpaDvPH4w8ZX/0Fdf9ma1AwRgU353GfbaVfPjfJQf1KxZ2iHaHl3fAUw1qlJIR5dr4F3RzjGaWohYUEyoh7A==" + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/pubsub-js/-/pubsub-js-1.9.5.tgz", + "integrity": "sha512-5MZ0I9i5JWVO7SizvOviKvZU2qaBbl2KQX150FAA+fJBwYpwOUId7aNygURWSdPzlsA/xZ/InUKXqBbzM0czTA==" }, "node_modules/pump": { "version": "3.0.0", @@ -16176,20 +16224,20 @@ "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" }, "node_modules/react-intl": { - "version": "6.6.5", - "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.6.5.tgz", - "integrity": "sha512-OErDPbGqus0QKVj77MGCC9Plbnys3CDQrq6Lw41c60pmeTdn41AhoS1SIzXG6SUlyF7qNN2AVqfrrIvHUgSyLQ==", - "dependencies": { - "@formatjs/ecma402-abstract": "1.18.2", - "@formatjs/icu-messageformat-parser": "2.7.6", - "@formatjs/intl": "2.10.1", - "@formatjs/intl-displaynames": "6.6.6", - "@formatjs/intl-listformat": "7.5.5", - "@types/hoist-non-react-statics": "^3.3.1", + "version": "6.8.9", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.8.9.tgz", + "integrity": "sha512-TUfj5E7lyUDvz/GtovC9OMh441kBr08rtIbgh3p0R8iF3hVY+V2W9Am7rb8BpJ/29BH1utJOqOOhmvEVh3GfZg==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.2.4", + "@formatjs/icu-messageformat-parser": "2.9.4", + "@formatjs/intl": "2.10.15", + "@formatjs/intl-displaynames": "6.8.5", + "@formatjs/intl-listformat": "7.7.5", + "@types/hoist-non-react-statics": "3", "@types/react": "16 || 17 || 18", - "hoist-non-react-statics": "^3.3.2", - "intl-messageformat": "10.5.11", - "tslib": "^2.4.0" + "hoist-non-react-statics": "3", + "intl-messageformat": "10.7.7", + "tslib": "2" }, "peerDependencies": { "react": "^16.6.0 || 17 || 18", @@ -16202,20 +16250,40 @@ } }, "node_modules/react-intl/node_modules/@formatjs/ecma402-abstract": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz", - "integrity": "sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.2.4.tgz", + "integrity": "sha512-lFyiQDVvSbQOpU+WFd//ILolGj4UgA/qXrKeZxdV14uKiAUiPAtX6XAn7WBCRi7Mx6I7EybM9E5yYn4BIpZWYg==", "dependencies": { - "@formatjs/intl-localematcher": "0.5.4", - "tslib": "^2.4.0" + "@formatjs/fast-memoize": "2.2.3", + "@formatjs/intl-localematcher": "0.5.8", + "tslib": "2" + } + }, + "node_modules/react-intl/node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.9.4.tgz", + "integrity": "sha512-Tbvp5a9IWuxUcpWNIW6GlMQYEc4rwNHR259uUFoKWNN1jM9obf9Ul0e+7r7MvFOBNcN+13K7NuKCKqQiAn1QEg==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.2.4", + "@formatjs/icu-skeleton-parser": "1.8.8", + "tslib": "2" + } + }, + "node_modules/react-intl/node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.8.tgz", + "integrity": "sha512-vHwK3piXwamFcx5YQdCdJxUQ1WdTl6ANclt5xba5zLGDv5Bsur7qz8AD7BevaKxITwpgDeU0u8My3AIibW9ywA==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.2.4", + "tslib": "2" } }, "node_modules/react-intl/node_modules/@formatjs/intl-localematcher": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", - "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.8.tgz", + "integrity": "sha512-I+WDNWWJFZie+jkfkiK5Mp4hEDyRSEvmyfYadflOno/mmKJKcB17fEpEH0oJu/OWhhCJ8kJBDz2YMd/6cDl7Mg==", "dependencies": { - "tslib": "^2.4.0" + "tslib": "2" } }, "node_modules/react-is": { diff --git a/package.json b/package.json index 24da14d4e7..7b9d1d3a01 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@edx/frontend-enterprise-hotjar": "7.1.0", "@edx/frontend-enterprise-logistration": "9.1.0", "@edx/frontend-enterprise-utils": "9.1.0", - "@edx/frontend-platform": "8.0.0", + "@edx/frontend-platform": "8.1.5", "@edx/openedx-atlas": "0.6.2", "@edx/reactifex": "2.2.0", "@loadable/component": "5.16.3", @@ -24,7 +24,6 @@ "@tanstack/react-query-devtools": "4.29.0", "accessible-nprogress": "2.1.2", "algoliasearch": "4.6.0", - "axios": "0.28.0", "classnames": "2.2.6", "color": "3.1.3", "core-js": "3.7.0", @@ -72,6 +71,7 @@ "@testing-library/user-event": "13.5.0", "@wojtekmaj/enzyme-adapter-react-17": "0.8.0", "acorn": "8.5.0", + "axios": "1.6.7", "axios-mock-adapter": "1.19.0", "enzyme": "3.11.0", "jest-canvas-mock": "2.5.2", diff --git a/src/components/academies/data/tests/service.test.js b/src/components/academies/data/tests/service.test.js index 250cc04e46..b1c0377c7c 100644 --- a/src/components/academies/data/tests/service.test.js +++ b/src/components/academies/data/tests/service.test.js @@ -6,7 +6,6 @@ import { getAcademies, getAcademyMetadata } from '../service'; // config const APP_CONFIG = { - USE_API_CACHE: true, ENTERPRISE_CATALOG_API_BASE_URL: 'http://localhost:18160', }; diff --git a/src/components/academies/tests/AcademyDetailPage.test.jsx b/src/components/academies/tests/AcademyDetailPage.test.jsx index 03571677b6..2dc20d8b45 100644 --- a/src/components/academies/tests/AcademyDetailPage.test.jsx +++ b/src/components/academies/tests/AcademyDetailPage.test.jsx @@ -4,7 +4,8 @@ import { IntlProvider } from '@edx/frontend-platform/i18n'; import '@testing-library/jest-dom/extend-expect'; import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth'; import { - LEARNING_TYPE_COURSE, LEARNING_TYPE_EXECUTIVE_EDUCATION, + LEARNING_TYPE_COURSE, + LEARNING_TYPE_EXECUTIVE_EDUCATION, } from '@edx/frontend-enterprise-catalog-search/data/constants'; import { renderWithRouter } from '../../../utils/tests'; @@ -15,7 +16,6 @@ import { useAcademyPathwayData } from '../data/hooks'; // config const APP_CONFIG = { - USE_API_CACHE: true, ENTERPRISE_CATALOG_API_BASE_URL: 'http://localhost:18160', }; diff --git a/src/components/app/data/services/programs.js b/src/components/app/data/services/programs.js index 1f47166801..b82f006107 100644 --- a/src/components/app/data/services/programs.js +++ b/src/components/app/data/services/programs.js @@ -45,10 +45,10 @@ const retrieveCustomerContainsContent = async (enterpriseUuid, programUuid, cour }; export async function fetchProgramDetails(enterpriseUuid, programUuid) { - const { DISCOVERY_API_BASE_URL, USE_API_CACHE } = getConfig(); + const { DISCOVERY_API_BASE_URL } = getConfig(); const url = `${DISCOVERY_API_BASE_URL}/api/v1/programs/${programUuid}/`; try { - const programResponse = await getAuthenticatedHttpClient({ useCache: USE_API_CACHE }).get(url); + const programResponse = await getAuthenticatedHttpClient().get(url); const programDetails = camelCaseObject(programResponse.data); if (!programDetails) { return null; diff --git a/src/components/microlearning/tests/VideoDetailPage.test.jsx b/src/components/microlearning/tests/VideoDetailPage.test.jsx index 514d44b2e4..3f2dec9828 100644 --- a/src/components/microlearning/tests/VideoDetailPage.test.jsx +++ b/src/components/microlearning/tests/VideoDetailPage.test.jsx @@ -11,11 +11,11 @@ import { renderWithRouter } from '../../../utils/tests'; import VideoDetailPage from '../VideoDetailPage'; import { useEnterpriseCustomer, + useHasValidLicenseOrSubscriptionRequestsEnabled, useSubscriptions, useVideoCourseMetadata, useVideoCourseReviews, useVideoDetails, - useHasValidLicenseOrSubscriptionRequestsEnabled, } from '../../app/data'; import { COURSE_PACING_MAP } from '../../course/data'; import { LICENSE_STATUS } from '../../enterprise-user-subsidy/data/constants'; @@ -23,7 +23,6 @@ import { features } from '../../../config'; import { formatPrice } from '../../../utils/common'; const APP_CONFIG = { - USE_API_CACHE: true, ENTERPRISE_CATALOG_API_BASE_URL: 'http://localhost:18160', }; diff --git a/src/components/my-career/data/tests/service.test.jsx b/src/components/my-career/data/tests/service.test.jsx index f43cb51f52..3a2d3d1495 100644 --- a/src/components/my-career/data/tests/service.test.jsx +++ b/src/components/my-career/data/tests/service.test.jsx @@ -8,7 +8,6 @@ import { CURRENT_JOB_PROFILE_FIELD_NAME } from '../constants'; // config const APP_CONFIG = { - USE_API_CACHE: true, DISCOVERY_API_BASE_URL: 'http://localhost:18381', LMS_BASE_URL: 'http://localhost:18000', }; diff --git a/src/components/pathway/data/service.js b/src/components/pathway/data/service.js index 41fb76c8ab..2fa70437f9 100644 --- a/src/components/pathway/data/service.js +++ b/src/components/pathway/data/service.js @@ -7,16 +7,12 @@ export default class LearnerPathwayService { const { learnerPathwayUuid } = options; this.config = getConfig(); - this.cachedAuthenticatedHttpClient = getAuthenticatedHttpClient({ - useCache: this.config.USE_API_CACHE, - }); - this.learnerPathwayUuid = learnerPathwayUuid; } async fetchLearnerPathwayData() { const url = `${this.config.DISCOVERY_API_BASE_URL}/api/v1/learner-pathway/${this.learnerPathwayUuid}/`; - const LearnerPathwayData = await this.cachedAuthenticatedHttpClient.get(url); + const LearnerPathwayData = await getAuthenticatedHttpClient().get(url); return camelCaseObject(LearnerPathwayData.data); } } diff --git a/src/components/pathway/data/tests/hooks.test.js b/src/components/pathway/data/tests/hooks.test.js index 210bf196ae..05a3e3b346 100644 --- a/src/components/pathway/data/tests/hooks.test.js +++ b/src/components/pathway/data/tests/hooks.test.js @@ -8,7 +8,6 @@ import { useLearnerPathwayData } from '../hooks'; import { TEST_PATHWAY_DATA } from '../../tests/constants'; const APP_CONFIG = { - USE_API_CACHE: true, DISCOVERY_API_BASE_URL: 'http://localhost:18381', ENTERPRISE_CATALOG_API_BASE_URL: 'http://localhost:18160', }; diff --git a/src/components/pathway/data/tests/service.test.js b/src/components/pathway/data/tests/service.test.js index 29cf992936..cbd08a4511 100644 --- a/src/components/pathway/data/tests/service.test.js +++ b/src/components/pathway/data/tests/service.test.js @@ -7,7 +7,6 @@ import LearnerPathwayService from '../service'; import { TEST_PATHWAY_DATA } from '../../tests/constants'; const APP_CONFIG = { - USE_API_CACHE: true, DISCOVERY_API_BASE_URL: 'http://localhost:18381', ENTERPRISE_CATALOG_API_BASE_URL: 'http://localhost:18160', }; diff --git a/src/components/search/tests/SearchAcademy.test.jsx b/src/components/search/tests/SearchAcademy.test.jsx index ea084a8116..2a6eddf731 100644 --- a/src/components/search/tests/SearchAcademy.test.jsx +++ b/src/components/search/tests/SearchAcademy.test.jsx @@ -13,7 +13,6 @@ import { authenticatedUserFactory, enterpriseCustomerFactory } from '../../app/d // config const APP_CONFIG = { - USE_API_CACHE: true, ENTERPRISE_CATALOG_API_BASE_URL: 'http://localhost:18160', }; diff --git a/src/components/skills-quiz/data/service.js b/src/components/skills-quiz/data/service.js index 384a8fe352..7f5a1b7f0e 100644 --- a/src/components/skills-quiz/data/service.js +++ b/src/components/skills-quiz/data/service.js @@ -24,6 +24,6 @@ export function fetchCourseEnrollments() { export async function fetchJobPathDescription(currentJobID, futureJobID) { const config = getConfig(); const url = `${config.DISCOVERY_API_BASE_URL}/taxonomy/api/v1/job-path/?current_job=${currentJobID}&future_job=${futureJobID}`; - const result = await getAuthenticatedHttpClient({ useCache: config.USE_API_CACHE }).get(url); + const result = await getAuthenticatedHttpClient().get(url); return result.data.description; } diff --git a/src/components/skills-quiz/tests/JobDescriptions.test.jsx b/src/components/skills-quiz/tests/JobDescriptions.test.jsx index ce26ae7257..4a13d5e7f0 100644 --- a/src/components/skills-quiz/tests/JobDescriptions.test.jsx +++ b/src/components/skills-quiz/tests/JobDescriptions.test.jsx @@ -1,17 +1,16 @@ import axios from 'axios'; import MockAdapter from 'axios-mock-adapter'; import '@testing-library/jest-dom/extend-expect'; -import { act, screen, render } from '@testing-library/react'; +import { act, render, screen } from '@testing-library/react'; import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth'; import JobDescriptions from '../JobDescriptions'; import { - DROPDOWN_OPTION_IMPROVE_CURRENT_ROLE, DROPDOWN_OPTION_CHANGE_CAREERS, + DROPDOWN_OPTION_IMPROVE_CURRENT_ROLE, JOB_DESCRIPTION_DISCLAIMER, } from '../constants'; const APP_CONFIG = { - USE_API_CACHE: true, DISCOVERY_API_BASE_URL: 'http://localhost:18381', }; diff --git a/src/index.jsx b/src/index.jsx index 21db55364b..36d550be54 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -29,7 +29,6 @@ initialize({ handlers: { config: () => { mergeConfig({ - USE_API_CACHE: process.env.USE_API_CACHE || null, ENTERPRISE_ACCESS_BASE_URL: process.env.ENTERPRISE_ACCESS_BASE_URL || null, ENTERPRISE_CATALOG_API_BASE_URL: process.env.ENTERPRISE_CATALOG_API_BASE_URL || null, LICENSE_MANAGER_URL: process.env.LICENSE_MANAGER_URL || null,