From 05308c92824d8babae1789ce0e5d564aba0741c4 Mon Sep 17 00:00:00 2001 From: Alisha Evans Date: Wed, 1 Nov 2023 17:13:45 -0500 Subject: [PATCH 01/36] add the scientist cookie policy --- pages/cookie-policy/index.js | 280 +++++++++++++++++++++++++++++++++++ utils/constants.js | 2 +- 2 files changed, 281 insertions(+), 1 deletion(-) create mode 100644 pages/cookie-policy/index.js diff --git a/pages/cookie-policy/index.js b/pages/cookie-policy/index.js new file mode 100644 index 0000000..418aaa2 --- /dev/null +++ b/pages/cookie-policy/index.js @@ -0,0 +1,280 @@ +import { Title } from '@scientist-softserv/webstore-component-library' + +const CookiePolicy = () => ( +
+ + {cookiePolicy} + </div> +) + +export default CookiePolicy + +const cookiePolicy = ( + <div> + <h2>Information About Our Use of Cookies</h2> + <p>Our website and platform (together our <strong>"site"</strong>) is operated by the Assay Depot, Inc. d.b.a Scientist.com (<strong>"Scientist.com"</strong>, <strong>"we"</strong>, <strong>"us"</strong>, <strong>"our"</strong>). The site uses cookies to distinguish you from other users and this helps us to provide you with a good experience when you browse our site and also to improve our site. + If you wish to remove cookies placed on your device by our site or stop our site placing further cookies on your device you can do this at any time (learn how to do this below). + A cookie is a small file of letters and numbers that we store on your browser or the hard drive of your computer if you agree. Cookies contain information that is transferred to your computer's hard drive. We use the following cookies: + </p> + <ul> + <li><strong>Strictly necessary cookies.</strong> These are cookies that are required for the operation of our site. They include, for example, cookies that enable you to log into secure areas of our site or make use of services. We do not require your consent to place these cookies. Nevertheless, you may be able to block these cookies yourself on your device/browser, but restricting these cookies is likely to mean that our site will not work as you would expect and certain functionality may be inoperable.</li> + <p style={{textDecoration: 'underline'}}><strong>Non-essential cookies</strong></p> + <li><strong>Analytical/performance cookies.</strong> They allow us to recognise and count the number of visitors and to see how visitors move around our site when they are using it. This helps us to improve the way our site works, for example, by ensuring that users are finding what they are looking for easily. We use cookies to compile visitor statistics such as how many people have visited our site, how they reached our site, what type of technology they are using (e.g. Mac or Windows which helps to identify when our site isn't working as it should for particular technologies), how long they spend on the site, what page they look at etc. This helps us to continuously improve our website.</li> + <li><strong>Functionality cookies.</strong> These are used to recognise you/your language when you return to our site. This enables us to personalise our content for you and remember your preferences (for example, your choice of language or region).</li> + <li><strong>Targeting cookies.</strong> These cookies record your visit to our site, the pages you have visited and the links you have followed. This information will be used by us and third parties to make our site and the advertising displayed on it more relevant to your interests. We may also share this information with third parties for this purpose but only if you consent to such sharing.</li> + <li><strong>Social Website Cookies.</strong> We have included buttons on our site for certain social media sites such as Facebook, Twitter and Instagram. These cookies are set by the third party social media sites to which they relate.</li> + </ul> + <p>The privacy implications vary from social media site to social media site and will be dependent on the privacy settings you have chosen on these sites. Please refer to the relevant social media site's privacy and cookies policy for more information.</p> + <p>You can find more information about the individual cookies we use and the purposes for which we use them in the table below:</p> + <table className="table table-responsive table-bordered"> + <thead> + <tr> + <th width="20%"> + Cookie + </th> + <th width="20%"> + Cookie duration + </th> + <th width="60%"> + Purpose/further information + </th> + </tr> + </thead> + <tbody> + <tr> + <td colSpan={3} style={{textDecoration: 'underline'}}> + <strong>Essential (strictly necessary) cookies</strong> + </td> + </tr> + <tr> + <td> + _rx_session + </td> + <td> + End of browser session + </td> + <td> + Scientist.com + <br /> + <br /> + This cookie enables us to distinguish users and sessions. + </td> + </tr> + <tr> + <td> + _rx_cookie_consent + </td> + <td> + 1 year + </td> + <td> + Scientist.com + <br /> + <br /> + This cookie stores the user's cookie consent status. + </td> + </tr> + <tr> + <td> + intercom-lou-XXX + </td> + <td> + 1 year + </td> + <td> + Intercom cookie + <br /> + <br /> + This cookie helps to remember the user between visits and resume chat conversations. + </td> + </tr> + <tr> + <td> + intercom-session-XXX + </td> + <td> + 1 week + </td> + <td> + Intercom cookie + <br /> + <br /> + This cookie enables us to track the user's session, including maintaining continuity in chat conversations. + </td> + </tr> + <tr> + <td> + intercom-id-XXX + </td> + <td> + 1 year + </td> + <td> + Intercom cookie + <br /> + <br /> + This cookie enables us to distinguish users. + </td> + </tr> + <tr> + <td> + NID + </td> + <td> + 6 months + </td> + <td> + Google + <br /> + <br /> + This cookie contains a unique ID that identifies a returning user's device. Used by Google’s reCAPTCHA service to prevent spam. + </td> + </tr> + <tr> + <td colSpan={3} style={{textDecoration: 'underline'}}> + <strong>Non-essential cookies</strong> + </td> + </tr> + <tr> + <td> + __ga + </td> + <td> + 2 years + </td> + <td> + Google Analytics + <br /> + <br /> + This cookie enables us to distinguish users. + </td> + </tr> + <tr> + <td> + __gid + </td> + <td> + 24 hours + </td> + <td> + Google Analytics + <br /> + <br /> + This cookie enables us to distinguish users. + </td> + </tr> + <tr> + <td> + __utma + </td> + <td> + 2 years + </td> + <td> + Google Analytics + <br /> + <br /> + This cookie enables us to distinguish users and sessions. The cookie is created when the javascript library executes and no existing __utma cookies exists. The cookie is updated every time data is sent to Google Analytics. + </td> + </tr> + <tr> + <td> + __utmt + </td> + <td> + 10 minutes + </td> + <td> + Google Analytics + <br /> + <br /> + This cookie is used to limit the number of requests sent to the Google Analytics servers in the case of unusually high traffic. + </td> + </tr> + <tr> + <td> + __utmb + </td> + <td> + 30 minutes + </td> + <td> + Google Analytics + <br /> + <br /> + This cookie enables us to determine new sessions/visits. The cookie is created when the javascript library executes and no existing __utmb cookies exists. The cookie is updated every time data is sent to Google Analytics. + </td> + </tr> + <tr> + <td> + __utmc + </td> + <td> + End of browser session + </td> + <td> + Google Analytics + <br /> + <br /> + This cookie is not used in most sites but is set to enable interoperability with the older version of Google Analytics. Historically, this cookie operated in conjunction with the __utmb cookie to determine whether the user was in a new session/visit. + </td> + </tr> + <tr> + <td> + __utmz + </td> + <td> + 6 months + </td> + <td> + Google Analytics + <br /> + <br /> + This cookie stores the traffic source or campaign that explains how the user reached the site. The cookie is created when the javascript library executes and is updated every time data is sent to Google Analytics. + </td> + </tr> + <tr> + <td> + __utmv + </td> + <td> + 2 years + </td> + <td> + Google Analytics + <br /> + <br /> + This cookie is used to store visitor-level custom variable data. This cookie is created when a developer uses the _setCustomVar + method with a visitor level custom variable. This cookie was also used for the deprecated _setVar method. The cookie is updated every time data is sent to Google Analytics. + </td> + </tr> + <tr> + <td> + pll_language + </td> + <td> + 1 year + </td> + <td> + Polylang cookie + <br /> + <br /> + This cookie enables us to remember the last language visited. + </td> + </tr> + </tbody> + </table> + <p>Please note that third parties (including, for example, providers of external services like web traffic analysis services) may also use cookies, over which we have no control. These cookies are likely to be analytical/performance cookies or targeting cookies.</p> + <p>You can block cookies by activating the setting on your browser that allows you to refuse the setting of all or some cookies. However, as set out above, if you use your browser settings to block all cookies (including essential cookies) you may not be able to access all or parts of our site.</p> + <h2>More Information</h2> + <p>More information about cookies, including how to block them or delete them, can be found at <a href="http://www.aboutcookies.org" target="_blank">http://www.aboutcookies.org/</a></p> + <p>If you have any further questions, comments or requests regarding our cookies policy or how we use cookies + on our site, then you can contact us by email at <a href="mailto:privacy@scientist.com">privacy@scientist.com</a>.</p> + <h2>Changes To This Cookies Policy</h2> + <p>Any changes to this cookies policy in the future will be posted on this page and we will take all measures + necessary to communicate any changes to this cookies policy to you. Please check back frequently to see + any updates or changes to this cookies policy. We will also bring your attention to such changes by updating + our cookie banner/pop-up.</p> + <p>This policy was last reviewed and updated: May 31, 2018</p> + </div> +) diff --git a/utils/constants.js b/utils/constants.js index 6ae9b81..8fda999 100644 --- a/utils/constants.js +++ b/utils/constants.js @@ -39,7 +39,7 @@ export const FOOTER_SECTIONS = [ }, { name: 'Cookie Policy', - url: '/', + url: '/cookie-policy', }, ], }, From 43ed2e8acb9a020a1218ca2405582d58feb6bc44 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Thu, 2 Nov 2023 16:28:01 -0500 Subject: [PATCH 02/36] able to remove cookies and set a preference as a logged out user. for the time being I've installed react-bootstrap into the project so that I can get all of the configuration around handling cookies done. Once completed, I may move the actual modal to the webstore-component-library. The CookiePreferences component will still live in this app however as the component library does not need to be aware of cookies and such. --- components/CookiePreferences.js | 69 +++++++++++++++++++++ package.json | 2 + pages/_app.js | 2 + yarn.lock | 103 +++++++++++++++++++++++++++++++- 4 files changed, 173 insertions(+), 3 deletions(-) create mode 100644 components/CookiePreferences.js diff --git a/components/CookiePreferences.js b/components/CookiePreferences.js new file mode 100644 index 0000000..1687d08 --- /dev/null +++ b/components/CookiePreferences.js @@ -0,0 +1,69 @@ +import Link from 'next/link' +import Button from 'react-bootstrap/Button' +import Modal from 'react-bootstrap/Modal' +import { deleteCookie, getCookie, getCookies, setCookie } from 'cookies-next' +import { useState } from 'react' + +function CookiePreferences() { + const cookieConsent = getCookie('dl_cookie_consent') + const cookies = getCookies() + const [show, setShow] = useState(false) + console.log({ cookieConsent, show, cookies }) + + const handleClose = () => setShow(false) + const handleShow = () => setShow(true) + + const enableCookies = () => { + setCookie('dl_cookie_consent', 'true', { path: '/' }) + // set other cookies + handleClose() + } + const disableCookies = () => { + Object.keys(getCookies()).forEach(cookie => deleteCookie(cookie)) + setCookie('dl_cookie_consent', 'false', { path: '/' }) + handleClose() + } + + if (!show && (cookieConsent === undefined)) return handleShow() + + return ( + <Modal + show={show} + onHide={handleClose} + backdrop='static' + keyboard={false} + > + <Modal.Header closeButton> + <Modal.Title>Cookie Preferences</Modal.Title> + </Modal.Header> + <Modal.Body> + Please provide your consent below to our use of non-essential cookies on our site. + You may withdraw your consent at any point by visiting our <Link href='legal-notices/cookie-policy'>Cookie Policy</Link> page. + </Modal.Body> + <Modal.Footer> + <Button variant='primary' onClick={enableCookies}> + Allow Cookies + </Button> + <Button variant='secondary' onClick={disableCookies}> + Disable Cookies + </Button> + </Modal.Footer> + </Modal> + ) +} + +export default CookiePreferences + +// reference: https://github.com/assaydepot/rx/blob/main/app/actions/cookies_manager.rb#L34-L46 +const nonEssentialCookies = [ + '_ga', // this cookie is present in my console logs, but not in the list above + '__ga', + '__gid', + '__utma', + '__utmt', + '__utmb', + '__utmc', + '__utmz', + '__utmv', + 'pll_language' +] diff --git a/package.json b/package.json index ceb7363..a41a46f 100644 --- a/package.json +++ b/package.json @@ -24,9 +24,11 @@ "@sentry/nextjs": "^7.42.0", "axios": "^1.1.3", "bootstrap": "^5.2.3", + "cookies-next": "^4.0.0", "next": "12.3.1", "next-auth": "^4.20.1", "react": "18.2.0", + "react-bootstrap": "^2.9.1", "react-dom": "18.2.0", "sass": "^1.56.1", "swr": "^1.3.0" diff --git a/pages/_app.js b/pages/_app.js index 265c36d..f76c64c 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -7,6 +7,7 @@ import { signOut, useSession, } from 'next-auth/react' +import CookiePreferences from '../components/CookiePreferences' import { FOOTER_NAME, FOOTER_SECTIONS, @@ -29,6 +30,7 @@ const WebStore = ({ Component }) => { return ( <> + <CookiePreferences /> <Header auth={{ signIn: () => signIn(process.env.NEXT_PUBLIC_PROVIDER_NAME), diff --git a/yarn.lock b/yarn.lock index 078f7cb..69cb46f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -279,6 +279,13 @@ dependencies: regenerator-runtime "^0.13.11" +"@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" + integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.20.7", "@babel/template@^7.3.3": version "7.20.7" resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" @@ -934,6 +941,13 @@ dependencies: "@swc/helpers" "^0.4.14" +"@react-aria/ssr@^3.5.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.8.0.tgz#e7f467ac42f72504682724304ce221f785d70d49" + integrity sha512-Y54xs483rglN5DxbwfCPHxnkvZ+gZ0LbSYmR72LyWPGft8hN/lrl1VRS1EW2SMjnkEWlj+Km2mwvA3kEHDUA0A== + dependencies: + "@swc/helpers" "^0.5.0" + "@restart/hooks@^0.4.6", "@restart/hooks@^0.4.7": version "0.4.9" resolved "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.9.tgz" @@ -941,6 +955,13 @@ dependencies: dequal "^2.0.2" +"@restart/hooks@^0.4.9": + version "0.4.11" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.11.tgz#8876ccce1d4ad2a4b793a31689d63df36cf56088" + integrity sha512-Ft/ncTULZN6ldGHiF/k5qt72O8JyRMOeg0tApvCni8LkoiEahO+z3TNxfXIVGy890YtWVDvJAl662dVJSJXvMw== + dependencies: + dequal "^2.0.3" + "@restart/ui@^1.4.1": version "1.6.1" resolved "https://registry.npmjs.org/@restart/ui/-/ui-1.6.1.tgz" @@ -956,6 +977,21 @@ uncontrollable "^7.2.1" warning "^4.0.3" +"@restart/ui@^1.6.6": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.6.6.tgz#3481e2eaf15d7cae55bb2f518624e10d19c75800" + integrity sha512-eC3puKuWE1SRYbojWHXnvCNHGgf3uzHCb6JOhnF4OXPibOIPEkR1sqDSkL643ydigxwh+ruCa1CmYHlzk7ikKA== + dependencies: + "@babel/runtime" "^7.21.0" + "@popperjs/core" "^2.11.6" + "@react-aria/ssr" "^3.5.0" + "@restart/hooks" "^0.4.9" + "@types/warning" "^3.0.0" + dequal "^2.0.3" + dom-helpers "^5.2.0" + uncontrollable "^8.0.1" + warning "^4.0.3" + "@rjsf/core@^5.0.0-beta.17": version "5.0.1" resolved "https://registry.npmjs.org/@rjsf/core/-/core-5.0.1.tgz" @@ -1328,6 +1364,13 @@ dependencies: tslib "^2.4.0" +"@swc/helpers@^0.5.0": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.3.tgz#98c6da1e196f5f08f977658b80d6bd941b5f294f" + integrity sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A== + dependencies: + tslib "^2.4.0" + "@szmarczak/http-timer@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" @@ -1428,6 +1471,11 @@ dependencies: "@babel/types" "^7.3.0" +"@types/cookie@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" + integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== + "@types/estree@*", "@types/estree@^1.0.0": version "1.0.0" resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz" @@ -1506,6 +1554,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.37.tgz#0bfcd173e8e1e328337473a8317e37b3b14fd30d" integrity sha512-7GgtHCs/QZrBrDzgIJnQtuSvhFSwhyYSI2uafSwZoNt1iOGhEN5fwNrQMjtONyHm9+/LoA4453jH0CMYcr06Pg== +"@types/node@^16.10.2": + version "16.18.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.60.tgz#0b0f4316906f1bd0e03b640363f67bd4e86958bd" + integrity sha512-ZUGPWx5vKfN+G2/yN7pcSNLkIkXEvlwNaJEd4e0ppX7W2S8XAkdc/37hM4OUNJB9sa0p12AOvGvxL4JCPiz9DA== + "@types/prettier@^2.1.5": version "2.7.2" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" @@ -1530,6 +1583,13 @@ dependencies: "@types/react" "*" +"@types/react-transition-group@^4.4.6": + version "4.4.8" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.8.tgz#46f87d80512959cac793ecc610a93d80ef241ccf" + integrity sha512-QmQ22q+Pb+HQSn04NL3HtrqHwYMf4h3QKArOy5F8U5nEVMaihBs3SR10WiOM1iwPz5jIo8x/u11al+iEGZZrvg== + dependencies: + "@types/react" "*" + "@types/react@*": version "18.0.27" resolved "https://registry.npmjs.org/@types/react/-/react-18.0.27.tgz" @@ -2312,7 +2372,7 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== -classnames@^2.3.1: +classnames@^2.3.1, classnames@^2.3.2: version "2.3.2" resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== @@ -2496,7 +2556,7 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie@^0.4.1: +cookie@^0.4.0, cookie@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== @@ -2506,6 +2566,15 @@ cookie@^0.5.0: resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookies-next@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cookies-next/-/cookies-next-4.0.0.tgz#36d5c0d5899cf729a2580fd065071bdfa13783ca" + integrity sha512-3TyzeltFCGgdOlVOVTPClSq+YV9ZCdOyA3aHRZv9f5aSgg7EyI4NSvXFOCgzT/xIxeHR4Rz8/z5Tdo9oPqaVpA== + dependencies: + "@types/cookie" "^0.4.1" + "@types/node" "^16.10.2" + cookie "^0.4.0" + core-js@^3.6.5, core-js@^3.8.2: version "3.29.0" resolved "https://registry.npmjs.org/core-js/-/core-js-3.29.0.tgz" @@ -6438,6 +6507,24 @@ react-bootstrap@^2.5.0, react-bootstrap@^2.6.0: uncontrollable "^7.2.1" warning "^4.0.3" +react-bootstrap@^2.9.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.9.1.tgz#c1ab48ae2b2cfe6d5ac957c2042eb36fcafdb1d2" + integrity sha512-ezgmh/ARCYp18LbZEqPp0ppvy+ytCmycDORqc8vXSKYV3cer4VH7OReV8uMOoKXmYzivJTxgzGHalGrHamryHA== + dependencies: + "@babel/runtime" "^7.22.5" + "@restart/hooks" "^0.4.9" + "@restart/ui" "^1.6.6" + "@types/react-transition-group" "^4.4.6" + classnames "^2.3.2" + dom-helpers "^5.2.1" + invariant "^2.2.4" + prop-types "^15.8.1" + prop-types-extra "^1.1.0" + react-transition-group "^4.4.5" + uncontrollable "^7.2.1" + warning "^4.0.3" + react-country-region-selector@^3.6.1: version "3.6.1" resolved "https://registry.npmjs.org/react-country-region-selector/-/react-country-region-selector-3.6.1.tgz" @@ -6485,7 +6572,7 @@ react-loader-spinner@^5.3.4: styled-components "^5.3.5" styled-tools "^1.7.2" -react-transition-group@^4.4.2: +react-transition-group@^4.4.2, react-transition-group@^4.4.5: version "4.4.5" resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz" integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== @@ -6548,6 +6635,11 @@ regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7: resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" @@ -7419,6 +7511,11 @@ uncontrollable@^7.2.1: invariant "^2.2.4" react-lifecycles-compat "^3.0.4" +uncontrollable@^8.0.1: + version "8.0.4" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-8.0.4.tgz#a0a8307f638795162fafd0550f4a1efa0f8c5eb6" + integrity sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ== + unique-string@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" From bab5c66b8b431647eaa7f82c44a2395241f8f2de Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Fri, 17 Nov 2023 13:25:18 -0600 Subject: [PATCH 03/36] eslint corrections --- components/CookiePreferences.js | 6 ++++-- pages/cookie-policy/index.js | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/components/CookiePreferences.js b/components/CookiePreferences.js index 1687d08..311f52c 100644 --- a/components/CookiePreferences.js +++ b/components/CookiePreferences.js @@ -1,10 +1,12 @@ import Link from 'next/link' import Button from 'react-bootstrap/Button' import Modal from 'react-bootstrap/Modal' -import { deleteCookie, getCookie, getCookies, setCookie } from 'cookies-next' +import { + deleteCookie, getCookie, getCookies, setCookie, +} from 'cookies-next' import { useState } from 'react' -function CookiePreferences() { +const CookiePreferences = () => { const cookieConsent = getCookie('dl_cookie_consent') const cookies = getCookies() const [show, setShow] = useState(false) diff --git a/pages/cookie-policy/index.js b/pages/cookie-policy/index.js index 418aaa2..3fb9691 100644 --- a/pages/cookie-policy/index.js +++ b/pages/cookie-policy/index.js @@ -9,6 +9,7 @@ const CookiePolicy = () => ( export default CookiePolicy +/* eslint-disable max-len, react/no-unescaped-entities */ const cookiePolicy = ( <div> <h2>Information About Our Use of Cookies</h2> @@ -267,7 +268,7 @@ const cookiePolicy = ( <p>Please note that third parties (including, for example, providers of external services like web traffic analysis services) may also use cookies, over which we have no control. These cookies are likely to be analytical/performance cookies or targeting cookies.</p> <p>You can block cookies by activating the setting on your browser that allows you to refuse the setting of all or some cookies. However, as set out above, if you use your browser settings to block all cookies (including essential cookies) you may not be able to access all or parts of our site.</p> <h2>More Information</h2> - <p>More information about cookies, including how to block them or delete them, can be found at <a href="http://www.aboutcookies.org" target="_blank">http://www.aboutcookies.org/</a></p> + <p>More information about cookies, including how to block them or delete them, can be found at <a href="http://www.aboutcookies.org" target="_blank" rel="noreferrer">http://www.aboutcookies.org/</a></p> <p>If you have any further questions, comments or requests regarding our cookies policy or how we use cookies on our site, then you can contact us by email at <a href="mailto:privacy@scientist.com">privacy@scientist.com</a>.</p> <h2>Changes To This Cookies Policy</h2> @@ -278,3 +279,4 @@ const cookiePolicy = ( <p>This policy was last reviewed and updated: May 31, 2018</p> </div> ) +/* eslint-enable max-len, react/no-unescaped-entities */ From 8bbd23e85889578d874743309094d483e639dfb1 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Fri, 17 Nov 2023 15:22:08 -0600 Subject: [PATCH 04/36] move the legal documents to the legal-notices endpoint --- .../cookie-policy.js} | 0 pages/legal-notices/index.js | 11 +++++++++++ .../privacy-policy.js} | 5 +++-- .../scientist-privacy-policy.js | 0 .../terms-and-conditions.js} | 3 ++- .../terms-of-use.js} | 2 +- utils/constants.js | 19 +++++++++++++++++++ 7 files changed, 36 insertions(+), 4 deletions(-) rename pages/{cookie-policy/index.js => legal-notices/cookie-policy.js} (100%) create mode 100644 pages/legal-notices/index.js rename pages/{privacy-policy/index.js => legal-notices/privacy-policy.js} (90%) rename pages/{privacy-policy => legal-notices}/scientist-privacy-policy.js (100%) rename pages/{terms-and-conditions/index.js => legal-notices/terms-and-conditions.js} (94%) rename pages/{terms-of-use/index.js => legal-notices/terms-of-use.js} (98%) diff --git a/pages/cookie-policy/index.js b/pages/legal-notices/cookie-policy.js similarity index 100% rename from pages/cookie-policy/index.js rename to pages/legal-notices/cookie-policy.js diff --git a/pages/legal-notices/index.js b/pages/legal-notices/index.js new file mode 100644 index 0000000..dc94df8 --- /dev/null +++ b/pages/legal-notices/index.js @@ -0,0 +1,11 @@ +import { LinkGroup, Title } from '@scientist-softserv/webstore-component-library' +import { LEGAL_NOTICES } from '../../utils' + +const LegalNotices = () => ( + <div className='container'> + <Title title='Legal Notices' style={{ marginTop: '1rem' }} /> + <LinkGroup links={LEGAL_NOTICES} /> + </div> +) + +export default LegalNotices diff --git a/pages/privacy-policy/index.js b/pages/legal-notices/privacy-policy.js similarity index 90% rename from pages/privacy-policy/index.js rename to pages/legal-notices/privacy-policy.js index bdc69b5..7980c48 100644 --- a/pages/privacy-policy/index.js +++ b/pages/legal-notices/privacy-policy.js @@ -5,7 +5,7 @@ const PrivacyPolicy = () => ( <div className='container'> <Title title='*Client* Privacy Policy' style={{ marginTop: '1rem'}} /> {privacyPolicy} - <p>View the <Link href='/privacy-policy/scientist-privacy-policy'>Scientist.com Global Privacy Policy</Link></p> + <p>View the <Link href='/legal-notices/scientist-privacy-policy'>Scientist.com Global Privacy Policy</Link></p> </div> ) @@ -13,7 +13,8 @@ export default PrivacyPolicy const privacyPolicy = ( <div> - Delete this text and the div! Just needed this so that the build would not fail. + {/* Delete this text and the div! Just needed this so that the build would not fail. */} + Place the privacy policy here. {/* * How to add the proper html to this page: * diff --git a/pages/privacy-policy/scientist-privacy-policy.js b/pages/legal-notices/scientist-privacy-policy.js similarity index 100% rename from pages/privacy-policy/scientist-privacy-policy.js rename to pages/legal-notices/scientist-privacy-policy.js diff --git a/pages/terms-and-conditions/index.js b/pages/legal-notices/terms-and-conditions.js similarity index 94% rename from pages/terms-and-conditions/index.js rename to pages/legal-notices/terms-and-conditions.js index de9673c..d473058 100644 --- a/pages/terms-and-conditions/index.js +++ b/pages/legal-notices/terms-and-conditions.js @@ -11,7 +11,8 @@ export default TermsAndConditions const termsAndConditions = ( <div> - Delete this text and the div! Just needed this so that the build would not fail. + {/* Delete this text and the div! Just needed this so that the build would not fail. */} + Place the terms and conditions here. {/* * How to add the proper html to this page: * diff --git a/pages/terms-of-use/index.js b/pages/legal-notices/terms-of-use.js similarity index 98% rename from pages/terms-of-use/index.js rename to pages/legal-notices/terms-of-use.js index 6ffc1b4..f728cf4 100644 --- a/pages/terms-of-use/index.js +++ b/pages/legal-notices/terms-of-use.js @@ -12,7 +12,7 @@ export default TermsOfUse const termsOfUse = ( <div> {/* Delete this text and the div! Just needed this so that the build would not fail. */} - Place the JS for the Terms of Use here. + Place the terms of use here. {/* * How to add the proper html to this page: * diff --git a/utils/constants.js b/utils/constants.js index 0b083cb..38b6745 100644 --- a/utils/constants.js +++ b/utils/constants.js @@ -84,6 +84,25 @@ export const FOOTER_SOCIALS = [ }, ] +export const LEGAL_NOTICES = [ + { + name: 'Cookie Policy', + url: 'legal-notices/cookie-policy', + }, + { + name: 'Privacy Policy', + url: 'legal-notices/privacy-policy', + }, + { + name: 'Terms and Conditions', + url: 'legal-notices/terms-and-conditions', + }, + { + name: 'Terms of Use', + url: 'legal-notices/terms-of-use', + }, +] + export const STATUS_ARRAY = [ { statusLabel: 'Supplier Review', From ee829eed730a152f88bf5df8c18149366507b340 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Mon, 27 Nov 2023 12:07:21 -0600 Subject: [PATCH 05/36] refactor the CookiePreferences component. we are putting the component into the webstore-component-library repo now that the basics have been figured out. at the time of this commit, a new wcl release hasn't been made so the component isn't connected. --- components/CookiePreferences.js | 71 ---------------------------- package.json | 1 - pages/_app.js | 14 ++++-- utils/helpers.js | 20 ++++++++ yarn.lock | 82 +-------------------------------- 5 files changed, 32 insertions(+), 156 deletions(-) delete mode 100644 components/CookiePreferences.js diff --git a/components/CookiePreferences.js b/components/CookiePreferences.js deleted file mode 100644 index 311f52c..0000000 --- a/components/CookiePreferences.js +++ /dev/null @@ -1,71 +0,0 @@ -import Link from 'next/link' -import Button from 'react-bootstrap/Button' -import Modal from 'react-bootstrap/Modal' -import { - deleteCookie, getCookie, getCookies, setCookie, -} from 'cookies-next' -import { useState } from 'react' - -const CookiePreferences = () => { - const cookieConsent = getCookie('dl_cookie_consent') - const cookies = getCookies() - const [show, setShow] = useState(false) - console.log({ cookieConsent, show, cookies }) - - const handleClose = () => setShow(false) - const handleShow = () => setShow(true) - - const enableCookies = () => { - setCookie('dl_cookie_consent', 'true', { path: '/' }) - // set other cookies - handleClose() - } - const disableCookies = () => { - Object.keys(getCookies()).forEach(cookie => deleteCookie(cookie)) - setCookie('dl_cookie_consent', 'false', { path: '/' }) - handleClose() - } - - if (!show && (cookieConsent === undefined)) return handleShow() - - return ( - <Modal - show={show} - onHide={handleClose} - backdrop='static' - keyboard={false} - > - <Modal.Header closeButton> - <Modal.Title>Cookie Preferences</Modal.Title> - </Modal.Header> - <Modal.Body> - Please provide your consent below to our use of non-essential cookies on our site. - You may withdraw your consent at any point by visiting our <Link href='legal-notices/cookie-policy'>Cookie Policy</Link> page. - </Modal.Body> - <Modal.Footer> - <Button variant='primary' onClick={enableCookies}> - Allow Cookies - </Button> - <Button variant='secondary' onClick={disableCookies}> - Disable Cookies - </Button> - </Modal.Footer> - </Modal> - ) -} - -export default CookiePreferences - -// reference: https://github.com/assaydepot/rx/blob/main/app/actions/cookies_manager.rb#L34-L46 -const nonEssentialCookies = [ - '_ga', // this cookie is present in my console logs, but not in the list above - '__ga', - '__gid', - '__utma', - '__utmt', - '__utmb', - '__utmc', - '__utmz', - '__utmv', - 'pll_language' -] diff --git a/package.json b/package.json index 5ad2161..d064393 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "next": "12.3.1", "next-auth": "^4.20.1", "react": "18.2.0", - "react-bootstrap": "^2.9.1", "react-dom": "18.2.0", "sass": "^1.56.1", "swr": "^1.3.0" diff --git a/pages/_app.js b/pages/_app.js index f76c64c..ea3ecd0 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -1,4 +1,4 @@ -import { Footer, Header } from '@scientist-softserv/webstore-component-library' +import { CookiePreferences, Footer, Header } from '@scientist-softserv/webstore-component-library' import { SWRConfig } from 'swr' import { useRouter } from 'next/router' import { @@ -7,15 +7,17 @@ import { signOut, useSession, } from 'next-auth/react' -import CookiePreferences from '../components/CookiePreferences' import { FOOTER_NAME, FOOTER_SECTIONS, FOOTER_SOCIALS, - headerAndFooterLinkColors, LOGO, NAVIGATION_LINKS, + cookieConsent, + disableCookies, + enableCookies, fetcher, + headerAndFooterLinkColors, } from '../utils' import '../utils/theme/globals.scss' @@ -30,7 +32,11 @@ const WebStore = ({ Component }) => { return ( <> - <CookiePreferences /> + <CookiePreferences + cookieConsent={cookieConsent} + disableCookies={disableCookies} + enableCookies={enableCookies} + /> <Header auth={{ signIn: () => signIn(process.env.NEXT_PUBLIC_PROVIDER_NAME), diff --git a/utils/helpers.js b/utils/helpers.js index 0e806aa..767215e 100644 --- a/utils/helpers.js +++ b/utils/helpers.js @@ -1,3 +1,23 @@ +import { + deleteCookie, getCookie, getCookies, setCookie, +} from 'cookies-next' + +// once the feature is ready, uncomment the line below and delete the line below it. +// export const cookieConsent = getCookie('dl_cookie_consent') +export const cookieConsent = 'false' +export const cookies = getCookies() + +export const enableCookies = () => { + setCookie('dl_cookie_consent', 'true', { path: '/' }) + // set other cookies +} + +export const disableCookies = () => { + // will account for this in a future pr + // Object.keys(getCookies()).forEach(cookie => deleteCookie(cookie)) + setCookie('dl_cookie_consent', 'false', { path: '/' }) +} + export const addDays = (date, days) => { date.setDate(date.getDate() + days) return date diff --git a/yarn.lock b/yarn.lock index 0c3f2fd..cf681e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -279,13 +279,6 @@ dependencies: regenerator-runtime "^0.13.11" -"@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" - integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/template@^7.20.7", "@babel/template@^7.3.3": version "7.20.7" resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" @@ -941,13 +934,6 @@ dependencies: "@swc/helpers" "^0.4.14" -"@react-aria/ssr@^3.5.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.8.0.tgz#e7f467ac42f72504682724304ce221f785d70d49" - integrity sha512-Y54xs483rglN5DxbwfCPHxnkvZ+gZ0LbSYmR72LyWPGft8hN/lrl1VRS1EW2SMjnkEWlj+Km2mwvA3kEHDUA0A== - dependencies: - "@swc/helpers" "^0.5.0" - "@restart/hooks@^0.4.6", "@restart/hooks@^0.4.7": version "0.4.9" resolved "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.9.tgz" @@ -955,13 +941,6 @@ dependencies: dequal "^2.0.2" -"@restart/hooks@^0.4.9": - version "0.4.11" - resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.11.tgz#8876ccce1d4ad2a4b793a31689d63df36cf56088" - integrity sha512-Ft/ncTULZN6ldGHiF/k5qt72O8JyRMOeg0tApvCni8LkoiEahO+z3TNxfXIVGy890YtWVDvJAl662dVJSJXvMw== - dependencies: - dequal "^2.0.3" - "@restart/ui@^1.4.1": version "1.6.1" resolved "https://registry.npmjs.org/@restart/ui/-/ui-1.6.1.tgz" @@ -977,21 +956,6 @@ uncontrollable "^7.2.1" warning "^4.0.3" -"@restart/ui@^1.6.6": - version "1.6.6" - resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.6.6.tgz#3481e2eaf15d7cae55bb2f518624e10d19c75800" - integrity sha512-eC3puKuWE1SRYbojWHXnvCNHGgf3uzHCb6JOhnF4OXPibOIPEkR1sqDSkL643ydigxwh+ruCa1CmYHlzk7ikKA== - dependencies: - "@babel/runtime" "^7.21.0" - "@popperjs/core" "^2.11.6" - "@react-aria/ssr" "^3.5.0" - "@restart/hooks" "^0.4.9" - "@types/warning" "^3.0.0" - dequal "^2.0.3" - dom-helpers "^5.2.0" - uncontrollable "^8.0.1" - warning "^4.0.3" - "@rjsf/core@^5.0.0-beta.17": version "5.0.1" resolved "https://registry.npmjs.org/@rjsf/core/-/core-5.0.1.tgz" @@ -1364,13 +1328,6 @@ dependencies: tslib "^2.4.0" -"@swc/helpers@^0.5.0": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.3.tgz#98c6da1e196f5f08f977658b80d6bd941b5f294f" - integrity sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A== - dependencies: - tslib "^2.4.0" - "@szmarczak/http-timer@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" @@ -1583,13 +1540,6 @@ dependencies: "@types/react" "*" -"@types/react-transition-group@^4.4.6": - version "4.4.8" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.8.tgz#46f87d80512959cac793ecc610a93d80ef241ccf" - integrity sha512-QmQ22q+Pb+HQSn04NL3HtrqHwYMf4h3QKArOy5F8U5nEVMaihBs3SR10WiOM1iwPz5jIo8x/u11al+iEGZZrvg== - dependencies: - "@types/react" "*" - "@types/react@*": version "18.0.27" resolved "https://registry.npmjs.org/@types/react/-/react-18.0.27.tgz" @@ -2372,7 +2322,7 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== -classnames@^2.3.1, classnames@^2.3.2: +classnames@^2.3.1: version "2.3.2" resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== @@ -6507,24 +6457,6 @@ react-bootstrap@^2.5.0, react-bootstrap@^2.6.0: uncontrollable "^7.2.1" warning "^4.0.3" -react-bootstrap@^2.9.1: - version "2.9.1" - resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.9.1.tgz#c1ab48ae2b2cfe6d5ac957c2042eb36fcafdb1d2" - integrity sha512-ezgmh/ARCYp18LbZEqPp0ppvy+ytCmycDORqc8vXSKYV3cer4VH7OReV8uMOoKXmYzivJTxgzGHalGrHamryHA== - dependencies: - "@babel/runtime" "^7.22.5" - "@restart/hooks" "^0.4.9" - "@restart/ui" "^1.6.6" - "@types/react-transition-group" "^4.4.6" - classnames "^2.3.2" - dom-helpers "^5.2.1" - invariant "^2.2.4" - prop-types "^15.8.1" - prop-types-extra "^1.1.0" - react-transition-group "^4.4.5" - uncontrollable "^7.2.1" - warning "^4.0.3" - react-country-region-selector@^3.6.1: version "3.6.1" resolved "https://registry.npmjs.org/react-country-region-selector/-/react-country-region-selector-3.6.1.tgz" @@ -6572,7 +6504,7 @@ react-loader-spinner@^5.3.4: styled-components "^5.3.5" styled-tools "^1.7.2" -react-transition-group@^4.4.2, react-transition-group@^4.4.5: +react-transition-group@^4.4.2: version "4.4.5" resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz" integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== @@ -6635,11 +6567,6 @@ regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7: resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" @@ -7511,11 +7438,6 @@ uncontrollable@^7.2.1: invariant "^2.2.4" react-lifecycles-compat "^3.0.4" -uncontrollable@^8.0.1: - version "8.0.4" - resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-8.0.4.tgz#a0a8307f638795162fafd0550f4a1efa0f8c5eb6" - integrity sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ== - unique-string@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" From 8d88844af516307bdaf1b9b1936d6bced3de88f4 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Mon, 27 Nov 2023 16:15:10 -0600 Subject: [PATCH 06/36] rename CookiePreferences to CookiePreferencesModal --- pages/_app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/_app.js b/pages/_app.js index ea3ecd0..581256e 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -1,4 +1,4 @@ -import { CookiePreferences, Footer, Header } from '@scientist-softserv/webstore-component-library' +import { CookiePreferencesModal, Footer, Header } from '@scientist-softserv/webstore-component-library' import { SWRConfig } from 'swr' import { useRouter } from 'next/router' import { @@ -32,7 +32,7 @@ const WebStore = ({ Component }) => { return ( <> - <CookiePreferences + <CookiePreferencesModal cookieConsent={cookieConsent} disableCookies={disableCookies} enableCookies={enableCookies} From b5272b51d9fd249d2a8205130298b7955abe56d7 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Mon, 27 Nov 2023 16:16:04 -0600 Subject: [PATCH 07/36] use CookiePreferencesCheck on the cookie policy page --- pages/legal-notices/cookie-policy.js | 11 ++++++++++- utils/helpers.js | 5 ++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/pages/legal-notices/cookie-policy.js b/pages/legal-notices/cookie-policy.js index 3fb9691..698c681 100644 --- a/pages/legal-notices/cookie-policy.js +++ b/pages/legal-notices/cookie-policy.js @@ -1,9 +1,18 @@ -import { Title } from '@scientist-softserv/webstore-component-library' +import { CookiePreferencesCheck, Title } from '@scientist-softserv/webstore-component-library' +import { cookieConsent, disableCookies, enableCookies } from '../../utils' const CookiePolicy = () => ( <div className='container'> <Title title='Cookie Policy' style={{ marginTop: '1rem' }} /> {cookiePolicy} + <h2>Cookie Preferences</h2> + <p> Please provide your consent below to our use of non-essential cookies on our site. + You may withdraw your consent at any point by following the instructions above or by returning to this page and changing your selection.</p> + <CookiePreferencesCheck + cookieConsent={cookieConsent} + disableCookies={disableCookies} + enableCookies={enableCookies} + /> </div> ) diff --git a/utils/helpers.js b/utils/helpers.js index 767215e..4ee4cc3 100644 --- a/utils/helpers.js +++ b/utils/helpers.js @@ -1,5 +1,8 @@ import { - deleteCookie, getCookie, getCookies, setCookie, + deleteCookie, + getCookie, + getCookies, + setCookie, } from 'cookies-next' // once the feature is ready, uncomment the line below and delete the line below it. From 1c38f49bca74ce80fa11dd8d2adcb8dfe48b8c94 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Mon, 27 Nov 2023 17:25:58 -0600 Subject: [PATCH 08/36] move cookies related functions move them out of helpers.js and into cookies.js --- utils/cookies.js | 22 ++++++++++++++++++++++ utils/helpers.js | 23 ----------------------- utils/index.js | 1 + 3 files changed, 23 insertions(+), 23 deletions(-) create mode 100644 utils/cookies.js diff --git a/utils/cookies.js b/utils/cookies.js new file mode 100644 index 0000000..6c1d84d --- /dev/null +++ b/utils/cookies.js @@ -0,0 +1,22 @@ +import { + deleteCookie, + getCookie, + getCookies, + setCookie, +} from 'cookies-next' + +// once the feature is ready, uncomment the line below +// export const cookieConsent = getCookie('dl_cookie_consent') + +export const enableCookies = () => { + setCookie('_dl_cookie_consent', 'true', { path: '/' }) + setCookie('_cookies_updated_at', new Date(), { path: '/' }) + // set other cookies +} + +export const disableCookies = () => { + // will account for this in a future pr + // Object.keys(getCookies()).forEach(cookie => deleteCookie(cookie)) + setCookie('_dl_cookie_consent', 'false', { path: '/' }) + setCookie('_cookies_updated_at', new Date(), { path: '/' }) +} diff --git a/utils/helpers.js b/utils/helpers.js index 4ee4cc3..0e806aa 100644 --- a/utils/helpers.js +++ b/utils/helpers.js @@ -1,26 +1,3 @@ -import { - deleteCookie, - getCookie, - getCookies, - setCookie, -} from 'cookies-next' - -// once the feature is ready, uncomment the line below and delete the line below it. -// export const cookieConsent = getCookie('dl_cookie_consent') -export const cookieConsent = 'false' -export const cookies = getCookies() - -export const enableCookies = () => { - setCookie('dl_cookie_consent', 'true', { path: '/' }) - // set other cookies -} - -export const disableCookies = () => { - // will account for this in a future pr - // Object.keys(getCookies()).forEach(cookie => deleteCookie(cookie)) - setCookie('dl_cookie_consent', 'false', { path: '/' }) -} - export const addDays = (date, days) => { date.setDate(date.getDate() + days) return date diff --git a/utils/index.js b/utils/index.js index d16283f..a720d0f 100644 --- a/utils/index.js +++ b/utils/index.js @@ -1,5 +1,6 @@ // Export all sibling files and folders export * from './api' export * from './constants' +export * from './cookies' export * from './helpers' export * from './theme' From 3cb24846a5ecb2b4ca437c84aa900a59bf643c6c Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Tue, 28 Nov 2023 10:23:42 -0600 Subject: [PATCH 09/36] also show the modal if it's been a year since consent was requested. --- pages/_app.js | 4 ++-- utils/cookies.js | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/pages/_app.js b/pages/_app.js index 581256e..c576416 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -13,9 +13,9 @@ import { FOOTER_SOCIALS, LOGO, NAVIGATION_LINKS, - cookieConsent, disableCookies, enableCookies, + getCookieConsent, fetcher, headerAndFooterLinkColors, } from '../utils' @@ -33,9 +33,9 @@ const WebStore = ({ Component }) => { return ( <> <CookiePreferencesModal - cookieConsent={cookieConsent} disableCookies={disableCookies} enableCookies={enableCookies} + getCookieConsent={getCookieConsent()} /> <Header auth={{ diff --git a/utils/cookies.js b/utils/cookies.js index 6c1d84d..b4a12bf 100644 --- a/utils/cookies.js +++ b/utils/cookies.js @@ -20,3 +20,12 @@ export const disableCookies = () => { setCookie('_dl_cookie_consent', 'false', { path: '/' }) setCookie('_cookies_updated_at', new Date(), { path: '/' }) } + +export const getCookieConsent = () => { + const updatedAt = getCookie('_cookies_updated_at') + const oneYearInMilliseconds = 1000*60*60*24*365 + const oneYearLapsed = (new Date() - updatedAt) >= oneYearInMilliseconds + + if ((cookieConsent === undefined) || oneYearLapsed) return true + return false +} From 45be3102a120a7c830f850e7d79e518f50d1ecdb Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Tue, 28 Nov 2023 11:47:02 -0600 Subject: [PATCH 10/36] set `_dl_cookie_consent` as an object this allows us to set the value, expiration date and domain on the same cookie. --- pages/legal-notices/cookie-policy.js | 4 ++-- utils/cookies.js | 23 ++++++++++++++--------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/pages/legal-notices/cookie-policy.js b/pages/legal-notices/cookie-policy.js index 698c681..eb80375 100644 --- a/pages/legal-notices/cookie-policy.js +++ b/pages/legal-notices/cookie-policy.js @@ -1,5 +1,5 @@ import { CookiePreferencesCheck, Title } from '@scientist-softserv/webstore-component-library' -import { cookieConsent, disableCookies, enableCookies } from '../../utils' +import { cookieConsentValue, disableCookies, enableCookies } from '../../utils' const CookiePolicy = () => ( <div className='container'> @@ -9,7 +9,7 @@ const CookiePolicy = () => ( <p> Please provide your consent below to our use of non-essential cookies on our site. You may withdraw your consent at any point by following the instructions above or by returning to this page and changing your selection.</p> <CookiePreferencesCheck - cookieConsent={cookieConsent} + cookieConsentValue={cookieConsentValue} disableCookies={disableCookies} enableCookies={enableCookies} /> diff --git a/utils/cookies.js b/utils/cookies.js index b4a12bf..4d99495 100644 --- a/utils/cookies.js +++ b/utils/cookies.js @@ -2,30 +2,35 @@ import { deleteCookie, getCookie, getCookies, + hasCookie, setCookie, } from 'cookies-next' // once the feature is ready, uncomment the line below -// export const cookieConsent = getCookie('dl_cookie_consent') +const cookieConsentGiven = hasCookie('_dl_cookie_consent') +export const cookieConsentValue = cookieConsentGiven ? JSON.parse(getCookie('_dl_cookie_consent')).value : true +const cookieConsent = { + expires: new Date().setFullYear(new Date().getFullYear() + 1), // 1 year from now in milliseconds + domain: process.env.NEXT_PUBLIC_PROVIDER_NAME, +} export const enableCookies = () => { - setCookie('_dl_cookie_consent', 'true', { path: '/' }) - setCookie('_cookies_updated_at', new Date(), { path: '/' }) + const cookie = JSON.stringify({ value: true, ...cookieConsent }) + setCookie('_dl_cookie_consent', cookie, { path: '/' }) // set other cookies } export const disableCookies = () => { + const cookie = JSON.stringify({ value: false, ...cookieConsent }) // will account for this in a future pr // Object.keys(getCookies()).forEach(cookie => deleteCookie(cookie)) - setCookie('_dl_cookie_consent', 'false', { path: '/' }) - setCookie('_cookies_updated_at', new Date(), { path: '/' }) + + setCookie('_dl_cookie_consent', cookie, { path: '/' }) } export const getCookieConsent = () => { - const updatedAt = getCookie('_cookies_updated_at') - const oneYearInMilliseconds = 1000*60*60*24*365 - const oneYearLapsed = (new Date() - updatedAt) >= oneYearInMilliseconds + const cookieExpiration = cookieConsentGiven ? JSON.parse(getCookie('_dl_cookie_consent')).expires : undefined - if ((cookieConsent === undefined) || oneYearLapsed) return true + if ((!cookieConsentGiven) || (new Date() > cookieExpiration)) return true return false } From b599b37543cfbfa47a04fa067b2250d788dc63cc Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Wed, 29 Nov 2023 12:15:36 -0600 Subject: [PATCH 11/36] fix the build make eslint changes add react-bootstrap back --- package.json | 1 + pages/legal-notices/cookie-policy.js | 3 +- yarn.lock | 82 +++++++++++++++++++++++++++- 3 files changed, 83 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index d064393..5ad2161 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "next": "12.3.1", "next-auth": "^4.20.1", "react": "18.2.0", + "react-bootstrap": "^2.9.1", "react-dom": "18.2.0", "sass": "^1.56.1", "swr": "^1.3.0" diff --git a/pages/legal-notices/cookie-policy.js b/pages/legal-notices/cookie-policy.js index eb80375..44763c1 100644 --- a/pages/legal-notices/cookie-policy.js +++ b/pages/legal-notices/cookie-policy.js @@ -7,7 +7,8 @@ const CookiePolicy = () => ( {cookiePolicy} <h2>Cookie Preferences</h2> <p> Please provide your consent below to our use of non-essential cookies on our site. - You may withdraw your consent at any point by following the instructions above or by returning to this page and changing your selection.</p> + You may withdraw your consent at any point by following the instructions above or by + returning to this page and changing your selection.</p> <CookiePreferencesCheck cookieConsentValue={cookieConsentValue} disableCookies={disableCookies} diff --git a/yarn.lock b/yarn.lock index cf681e9..ffb2c17 100644 --- a/yarn.lock +++ b/yarn.lock @@ -279,6 +279,13 @@ dependencies: regenerator-runtime "^0.13.11" +"@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.5.tgz#11edb98f8aeec529b82b211028177679144242db" + integrity sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.20.7", "@babel/template@^7.3.3": version "7.20.7" resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" @@ -934,6 +941,13 @@ dependencies: "@swc/helpers" "^0.4.14" +"@react-aria/ssr@^3.5.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.0.tgz#457310129e1447b09d2f4aa2fdd62ab0e668d88c" + integrity sha512-Bz6BqP6ZorCme9tSWHZVmmY+s7AU8l6Vl2NUYmBzezD//fVHHfFo4lFBn5tBuAaJEm3AuCLaJQ6H2qhxNSb7zg== + dependencies: + "@swc/helpers" "^0.5.0" + "@restart/hooks@^0.4.6", "@restart/hooks@^0.4.7": version "0.4.9" resolved "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.9.tgz" @@ -941,6 +955,13 @@ dependencies: dequal "^2.0.2" +"@restart/hooks@^0.4.9": + version "0.4.11" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.11.tgz#8876ccce1d4ad2a4b793a31689d63df36cf56088" + integrity sha512-Ft/ncTULZN6ldGHiF/k5qt72O8JyRMOeg0tApvCni8LkoiEahO+z3TNxfXIVGy890YtWVDvJAl662dVJSJXvMw== + dependencies: + dequal "^2.0.3" + "@restart/ui@^1.4.1": version "1.6.1" resolved "https://registry.npmjs.org/@restart/ui/-/ui-1.6.1.tgz" @@ -956,6 +977,21 @@ uncontrollable "^7.2.1" warning "^4.0.3" +"@restart/ui@^1.6.6": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.6.6.tgz#3481e2eaf15d7cae55bb2f518624e10d19c75800" + integrity sha512-eC3puKuWE1SRYbojWHXnvCNHGgf3uzHCb6JOhnF4OXPibOIPEkR1sqDSkL643ydigxwh+ruCa1CmYHlzk7ikKA== + dependencies: + "@babel/runtime" "^7.21.0" + "@popperjs/core" "^2.11.6" + "@react-aria/ssr" "^3.5.0" + "@restart/hooks" "^0.4.9" + "@types/warning" "^3.0.0" + dequal "^2.0.3" + dom-helpers "^5.2.0" + uncontrollable "^8.0.1" + warning "^4.0.3" + "@rjsf/core@^5.0.0-beta.17": version "5.0.1" resolved "https://registry.npmjs.org/@rjsf/core/-/core-5.0.1.tgz" @@ -1328,6 +1364,13 @@ dependencies: tslib "^2.4.0" +"@swc/helpers@^0.5.0": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.3.tgz#98c6da1e196f5f08f977658b80d6bd941b5f294f" + integrity sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A== + dependencies: + tslib "^2.4.0" + "@szmarczak/http-timer@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" @@ -1540,6 +1583,13 @@ dependencies: "@types/react" "*" +"@types/react-transition-group@^4.4.6": + version "4.4.9" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.9.tgz#12a1a1b5b8791067198149867b0823fbace31579" + integrity sha512-ZVNmWumUIh5NhH8aMD9CR2hdW0fNuYInlocZHaZ+dgk/1K49j1w/HoAuK1ki+pgscQrOFRTlXeoURtuzEkV3dg== + dependencies: + "@types/react" "*" + "@types/react@*": version "18.0.27" resolved "https://registry.npmjs.org/@types/react/-/react-18.0.27.tgz" @@ -2322,7 +2372,7 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== -classnames@^2.3.1: +classnames@^2.3.1, classnames@^2.3.2: version "2.3.2" resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== @@ -6457,6 +6507,24 @@ react-bootstrap@^2.5.0, react-bootstrap@^2.6.0: uncontrollable "^7.2.1" warning "^4.0.3" +react-bootstrap@^2.9.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.9.1.tgz#c1ab48ae2b2cfe6d5ac957c2042eb36fcafdb1d2" + integrity sha512-ezgmh/ARCYp18LbZEqPp0ppvy+ytCmycDORqc8vXSKYV3cer4VH7OReV8uMOoKXmYzivJTxgzGHalGrHamryHA== + dependencies: + "@babel/runtime" "^7.22.5" + "@restart/hooks" "^0.4.9" + "@restart/ui" "^1.6.6" + "@types/react-transition-group" "^4.4.6" + classnames "^2.3.2" + dom-helpers "^5.2.1" + invariant "^2.2.4" + prop-types "^15.8.1" + prop-types-extra "^1.1.0" + react-transition-group "^4.4.5" + uncontrollable "^7.2.1" + warning "^4.0.3" + react-country-region-selector@^3.6.1: version "3.6.1" resolved "https://registry.npmjs.org/react-country-region-selector/-/react-country-region-selector-3.6.1.tgz" @@ -6504,7 +6572,7 @@ react-loader-spinner@^5.3.4: styled-components "^5.3.5" styled-tools "^1.7.2" -react-transition-group@^4.4.2: +react-transition-group@^4.4.2, react-transition-group@^4.4.5: version "4.4.5" resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz" integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== @@ -6567,6 +6635,11 @@ regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7: resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" @@ -7438,6 +7511,11 @@ uncontrollable@^7.2.1: invariant "^2.2.4" react-lifecycles-compat "^3.0.4" +uncontrollable@^8.0.1: + version "8.0.4" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-8.0.4.tgz#a0a8307f638795162fafd0550f4a1efa0f8c5eb6" + integrity sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ== + unique-string@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" From 5cea42d91f249f7d6d45e1dad2017807edbba3d5 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Wed, 29 Nov 2023 16:13:35 -0600 Subject: [PATCH 12/36] another cookies refactor pass an options object to setCookie instead of setting the value of the cookie as an object. This allows us to set the expiry date of the cookie and not have to manually delete it once expired. it also make some of the code a bit more readable. --- utils/cookies.js | 48 +++++++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/utils/cookies.js b/utils/cookies.js index 4d99495..b2705dd 100644 --- a/utils/cookies.js +++ b/utils/cookies.js @@ -1,36 +1,46 @@ import { deleteCookie, getCookie, - getCookies, hasCookie, setCookie, } from 'cookies-next' -// once the feature is ready, uncomment the line below const cookieConsentGiven = hasCookie('_dl_cookie_consent') -export const cookieConsentValue = cookieConsentGiven ? JSON.parse(getCookie('_dl_cookie_consent')).value : true -const cookieConsent = { - expires: new Date().setFullYear(new Date().getFullYear() + 1), // 1 year from now in milliseconds - domain: process.env.NEXT_PUBLIC_PROVIDER_NAME, + +export const getCookieConsent = () => !cookieConsentGiven + +export const cookieConsentValue = cookieConsentGiven ? getCookie('_dl_cookie_consent') : 'true' + +/** + * setting the maxAge means that the cookie will be "deleted" after the maxAge has passed. + * it can still be found in dev tools, but hasCookie() will return false. + * therefore, we will be prompted in getCookieConsent() to ask for consent again. + */ +const cookieOptions = { + maxAge: 60 * 60 * 24 * 365, // 1 year in seconds + path: '/', + sameSite: 'lax', } export const enableCookies = () => { - const cookie = JSON.stringify({ value: true, ...cookieConsent }) + setCookie('_dl_cookie_consent', 'true', cookieOptions) setCookie('_dl_cookie_consent', cookie, { path: '/' }) // set other cookies } -export const disableCookies = () => { - const cookie = JSON.stringify({ value: false, ...cookieConsent }) - // will account for this in a future pr - // Object.keys(getCookies()).forEach(cookie => deleteCookie(cookie)) +const nonEssentialCookies = [ + '__ga', + '__gid', + '__utma', + '__utmt', + '__utmb', + '__utmc', + '__utmz', + '__utmv', + 'pll_language' +] - setCookie('_dl_cookie_consent', cookie, { path: '/' }) -} - -export const getCookieConsent = () => { - const cookieExpiration = cookieConsentGiven ? JSON.parse(getCookie('_dl_cookie_consent')).expires : undefined - - if ((!cookieConsentGiven) || (new Date() > cookieExpiration)) return true - return false +export const disableCookies = () => { + nonEssentialCookies.forEach(cookie => deleteCookie(cookie)) + setCookie('_dl_cookie_consent', 'false', cookieOptions) } From e66cd8ca5c7d628d055f2734453413fed397e370 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Wed, 29 Nov 2023 16:45:55 -0600 Subject: [PATCH 13/36] cookies are declined by default --- utils/cookies.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/cookies.js b/utils/cookies.js index b2705dd..54f53c3 100644 --- a/utils/cookies.js +++ b/utils/cookies.js @@ -9,7 +9,7 @@ const cookieConsentGiven = hasCookie('_dl_cookie_consent') export const getCookieConsent = () => !cookieConsentGiven -export const cookieConsentValue = cookieConsentGiven ? getCookie('_dl_cookie_consent') : 'true' +export const cookieConsentValue = cookieConsentGiven ? getCookie('_dl_cookie_consent') : 'false' /** * setting the maxAge means that the cookie will be "deleted" after the maxAge has passed. @@ -41,6 +41,6 @@ const nonEssentialCookies = [ ] export const disableCookies = () => { - nonEssentialCookies.forEach(cookie => deleteCookie(cookie)) + // nonEssentialCookies.forEach(cookie => deleteCookie(cookie)) setCookie('_dl_cookie_consent', 'false', cookieOptions) } From ed5de2aaa9c12163d0ba7f2165bb860499b426c3 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Wed, 29 Nov 2023 17:15:21 -0600 Subject: [PATCH 14/36] add bottom margin to cookie check boxes --- pages/legal-notices/cookie-policy.js | 1 + 1 file changed, 1 insertion(+) diff --git a/pages/legal-notices/cookie-policy.js b/pages/legal-notices/cookie-policy.js index 44763c1..617a354 100644 --- a/pages/legal-notices/cookie-policy.js +++ b/pages/legal-notices/cookie-policy.js @@ -14,6 +14,7 @@ const CookiePolicy = () => ( disableCookies={disableCookies} enableCookies={enableCookies} /> + <div className='mb-4'></div> </div> ) From 11a3117319f08b5f9113a1926a8e0f450e795a91 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Wed, 29 Nov 2023 17:16:29 -0600 Subject: [PATCH 15/36] update the wcl to v0.1.19 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5ad2161..03646d1 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@rjsf/core": "^5.0.0-beta.17", "@rjsf/utils": "^5.0.0-beta.17", "@rjsf/validator-ajv8": "^5.0.1", - "@scientist-softserv/webstore-component-library": "^0.1.18", + "@scientist-softserv/webstore-component-library": "^0.1.19", "@sentry/nextjs": "^7.42.0", "axios": "^1.1.3", "bootstrap": "^5.2.3", diff --git a/yarn.lock b/yarn.lock index ffb2c17..ec5de6c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1061,10 +1061,10 @@ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== -"@scientist-softserv/webstore-component-library@^0.1.18": - version "0.1.18" - resolved "https://registry.yarnpkg.com/@scientist-softserv/webstore-component-library/-/webstore-component-library-0.1.18.tgz#cea5284ae747a797a14f600dd394bccf8e7c94c5" - integrity sha512-MYSobOBBIZN4Un8nG9WjtODYCzzWwhZW39L5wj0JRffbT/KFnnbAtFXHHsPw416WtrSAYqaJoTD7A/K+Y+fSeA== +"@scientist-softserv/webstore-component-library@^0.1.19": + version "0.1.19" + resolved "https://registry.yarnpkg.com/@scientist-softserv/webstore-component-library/-/webstore-component-library-0.1.19.tgz#3cec0f9a35a750739153bdf40f62101903965319" + integrity sha512-ZCwrUXIw9D+opFWrRC0yChayoqGbvDKos+6ZZ8utQovwJbcdfQvLc8T4bItteN6ssrAHJn2tIrJDFfQxD3f2xg== dependencies: "@fortawesome/fontawesome-svg-core" "^6.2.1" "@fortawesome/free-regular-svg-icons" "^6.2.1" From 061545d5ca4d943c65ad99165438cfa2a5755577 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Wed, 29 Nov 2023 17:17:14 -0600 Subject: [PATCH 16/36] REMOVE LATER: for testing on staging --- pages/_app.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pages/_app.js b/pages/_app.js index c576416..bcf2860 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -20,10 +20,13 @@ import { headerAndFooterLinkColors, } from '../utils' import '../utils/theme/globals.scss' +import { getCookies } from 'cookies-next' const WebStore = ({ Component }) => { const { data: session } = useSession() const router = useRouter() + const cookies = getCookies() + console.log('APP.JS >>', { cookies }) const signOutUser = () => { signOut() From 5bed6edbc2d0ecbe21b3e8c78509041c5c69dad4 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Fri, 1 Dec 2023 16:04:52 -0600 Subject: [PATCH 17/36] update legal notice index page styling --- pages/legal-notices/index.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/pages/legal-notices/index.js b/pages/legal-notices/index.js index dc94df8..61771da 100644 --- a/pages/legal-notices/index.js +++ b/pages/legal-notices/index.js @@ -1,10 +1,21 @@ -import { LinkGroup, Title } from '@scientist-softserv/webstore-component-library' +import { Link, Title } from '@scientist-softserv/webstore-component-library' import { LEGAL_NOTICES } from '../../utils' const LegalNotices = () => ( <div className='container'> <Title title='Legal Notices' style={{ marginTop: '1rem' }} /> - <LinkGroup links={LEGAL_NOTICES} /> + {LEGAL_NOTICES.map(({ name, url }) => ( + <Link + label={name} + href={url} + style={{ + borderBottom: '1px solid', + marginBottom: '10px', + display: 'block', + paddingBottom: '5px' + }} + /> + ))} </div> ) From 3ac765e585e42b96575d1d95ebb98639194a9b98 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Fri, 1 Dec 2023 16:29:52 -0600 Subject: [PATCH 18/36] ignore cookie handling for now ref: https://assaydepot.slack.com/archives/C05U031L0V9/p1701363833246969 tldr: no rx session cookies are being set, and google analytics isn't enabled. if we want to handle cookies, we need to readdress enableCookies() and disableCookies() --- utils/cookies.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/utils/cookies.js b/utils/cookies.js index 54f53c3..ccfe218 100644 --- a/utils/cookies.js +++ b/utils/cookies.js @@ -5,6 +5,14 @@ import { setCookie, } from 'cookies-next' +/** + * TODO: determine if/how to handle cookies + * ref: https://assaydepot.slack.com/archives/C05U031L0V9/p1701363833246969 + * tldr: no rx session cookies are being set, and google analytics isn't enabled + * + * if we want to handle cookies, we need to readdress enableCookies() and disableCookies() + */ + const cookieConsentGiven = hasCookie('_dl_cookie_consent') export const getCookieConsent = () => !cookieConsentGiven @@ -23,9 +31,8 @@ const cookieOptions = { } export const enableCookies = () => { - setCookie('_dl_cookie_consent', 'true', cookieOptions) - setCookie('_dl_cookie_consent', cookie, { path: '/' }) - // set other cookies + // TODO(alishaevn): check for the presence of non essential (analytics) cookies. if none, enable them. + // setCookie('_dl_cookie_consent', 'true', cookieOptions) } const nonEssentialCookies = [ @@ -42,5 +49,6 @@ const nonEssentialCookies = [ export const disableCookies = () => { // nonEssentialCookies.forEach(cookie => deleteCookie(cookie)) - setCookie('_dl_cookie_consent', 'false', cookieOptions) + // TODO(alishaevn): after deleting the cookies, we need to also disable them + // setCookie('_dl_cookie_consent', 'false', cookieOptions) } From a5f9e7155e021eba8378afe2767747d531debcd6 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Fri, 1 Dec 2023 16:34:59 -0600 Subject: [PATCH 19/36] eslint fix --- pages/legal-notices/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/pages/legal-notices/index.js b/pages/legal-notices/index.js index 61771da..d66c9c4 100644 --- a/pages/legal-notices/index.js +++ b/pages/legal-notices/index.js @@ -6,6 +6,7 @@ const LegalNotices = () => ( <Title title='Legal Notices' style={{ marginTop: '1rem' }} /> {LEGAL_NOTICES.map(({ name, url }) => ( <Link + key={name} label={name} href={url} style={{ From f249382e7abe3f7d6aed9adde4658de354de3154 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Fri, 1 Dec 2023 16:43:32 -0600 Subject: [PATCH 20/36] cleanup --- package.json | 1 - pages/_app.js | 1 - utils/cookies.js | 3 +- yarn.lock | 82 ++---------------------------------------------- 4 files changed, 4 insertions(+), 83 deletions(-) diff --git a/package.json b/package.json index 03646d1..f6f1145 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "next": "12.3.1", "next-auth": "^4.20.1", "react": "18.2.0", - "react-bootstrap": "^2.9.1", "react-dom": "18.2.0", "sass": "^1.56.1", "swr": "^1.3.0" diff --git a/pages/_app.js b/pages/_app.js index bcf2860..309c31e 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -26,7 +26,6 @@ const WebStore = ({ Component }) => { const { data: session } = useSession() const router = useRouter() const cookies = getCookies() - console.log('APP.JS >>', { cookies }) const signOutUser = () => { signOut() diff --git a/utils/cookies.js b/utils/cookies.js index ccfe218..1563465 100644 --- a/utils/cookies.js +++ b/utils/cookies.js @@ -15,7 +15,8 @@ import { const cookieConsentGiven = hasCookie('_dl_cookie_consent') -export const getCookieConsent = () => !cookieConsentGiven +export const getCookieConsent = () => cookieConsentGiven // delete this and uncomment the line below to re-enable cookie consent +// export const getCookieConsent = () => !cookieConsentGiven export const cookieConsentValue = cookieConsentGiven ? getCookie('_dl_cookie_consent') : 'false' diff --git a/yarn.lock b/yarn.lock index ec5de6c..6f7cf53 100644 --- a/yarn.lock +++ b/yarn.lock @@ -279,13 +279,6 @@ dependencies: regenerator-runtime "^0.13.11" -"@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.5.tgz#11edb98f8aeec529b82b211028177679144242db" - integrity sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/template@^7.20.7", "@babel/template@^7.3.3": version "7.20.7" resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" @@ -941,13 +934,6 @@ dependencies: "@swc/helpers" "^0.4.14" -"@react-aria/ssr@^3.5.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.0.tgz#457310129e1447b09d2f4aa2fdd62ab0e668d88c" - integrity sha512-Bz6BqP6ZorCme9tSWHZVmmY+s7AU8l6Vl2NUYmBzezD//fVHHfFo4lFBn5tBuAaJEm3AuCLaJQ6H2qhxNSb7zg== - dependencies: - "@swc/helpers" "^0.5.0" - "@restart/hooks@^0.4.6", "@restart/hooks@^0.4.7": version "0.4.9" resolved "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.9.tgz" @@ -955,13 +941,6 @@ dependencies: dequal "^2.0.2" -"@restart/hooks@^0.4.9": - version "0.4.11" - resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.11.tgz#8876ccce1d4ad2a4b793a31689d63df36cf56088" - integrity sha512-Ft/ncTULZN6ldGHiF/k5qt72O8JyRMOeg0tApvCni8LkoiEahO+z3TNxfXIVGy890YtWVDvJAl662dVJSJXvMw== - dependencies: - dequal "^2.0.3" - "@restart/ui@^1.4.1": version "1.6.1" resolved "https://registry.npmjs.org/@restart/ui/-/ui-1.6.1.tgz" @@ -977,21 +956,6 @@ uncontrollable "^7.2.1" warning "^4.0.3" -"@restart/ui@^1.6.6": - version "1.6.6" - resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.6.6.tgz#3481e2eaf15d7cae55bb2f518624e10d19c75800" - integrity sha512-eC3puKuWE1SRYbojWHXnvCNHGgf3uzHCb6JOhnF4OXPibOIPEkR1sqDSkL643ydigxwh+ruCa1CmYHlzk7ikKA== - dependencies: - "@babel/runtime" "^7.21.0" - "@popperjs/core" "^2.11.6" - "@react-aria/ssr" "^3.5.0" - "@restart/hooks" "^0.4.9" - "@types/warning" "^3.0.0" - dequal "^2.0.3" - dom-helpers "^5.2.0" - uncontrollable "^8.0.1" - warning "^4.0.3" - "@rjsf/core@^5.0.0-beta.17": version "5.0.1" resolved "https://registry.npmjs.org/@rjsf/core/-/core-5.0.1.tgz" @@ -1364,13 +1328,6 @@ dependencies: tslib "^2.4.0" -"@swc/helpers@^0.5.0": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.3.tgz#98c6da1e196f5f08f977658b80d6bd941b5f294f" - integrity sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A== - dependencies: - tslib "^2.4.0" - "@szmarczak/http-timer@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" @@ -1583,13 +1540,6 @@ dependencies: "@types/react" "*" -"@types/react-transition-group@^4.4.6": - version "4.4.9" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.9.tgz#12a1a1b5b8791067198149867b0823fbace31579" - integrity sha512-ZVNmWumUIh5NhH8aMD9CR2hdW0fNuYInlocZHaZ+dgk/1K49j1w/HoAuK1ki+pgscQrOFRTlXeoURtuzEkV3dg== - dependencies: - "@types/react" "*" - "@types/react@*": version "18.0.27" resolved "https://registry.npmjs.org/@types/react/-/react-18.0.27.tgz" @@ -2372,7 +2322,7 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== -classnames@^2.3.1, classnames@^2.3.2: +classnames@^2.3.1: version "2.3.2" resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== @@ -6507,24 +6457,6 @@ react-bootstrap@^2.5.0, react-bootstrap@^2.6.0: uncontrollable "^7.2.1" warning "^4.0.3" -react-bootstrap@^2.9.1: - version "2.9.1" - resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.9.1.tgz#c1ab48ae2b2cfe6d5ac957c2042eb36fcafdb1d2" - integrity sha512-ezgmh/ARCYp18LbZEqPp0ppvy+ytCmycDORqc8vXSKYV3cer4VH7OReV8uMOoKXmYzivJTxgzGHalGrHamryHA== - dependencies: - "@babel/runtime" "^7.22.5" - "@restart/hooks" "^0.4.9" - "@restart/ui" "^1.6.6" - "@types/react-transition-group" "^4.4.6" - classnames "^2.3.2" - dom-helpers "^5.2.1" - invariant "^2.2.4" - prop-types "^15.8.1" - prop-types-extra "^1.1.0" - react-transition-group "^4.4.5" - uncontrollable "^7.2.1" - warning "^4.0.3" - react-country-region-selector@^3.6.1: version "3.6.1" resolved "https://registry.npmjs.org/react-country-region-selector/-/react-country-region-selector-3.6.1.tgz" @@ -6572,7 +6504,7 @@ react-loader-spinner@^5.3.4: styled-components "^5.3.5" styled-tools "^1.7.2" -react-transition-group@^4.4.2, react-transition-group@^4.4.5: +react-transition-group@^4.4.2: version "4.4.5" resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz" integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== @@ -6635,11 +6567,6 @@ regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7: resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" @@ -7511,11 +7438,6 @@ uncontrollable@^7.2.1: invariant "^2.2.4" react-lifecycles-compat "^3.0.4" -uncontrollable@^8.0.1: - version "8.0.4" - resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-8.0.4.tgz#a0a8307f638795162fafd0550f4a1efa0f8c5eb6" - integrity sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ== - unique-string@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" From 4f2b403fe643a3f0319492b3611250f2a7eebcba Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Fri, 1 Dec 2023 16:45:47 -0600 Subject: [PATCH 21/36] forgot to remove these too --- pages/_app.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/pages/_app.js b/pages/_app.js index 309c31e..c576416 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -20,12 +20,10 @@ import { headerAndFooterLinkColors, } from '../utils' import '../utils/theme/globals.scss' -import { getCookies } from 'cookies-next' const WebStore = ({ Component }) => { const { data: session } = useSession() const router = useRouter() - const cookies = getCookies() const signOutUser = () => { signOut() From de09669e7651e68ffd93a9ee8332efcd3073fd84 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Mon, 4 Dec 2023 12:20:50 -0600 Subject: [PATCH 22/36] prefer .env.development to .env.local although NextJS uses `.env.local` (https://nextjs.org/docs/basic-features/environment-variables#default-environment-variables) we are using `.env.development` for consistency with other projects. this also ensures our CICD and docker processes work. --- .env.local.example => .env.development.example | 0 .gitignore | 10 +++++++--- README.md | 8 ++++---- 3 files changed, 11 insertions(+), 7 deletions(-) rename .env.local.example => .env.development.example (100%) diff --git a/.env.local.example b/.env.development.example similarity index 100% rename from .env.local.example rename to .env.development.example diff --git a/.gitignore b/.gitignore index c838e0a..7619944 100644 --- a/.gitignore +++ b/.gitignore @@ -4,12 +4,16 @@ node_modules/ # Next.js build output .next -# Where ENV secrets are stored. refer to the "Note" at the link below for details on the use of this file -# https://nextjs.org/docs/basic-features/environment-variables#default-environment-variables -.env.local +# Where ENV secrets are stored. although NextJS uses `.env.local` +# (https://nextjs.org/docs/basic-features/environment-variables#default-environment-variables), we are using `.env.development` +# for consistency with other projects. this also ensures our CICD and docker processes work. +.env.development # we want the default npmrc but sometimes folks put in the gh tokens, don't commit those .npmrc # Sentry .sentryclirc + +# Emacs +*.~undo-tree~ diff --git a/README.md b/README.md index b624ec8..246423b 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ All API endpoints in this app require some form of authentication. A logged out ##### User Credentials ``` bash -# .env.local +# .env.development NEXTAUTH_SECRET # create this by running `openssl rand -base64 32` in your terminal CLIENT_ID # retrieved from the provider storefront CLIENT_SECRET # retrieved from the provider storefront @@ -104,7 +104,7 @@ curl -X POST -H 'Authorization: Basic THISISAREALLYLONGALPHANUMERICSTRING' -d 'g The curl command will return a JSON object that has an `access_token` property. Store the value of that property as shown below: ``` bash -# .env.local +# .env.development NEXT_PUBLIC_TOKEN ``` @@ -149,14 +149,14 @@ There are 2 types of Cypress tests, e2e & component. If you are creating an e2e test, it will live in the `cypress/e2e` directory. Component tests will need to be created in a directory called `cypress/component ` #### Setup your Cypress env variables -- the Cypress suite requires an environment variable that should be stored in your `.env.local` and not committed to git. +- the Cypress suite requires an environment variable that should be stored in your `.env.development` and not committed to git. - TEST_SESSION_COOKIE= - to get the value for this variable, open your browser to your running app at `localhost:3000`. - inspect the page - click the "Application" tab - click "Cookies" - find the value for `next-auth.session-token` - - copy that value and paste it in the `TEST_SESSION_COOKIE` variable in your .env.local + - copy that value and paste it in the `TEST_SESSION_COOKIE` variable in your .env.development - do not ever commit this value - this value will need to be updated whenever the cookie expires, approximately once per month From 873e107de558632f91e0209447d6d6944d49fe88 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Mon, 4 Dec 2023 12:51:47 -0600 Subject: [PATCH 23/36] update the deployment process we're still using vercel to deploy this project, but this commit adds the setup for github actions to deploy the project to kubernetes. moving eslint from a DevDependency to a Dependency is necessary because eslint is currently part of the build process. --- .github/workflows/build.yml | 100 +- .github/workflows/deploy.yml | 10 +- Dockerfile | 30 +- bin/helm_deploy | 2 +- bin/helm_deploy_local | 33 + charts/webstore/templates/deployment.yaml | 30 +- charts/webstore/values.yaml | 31 +- docker-compose.yaml | 23 + ops/production-deploy.tmpl.yaml | 42 + ops/staging-deploy.tmpl.yaml | 36 +- package.json | 6 +- yarn.lock | 1002 ++++++++++++++++----- 12 files changed, 985 insertions(+), 360 deletions(-) create mode 100755 bin/helm_deploy_local create mode 100644 docker-compose.yaml create mode 100644 ops/production-deploy.tmpl.yaml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cda0141..a8ef715 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,78 +1,24 @@ -# we are running the build in vercel now so we don't need this github action -# commenting this out because this action kept failing on https://github.com/scientist-softserv/webstore/pull/268 -# TODO(alishaevn): figure out the sentry error if we switch from vercel to an in house deploy infrastructure +name: "Build Docker Images" +run-name: Build of ${{ github.ref_name }} by @${{ github.actor }} +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: + inputs: + debug_enabled: + type: boolean + description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' + required: false + default: false -# name: "Build Docker Images" -# run-name: Build of ${{ github.ref_name }} by @${{ github.actor }} -# on: -# push: -# branches: -# - main -# pull_request: -# branches: -# - main -# workflow_dispatch: -# inputs: -# debug_enabled: -# type: boolean -# description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' -# required: false -# default: false - -# env: -# REGISTRY: ghcr.io - -# jobs: -# build: -# runs-on: ubuntu-latest -# permissions: -# contents: read -# packages: write -# steps: -# - id: setup -# name: Setup -# uses: scientist-softserv/actions/setup-env@v0.0.10 -# with: -# tag: ${{ inputs.tag }} -# image_name: ${{ inputs.image_name }} -# token: ${{ secrets.CHECKOUT_TOKEN || secrets.GITHUB_TOKEN }} -# - uses: actions/setup-node@v3 -# with: -# registry-url: 'https://npm.pkg.github.com' -# # Defaults to the user or organization that owns the workflow file -# scope: '@scientist-softserv' -# node-version-file: package.json -# - name: GPR authToken -# run: echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" > $NPM_CONFIG_USERCONFIG -# - name: GPR alias -# run: echo "@scientist-softserv:registry=https://npm.pkg.github.com" >> $NPM_CONFIG_USERCONFIG -# - run: yarn install -# - run: yarn test - -# - name: Login to GitHub Container Registry -# uses: docker/login-action@v2 -# with: -# registry: ${{ env.REGISTRY }} -# username: ${{ github.actor }} -# password: ${{ secrets.GITHUB_TOKEN }} - -# - name: Retag action for Docker image -# id: meta-docker-image -# uses: docker/metadata-action@v4.1.1 -# with: -# images: | -# name=${{ env.REGISTRY }}/${{ env.REPO_LOWER }} -# tags: | -# type=raw,value=latest,enable={{is_default_branch}} - -# - run: cp $NPM_CONFIG_USERCONFIG .npmrc; cat .npmrc - -# - name: Build and push Docker image -# uses: docker/build-push-action@v3 -# with: -# cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_LOWER }}:${{ env.TAG }} -# context: . -# push: true -# tags: | -# ${{ steps.meta-docker-image.outputs.tags }} -# ${{ env.REGISTRY }}/${{ env.REPO_LOWER }}:${{ env.TAG }} +jobs: + build: + uses: scientist-softserv/actions/.github/workflows/build.yaml@v0.0.16 + secrets: inherit + with: + platforms: "linux/amd64" + webTarget: web diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 7e7fbd5..d257910 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,5 +1,8 @@ -# we are running the deploy through vercel now so we don't need this github action -# TODO(alishaevn): fix any potential sentry error's if we switch from vercel to an in house deploy infrastructure +# This webstore instance is currently deployed to: https://webstore-staging.vercel.app +# In order to deploy via github actions instead, please update/confirm the following files: +# - ops/production-deploy.tmpl.yaml +# - ops/staging-deploy.tmpl.yaml +# Next, uncomment the following lines # name: "Deploy" # run-name: Deploy (${{ github.ref_name }} -> ${{ inputs.environment }}) by @${{ github.actor }} @@ -13,6 +16,7 @@ # type: choice # options: # - staging +# - production # debug_enabled: # type: boolean # description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' @@ -21,5 +25,5 @@ # jobs: # deploy: -# uses: scientist-softserv/actions/.github/workflows/deploy.yaml@v0.0.10 +# uses: scientist-softserv/actions/.github/workflows/deploy.yaml@v0.0.16 # secrets: inherit diff --git a/Dockerfile b/Dockerfile index c712785..734b455 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,30 +1,14 @@ -FROM node:18-alpine AS builder - -ENV NODE_ENV=production \ - NEXT_TELEMETRY_DISABLED=1 - -WORKDIR /home/node/app - -ADD . /home/node/app - -# https://github.com/vercel/next.js/discussions/22149#discussioncomment-366180 -RUN yarn install && yarn build && npm prune --omit=dev - -FROM node:18-alpine +FROM node:18-alpine as web ENV NODE_ENV="production" \ NEXT_TELEMETRY_DISABLED=1 WORKDIR /home/node/app +RUN yarn add --dev eslint -# https://javascript.plainenglish.io/reduce-docker-image-size-for-your-next-js-app-bcb65d322222 -# and -# https://nextjs.org/docs/advanced-features/output-file-tracing -COPY --from=builder /home/node/app/package.json /home/node/app/ -COPY --from=builder /home/node/app/yarn.lock /home/node/app/ -COPY --from=builder /home/node/app/next.config.js /home/node/app/ -COPY --from=builder /home/node/app/public /home/node/app/public -COPY --from=builder /home/node/app/.next/standalone /home/node/app/ -COPY --from=builder /home/node/app/.next/static /home/node/app/.next/static +COPY package.json yarn.lock /home/node/app/ +RUN yarn -CMD ["node", "server.js"] \ No newline at end of file +COPY . /home/node/app +RUN yarn build +CMD ["yarn", "start"] diff --git a/bin/helm_deploy b/bin/helm_deploy index a6271bc..8cfd85c 100755 --- a/bin/helm_deploy +++ b/bin/helm_deploy @@ -29,4 +29,4 @@ helm upgrade \ --namespace="$namespace" \ --create-namespace \ "$release_name" \ - ./charts/webstore \ No newline at end of file + ./charts/webstore diff --git a/bin/helm_deploy_local b/bin/helm_deploy_local new file mode 100755 index 0000000..5b3c3e6 --- /dev/null +++ b/bin/helm_deploy_local @@ -0,0 +1,33 @@ +#!/bin/sh + +# This script wraps up helm deployment. It is meant as a clear starting point for +# commandline deployment or CI based deployment. It requires the following ENV vars be set +# +# CHART_VERSION: this is the version of the hyrax chart you want to deploy. default - 0.22.0 +# DEPLOY_IMAGE: this is the build image that runs the rails application. Typically this would run puma or passenger. eg: samvera/hyrax or ghcr.io/samvera/hyku. Defaults to gcrh.io/samvera/hyku +# DEPLOY_TAG: name of of the tag you want to deploy for deploy image. eg: "latest" or "v3.0.1" or "f123asdf1". Defaults to latest +# HELM_EXTRA_ARGS: any additional arguments you'd like passed to helm upgrade directly. can be blank. + +if [ -z "$1" ] || [ -z "$2" ] +then + echo './bin/helm_deploy RELEASE_NAME NAMESPACE' + exit 1 +fi +release_name="${1}" +namespace="${2}" + +HELM_EXTRA_ARGS="${HELM_EXTRA_ARGS}:---values ops/production-deploy.yaml" +DEPLOY_IMAGE="${DEPLOY_IMAGE:-ghcr.io/scientist-softserv/webstore}" +DEPLOY_TAG="${DEPLOY_TAG:-latest}" + +helm upgrade \ + --install \ + --atomic \ + --timeout 15m0s \ + --set image.repository="$DEPLOY_IMAGE" \ + --set image.tag="$DEPLOY_TAG" \ + --values ops/production-deploy.yaml \ + --namespace="$namespace" \ + --create-namespace \ + "$release_name" \ + ./charts/webstore diff --git a/charts/webstore/templates/deployment.yaml b/charts/webstore/templates/deployment.yaml index bb92725..3caf9e0 100644 --- a/charts/webstore/templates/deployment.yaml +++ b/charts/webstore/templates/deployment.yaml @@ -34,33 +34,47 @@ spec: image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" imagePullPolicy: {{ .Values.image.pullPolicy }} env: + - name: CLIENT_SECRET + value: "{{ .Values.clientSecret }}" + - name: CLIENT_ID + value: "{{ .Values.clientId }}" + - name: NEXTAUTH_SECRET + value: "{{ .Values.nextAuthSecret }}" - name: NEXTAUTH_URL value: "{{ .Values.nextAuthUrl }}" - - name: NEXT_PUBLIC_PROVIDER_NAME - value: "{{ .Values.providerName }}" + - name: NEXT_PUBLIC_APP_BASE_URL + value: "{{ .Values.appBaseUrl }}" - name: NEXT_PUBLIC_PROVIDER_ID value: "{{ .Values.providerId }}" + - name: NEXT_PUBLIC_PROVIDER_NAME + value: "{{ .Values.providerName }}" - name: NEXT_PUBLIC_SCIENTIST_API_VERSION value: "{{ .Values.scientistApiVersion }}" - name: NEXT_PUBLIC_TOKEN value: "{{ .Values.nextPublicToken }}" - - name: NEXTAUTH_SECRET - value: "{{ .Values.nextAuthSecret }}" - - name: CLIENT_SECRET - value: "{{ .Values.clientSecret }}" - - name: CLIENT_ID - value: "{{ .Values.clientId }}" + - name: NEXT_PUBLIC_WEBHOOK_URL + value: "{{ .Values.webhookUrl }}" + - name: SENTRY_AUTH_TOKEN + value: "{{ .Values.sentryAuthToken }}" - name: SENTRY_DSN value: "{{ .Values.sentryDsn }}" + - name: SENTRY_ORG + value: "{{ .Values.sentryOrg }}" + - name: SENTRY_PROJECT + value: "{{ .Values.sentryProject }}" + - name: SENTRY_URL + value: "{{ .Values.sentryUrl }}" ports: - name: http containerPort: {{ .Values.service.port }} protocol: TCP livenessProbe: + initialDelaySeconds: 60 httpGet: path: / port: http readinessProbe: + initialDelaySeconds: 60 httpGet: path: / port: http diff --git a/charts/webstore/values.yaml b/charts/webstore/values.yaml index bce62a5..dc26660 100644 --- a/charts/webstore/values.yaml +++ b/charts/webstore/values.yaml @@ -8,16 +8,27 @@ image: repository: ghcr.io/scientist-softserv/webstore pullPolicy: IfNotPresent # Overrides the image tag whose default is the chart appVersion. - tag: "0.0.2" + tag: '0.0.2' +appBaseUrl: '' +clientId: '' +clientSecret: '' +fullnameOverride: '' imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" -apiTokenConfigSecret: "" -nextAuthUrl: "" -providerName: "" -providerId: "" -scientistApiVersion: "" +nameOverride: '' +nextAuthSecret: '' +nextAuthUrl: '' +nextPublicToken: '' +providerId: '' +providerName: '' +replicaCount: '' +scientistApiVersion: '' +sentryAuthToken: '' +sentryDsn: '' +sentryOrg: '' +sentryProject: '' +sentryUrl: '' +webhookUrl: '' serviceAccount: # Specifies whether a service account should be created @@ -26,7 +37,7 @@ serviceAccount: annotations: {} # The name of the service account to use. # If not set and create is true, a name is generated using the fullname template - name: "" + name: '' podAnnotations: {} @@ -47,7 +58,7 @@ service: ingress: enabled: false - className: "" + className: '' annotations: {} # kubernetes.io/ingress.class: nginx # kubernetes.io/tls-acme: "true" diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..823c1e4 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,23 @@ +version: '3.8' + +volumes: + node_modules: +services: + web: + image: ghcr.io/scientist-softserv/webstore:${TAG:-latest} + # command: sleep infinity + build: + context: . + target: web + ports: + - 3000 + env_file: + - .env + - .env.development + environment: + - VIRTUAL_PORT=3000 + - VIRTUAL_HOST=webstore.test + volumes: + - /home/node/app/.next + - .:/home/node/app + - node_modules:/home/node/app/node_modules diff --git a/ops/production-deploy.tmpl.yaml b/ops/production-deploy.tmpl.yaml new file mode 100644 index 0000000..1386c03 --- /dev/null +++ b/ops/production-deploy.tmpl.yaml @@ -0,0 +1,42 @@ +appBaseUrl: 'https://webstore.softserv.cloud' +clientId: $CLIENT_ID +clientSecret: $CLIENT_SECRET +nextAuthSecret: $NEXTAUTH_SECRET +nextAuthUrl: 'https://webstore.softserv.cloud/api/auth' +nextPublicToken: $NEXT_PUBLIC_TOKEN +providerId: '5159' +providerName: 'beachsidebiotech' +replicaCount: 1 +scientistApiVersion: 'v2' +sentryAuthToken: $SENTRY_AUTH_TOKEN +sentryDsn: 'https://8e15464aee1fdfc31f70ed416c6bfdc9@o1008683.ingest.sentry.io/4506236741025792' +sentryOrg: 'scientist-inc' +sentryProject: 'webstore' +sentryUrl: 'https://sentry.io/' +webhookUrl: 'http://ss-mailer/webstore' + +image: + repository: ghcr.io/scientist-softserv/webstore + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + # tag: '0.0.2' + +imagePullSecrets: + - name: github + +ingress: + enabled: true + className: 'nginx' + annotations: { + nginx.ingress.kubernetes.io/proxy-body-size: '0', + cert-manager.io/cluster-issuer: letsencrypt-prod + } + hosts: + - host: webstore.softserv.cloud + paths: + - path: / + pathType: ImplementationSpecific + tls: + - hosts: + - webstore.softserv.cloud + secretName: softservcloud diff --git a/ops/staging-deploy.tmpl.yaml b/ops/staging-deploy.tmpl.yaml index a23a178..8fbcccf 100644 --- a/ops/staging-deploy.tmpl.yaml +++ b/ops/staging-deploy.tmpl.yaml @@ -1,36 +1,42 @@ -apiTokenConfigSecret: "webstore-staging-api-tokens" -nextAuthUrl: "https://webstore-staging.notch8.cloud/api/auth" -providerName: "acme" -providerId: "572" -scientistApiVersion: "v2" -nextPublicToken: $NEXT_PUBLIC_TOKEN -nextAuthSecret: $NEXTAUTH_SECRET -clientSecret: $CLIENT_SECRET +appBaseUrl: 'https://webstore-staging.softserv.cloud' clientId: $CLIENT_ID -sentryDsn: 'https://78ce09ae2f694f0e8981cf5cec6fc2c7@o1008683.ingest.sentry.io/4504810271408128' +clientSecret: $CLIENT_SECRET +nextAuthSecret: $NEXTAUTH_SECRET +nextAuthUrl: 'https://webstore-staging.softserv.cloud/api/auth' +nextPublicToken: $NEXT_PUBLIC_TOKEN +providerId: '5159' +providerName: 'beachsidebiotech' replicaCount: 1 +scientistApiVersion: 'v2' +sentryAuthToken: $SENTRY_AUTH_TOKEN +sentryDsn: 'https://8e15464aee1fdfc31f70ed416c6bfdc9@o1008683.ingest.sentry.io/4506236741025792' +sentryOrg: 'scientist-inc' +sentryProject: 'webstore' +sentryUrl: 'https://sentry.io/' +webhookUrl: 'http://ss-mailer/webstore' image: repository: ghcr.io/scientist-softserv/webstore pullPolicy: IfNotPresent # Overrides the image tag whose default is the chart appVersion. - # tag: "0.0.2" + # tag: '0.0.2' imagePullSecrets: - name: github ingress: enabled: true - className: "nginx" + className: 'nginx' annotations: { - nginx.ingress.kubernetes.io/proxy-body-size: "0", + nginx.ingress.kubernetes.io/proxy-body-size: '0', cert-manager.io/cluster-issuer: letsencrypt-prod } hosts: - - host: webstore-staging.notch8.cloud + - host: webstore-staging.softserv.cloud paths: - path: / + pathType: ImplementationSpecific tls: - hosts: - - webstore-staging.notch8.cloud - secretName: notch8cloud + - webstore-staging.softserv.cloud + secretName: softservcloud diff --git a/package.json b/package.json index f6f1145..24ff1c0 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "scripts": { "dev": "next dev", "build": "next build", - "start": "next start", + "start": "next build && next start", "lint": "next lint --dir pages --dir utils", "cypress": "cypress run", "cypress-gui": "cypress open", @@ -24,6 +24,8 @@ "@sentry/nextjs": "^7.42.0", "axios": "^1.1.3", "bootstrap": "^5.2.3", + "eslint": "^8.54.0", + "eslint-config-next": "^14.0.3", "cookies-next": "^4.0.0", "next": "12.3.1", "next-auth": "^4.20.1", @@ -40,8 +42,6 @@ "cypress-dotenv-flow": "^1.2.2", "dotenv": "^16.0.3", "dotenv-flow": "^3.2.0", - "eslint": "8.25.0", - "eslint-config-next": "12.3.1", "jest": "^29.3.1", "jest-environment-jsdom": "^29.3.1", "release-it": "^15.6.0" diff --git a/yarn.lock b/yarn.lock index 6f7cf53..b7ab42e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + "@adobe/css-tools@^4.0.1": version "4.2.0" resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.2.0.tgz#e1a84fca468f4b337816fcb7f0964beb620ba855" @@ -279,6 +284,13 @@ dependencies: regenerator-runtime "^0.13.11" +"@babel/runtime@^7.23.2": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.5.tgz#11edb98f8aeec529b82b211028177679144242db" + integrity sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.20.7", "@babel/template@^7.3.3": version "7.20.7" resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" @@ -377,14 +389,26 @@ resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== -"@eslint/eslintrc@^1.3.3": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.4.0" + espree "^9.6.0" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -392,6 +416,11 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@8.55.0": + version "8.55.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.55.0.tgz#b721d52060f369aa259cf97392403cb9ce892ec6" + integrity sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA== + "@fortawesome/fontawesome-common-types@6.3.0": version "6.3.0" resolved "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.3.0.tgz" @@ -425,24 +454,24 @@ dependencies: prop-types "^15.8.1" -"@humanwhocodes/config-array@^0.10.5": - version "0.10.7" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.7.tgz#6d53769fd0c222767e6452e8ebda825c22e9f0dc" - integrity sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w== +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" + "@humanwhocodes/object-schema" "^2.0.1" debug "^4.1.1" - minimatch "^3.0.4" + minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== "@iarna/toml@2.2.5": version "2.2.5" @@ -702,10 +731,10 @@ resolved "https://registry.npmjs.org/@next/env/-/env-12.3.1.tgz" integrity sha512-9P9THmRFVKGKt9DYqeC2aKIxm8rlvkK38V1P1sRE7qyoPBIs8l9oo79QoSdPtOWfzkbDAVUqvbQGgTMsb8BtJg== -"@next/eslint-plugin-next@12.3.1": - version "12.3.1" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.1.tgz#b821f27b0f175954d8d18e5d323fce040ecc79a6" - integrity sha512-sw+lTf6r6P0j+g/n9y4qdWWI2syPqZx+uc0+B/fRENqfR3KpSid6MIKqc9gNwGhJASazEQ5b3w8h4cAET213jw== +"@next/eslint-plugin-next@14.0.3": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.3.tgz#f32413be4db69f698538c38fd6f4091a2feb54c6" + integrity sha512-j4K0n+DcmQYCVnSAM+UByTVfIHnYQy2ODozfQP+4RdwtRDfobrIvKq1K4Exb2koJ79HSSa7s6B2SA8T/1YR3RA== dependencies: glob "7.1.7" @@ -787,7 +816,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -1020,10 +1049,10 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@rushstack/eslint-patch@^1.1.3": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" - integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== +"@rushstack/eslint-patch@^1.3.3": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.6.0.tgz#1898e7a7b943680d757417a47fb10f5fcc230b39" + integrity sha512-2/U3GXA6YiPYQDLGwtGlnNgKYBSwCFIHf8Y9LUY5VATHdtbLlU0Y1R3QoBnT0aB4qv/BEiVVsj7LJXoQCgJ2vA== "@scientist-softserv/webstore-component-library@^0.1.19": version "0.1.19" @@ -1619,49 +1648,55 @@ dependencies: "@types/node" "*" -"@typescript-eslint/parser@^5.21.0": - version "5.54.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.54.1.tgz#05761d7f777ef1c37c971d3af6631715099b084c" - integrity sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg== +"@typescript-eslint/parser@^5.4.2 || ^6.0.0": + version "6.13.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.13.2.tgz#390b79cc9a57a5f904d197a201cc4b6bc4f9afb9" + integrity sha512-MUkcC+7Wt/QOGeVlM8aGGJZy1XV5YKjTpq9jK6r6/iLsGXhBVaGP5N0UYvFsu9BFlSpwY9kMretzdBH01rkRXg== dependencies: - "@typescript-eslint/scope-manager" "5.54.1" - "@typescript-eslint/types" "5.54.1" - "@typescript-eslint/typescript-estree" "5.54.1" + "@typescript-eslint/scope-manager" "6.13.2" + "@typescript-eslint/types" "6.13.2" + "@typescript-eslint/typescript-estree" "6.13.2" + "@typescript-eslint/visitor-keys" "6.13.2" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.54.1": - version "5.54.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.54.1.tgz#6d864b4915741c608a58ce9912edf5a02bb58735" - integrity sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg== +"@typescript-eslint/scope-manager@6.13.2": + version "6.13.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.13.2.tgz#5fa4e4adace028dafac212c770640b94e7b61052" + integrity sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA== dependencies: - "@typescript-eslint/types" "5.54.1" - "@typescript-eslint/visitor-keys" "5.54.1" + "@typescript-eslint/types" "6.13.2" + "@typescript-eslint/visitor-keys" "6.13.2" -"@typescript-eslint/types@5.54.1": - version "5.54.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.54.1.tgz#29fbac29a716d0f08c62fe5de70c9b6735de215c" - integrity sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw== +"@typescript-eslint/types@6.13.2": + version "6.13.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.13.2.tgz#c044aac24c2f6cefb8e921e397acad5417dd0ae6" + integrity sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg== -"@typescript-eslint/typescript-estree@5.54.1": - version "5.54.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.1.tgz#df7b6ae05fd8fef724a87afa7e2f57fa4a599be1" - integrity sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg== +"@typescript-eslint/typescript-estree@6.13.2": + version "6.13.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.2.tgz#ae556ee154c1acf025b48d37c3ef95a1d55da258" + integrity sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w== dependencies: - "@typescript-eslint/types" "5.54.1" - "@typescript-eslint/visitor-keys" "5.54.1" + "@typescript-eslint/types" "6.13.2" + "@typescript-eslint/visitor-keys" "6.13.2" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" -"@typescript-eslint/visitor-keys@5.54.1": - version "5.54.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.1.tgz#d7a8a0f7181d6ac748f4d47b2306e0513b98bf8b" - integrity sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg== +"@typescript-eslint/visitor-keys@6.13.2": + version "6.13.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.2.tgz#e0a4a80cf842bb08e6127b903284166ac4a5594c" + integrity sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw== dependencies: - "@typescript-eslint/types" "5.54.1" - eslint-visitor-keys "^3.3.0" + "@typescript-eslint/types" "6.13.2" + eslint-visitor-keys "^3.4.1" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== abab@^2.0.6: version "2.0.6" @@ -1686,11 +1721,16 @@ acorn-walk@^8.0.2, acorn-walk@^8.2.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.1.0, acorn@^8.7.0, acorn@^8.8.0, acorn@^8.8.1: +acorn@^8.1.0, acorn@^8.7.0, acorn@^8.8.1: version "8.8.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +acorn@^8.9.0: + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== + agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -1713,7 +1753,7 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1818,13 +1858,28 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@^5.0.0, aria-query@^5.1.3: +aria-query@^5.0.0: version "5.1.3" resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz" integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== dependencies: deep-equal "^2.0.5" +aria-query@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + array-includes@^3.1.5, array-includes@^3.1.6: version "3.1.6" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" @@ -1836,11 +1891,33 @@ array-includes@^3.1.5, array-includes@^3.1.6: get-intrinsic "^1.1.3" is-string "^1.0.7" +array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-string "^1.0.7" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array.prototype.findlastindex@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" + array.prototype.flat@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" @@ -1851,6 +1928,16 @@ array.prototype.flat@^1.3.1: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" +array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + array.prototype.flatmap@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" @@ -1861,6 +1948,16 @@ array.prototype.flatmap@^1.3.1: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + array.prototype.map@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.5.tgz#6e43c2fee6c0fb5e4806da2dc92eb00970809e55" @@ -1883,6 +1980,19 @@ array.prototype.tosorted@^1.1.1: es-shim-unscopables "^1.0.0" get-intrinsic "^1.1.3" +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + asn1@~0.2.3: version "0.2.6" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" @@ -1895,10 +2005,10 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== +ast-types-flow@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" + integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== ast-types@^0.13.2: version "0.13.4" @@ -1924,6 +2034,13 @@ async@^3.2.0: resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== +asynciterator.prototype@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" + integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== + dependencies: + has-symbols "^1.0.3" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" @@ -1949,10 +2066,10 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -axe-core@^4.6.2: - version "4.6.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece" - integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== +axe-core@=4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" + integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== axios@^1.1.3: version "1.2.3" @@ -1963,12 +2080,12 @@ axios@^1.1.3: form-data "^4.0.0" proxy-from-env "^1.1.0" -axobject-query@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" - integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== +axobject-query@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" + integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== dependencies: - deep-equal "^2.0.5" + dequal "^2.0.3" babel-jest@^29.5.0: version "29.5.0" @@ -2217,6 +2334,15 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -2795,6 +2921,15 @@ defer-to-connect@^2.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" @@ -2808,6 +2943,15 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + degenerator@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-3.0.2.tgz#6a61fcc42a702d6e50ff6023fe17bff435f68235" @@ -2973,6 +3117,14 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +enhanced-resolve@^5.12.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -3031,6 +3183,51 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: unbox-primitive "^1.0.2" which-typed-array "^1.1.9" +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.5" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.13" + es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" @@ -3051,6 +3248,26 @@ es-get-iterator@^1.0.2, es-get-iterator@^1.1.2: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" +es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15: + version "1.0.15" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" + integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== + dependencies: + asynciterator.prototype "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.1" + es-abstract "^1.22.1" + es-set-tostringtag "^2.0.1" + function-bind "^1.1.1" + get-intrinsic "^1.2.1" + globalthis "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + iterator.prototype "^1.1.2" + safe-array-concat "^1.0.1" + es-set-tostringtag@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" @@ -3130,22 +3347,22 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-config-next@12.3.1: - version "12.3.1" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.3.1.tgz#5d4eb0b7903cea81fd0d5106601d3afb0a453ff4" - integrity sha512-EN/xwKPU6jz1G0Qi6Bd/BqMnHLyRAL0VsaQaWA7F3KkjAgZHi4f1uL1JKGWNxdQpHTW/sdGONBd0bzxUka/DJg== +eslint-config-next@^14.0.3: + version "14.0.3" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.0.3.tgz#7a01d23e4ff143ef87b520fab9efc440fa5879f3" + integrity sha512-IKPhpLdpSUyKofmsXUfrvBC49JMUTdeaD8ZIH4v9Vk0sC1X6URTuTJCLtA0Vwuj7V/CQh0oISuSTvNn5//Buew== dependencies: - "@next/eslint-plugin-next" "12.3.1" - "@rushstack/eslint-patch" "^1.1.3" - "@typescript-eslint/parser" "^5.21.0" + "@next/eslint-plugin-next" "14.0.3" + "@rushstack/eslint-patch" "^1.3.3" + "@typescript-eslint/parser" "^5.4.2 || ^6.0.0" eslint-import-resolver-node "^0.3.6" - eslint-import-resolver-typescript "^2.7.1" - eslint-plugin-import "^2.26.0" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "^7.31.7" - eslint-plugin-react-hooks "^4.5.0" + eslint-import-resolver-typescript "^3.5.2" + eslint-plugin-import "^2.28.1" + eslint-plugin-jsx-a11y "^6.7.1" + eslint-plugin-react "^7.33.2" + eslint-plugin-react-hooks "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" -eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7: +eslint-import-resolver-node@^0.3.6: version "0.3.7" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== @@ -3154,16 +3371,27 @@ eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7: is-core-module "^2.11.0" resolve "^1.22.1" -eslint-import-resolver-typescript@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz#a90a4a1c80da8d632df25994c4c5fdcdd02b8751" - integrity sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ== +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-import-resolver-typescript@^3.5.2: + version "3.6.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz#7b983680edd3f1c5bce1a5829ae0bc2d57fe9efa" + integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg== dependencies: debug "^4.3.4" - glob "^7.2.0" + enhanced-resolve "^5.12.0" + eslint-module-utils "^2.7.4" + fast-glob "^3.3.1" + get-tsconfig "^4.5.0" + is-core-module "^2.11.0" is-glob "^4.0.3" - resolve "^1.22.0" - tsconfig-paths "^3.14.1" eslint-module-utils@^2.7.4: version "2.7.4" @@ -3172,63 +3400,73 @@ eslint-module-utils@^2.7.4: dependencies: debug "^3.2.7" -eslint-plugin-import@^2.26.0: - version "2.27.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" - integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== +eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + +eslint-plugin-import@^2.28.1: + version "2.29.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" + integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== + dependencies: + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.7.4" - has "^1.0.3" - is-core-module "^2.11.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.values "^1.1.6" - resolve "^1.22.1" - semver "^6.3.0" - tsconfig-paths "^3.14.1" - -eslint-plugin-jsx-a11y@^6.5.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" - integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== - dependencies: - "@babel/runtime" "^7.20.7" - aria-query "^5.1.3" - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - ast-types-flow "^0.0.7" - axe-core "^4.6.2" - axobject-query "^3.1.1" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" + semver "^6.3.1" + tsconfig-paths "^3.14.2" + +eslint-plugin-jsx-a11y@^6.7.1: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" + integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== + dependencies: + "@babel/runtime" "^7.23.2" + aria-query "^5.3.0" + array-includes "^3.1.7" + array.prototype.flatmap "^1.3.2" + ast-types-flow "^0.0.8" + axe-core "=4.7.0" + axobject-query "^3.2.1" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - has "^1.0.3" - jsx-ast-utils "^3.3.3" - language-tags "=1.0.5" + es-iterator-helpers "^1.0.15" + hasown "^2.0.0" + jsx-ast-utils "^3.3.5" + language-tags "^1.0.9" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - semver "^6.3.0" + object.entries "^1.1.7" + object.fromentries "^2.0.7" -eslint-plugin-react-hooks@^4.5.0: +"eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705": version "4.6.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@^7.31.7: - version "7.32.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" - integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== +eslint-plugin-react@^7.33.2: + version "7.33.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" + integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== dependencies: array-includes "^3.1.6" array.prototype.flatmap "^1.3.1" array.prototype.tosorted "^1.1.1" doctrine "^2.1.0" + es-iterator-helpers "^1.0.12" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" @@ -3238,93 +3476,86 @@ eslint-plugin-react@^7.31.7: object.values "^1.1.6" prop-types "^15.8.1" resolve "^2.0.0-next.4" - semver "^6.3.0" + semver "^6.3.1" string.prototype.matchall "^4.0.8" -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - eslint-visitor-keys@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@8.25.0: - version "8.25.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.25.0.tgz#00eb962f50962165d0c4ee3327708315eaa8058b" - integrity sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A== - dependencies: - "@eslint/eslintrc" "^1.3.3" - "@humanwhocodes/config-array" "^0.10.5" +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.54.0: + version "8.55.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.55.0.tgz#078cb7b847d66f2c254ea1794fa395bf8e7e03f8" + integrity sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.55.0" + "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" - ajv "^6.10.0" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" - glob-parent "^6.0.1" - globals "^13.15.0" - globby "^11.1.0" - grapheme-splitter "^1.0.4" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-sdsl "^4.1.4" + is-path-inside "^3.0.3" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" + optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.1" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: +esquery@^1.4.2: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== @@ -3482,6 +3713,17 @@ fast-glob@^3.2.11, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -3686,6 +3928,11 @@ function-bind@^1.1.1: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + function.prototype.name@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" @@ -3696,7 +3943,17 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functions-have-names@^1.2.2: +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -3729,6 +3986,16 @@ get-intrinsic@^1.2.0: has "^1.0.3" has-symbols "^1.0.3" +get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" @@ -3754,6 +4021,13 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +get-tsconfig@^4.5.0: + version "4.7.2" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" + integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== + dependencies: + resolve-pkg-maps "^1.0.0" + get-uri@3: version "3.0.2" resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" @@ -3802,7 +4076,7 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob-parent@^6.0.1: +glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== @@ -3821,7 +4095,7 @@ glob@7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: +glob@^7.0.0, glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -3864,7 +4138,7 @@ globals@^11.1.0: resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.15.0, globals@^13.19.0: +globals@^13.19.0: version "13.20.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== @@ -3947,10 +4221,15 @@ graceful-fs@4.2.10, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graceful-fs@^4.2.4: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" @@ -4003,6 +4282,13 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -4130,7 +4416,7 @@ immutable@^4.0.0: resolved "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz" integrity sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -4223,6 +4509,15 @@ internal-slot@^1.0.4: has "^1.0.3" side-channel "^1.0.4" +internal-slot@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== + dependencies: + get-intrinsic "^1.2.2" + hasown "^2.0.0" + side-channel "^1.0.4" + interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" @@ -4262,11 +4557,27 @@ is-array-buffer@^3.0.1: get-intrinsic "^1.1.3" is-typed-array "^1.1.10" +is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" @@ -4308,6 +4619,13 @@ is-core-module@^2.11.0, is-core-module@^2.9.0: dependencies: has "^1.0.3" +is-core-module@^2.13.0, is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" @@ -4325,6 +4643,13 @@ is-extglob@^2.1.1: resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -4340,6 +4665,13 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" @@ -4392,7 +4724,7 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-path-inside@^3.0.2: +is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -4488,6 +4820,13 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.9: gopd "^1.0.1" has-tostringtag "^1.0.0" +is-typed-array@^1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -4615,6 +4954,17 @@ iterate-value@^1.0.2: es-get-iterator "^1.0.2" iterate-iterator "^1.0.1" +iterator.prototype@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" + integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== + dependencies: + define-properties "^1.2.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" + jest-changed-files@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e" @@ -4995,11 +5345,6 @@ jose@^4.10.0, jose@^4.11.4: resolved "https://registry.yarnpkg.com/jose/-/jose-4.13.1.tgz#449111bb5ab171db85c03f1bd2cb1647ca06db1c" integrity sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ== -js-sdsl@^4.1.4: - version "4.3.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" - integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" @@ -5156,7 +5501,7 @@ jsprim@^2.0.2: json-schema "0.4.0" verror "1.10.0" -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: +"jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.3.3" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== @@ -5164,6 +5509,16 @@ jsprim@^2.0.2: array-includes "^3.1.5" object.assign "^4.1.3" +jsx-ast-utils@^3.3.5: + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + keyv@^4.5.2: version "4.5.2" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" @@ -5176,17 +5531,17 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -language-subtag-registry@~0.3.2: +language-subtag-registry@^0.3.20: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== -language-tags@=1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== +language-tags@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== dependencies: - language-subtag-registry "~0.3.2" + language-subtag-registry "^0.3.20" latest-version@^7.0.0: version "7.0.0" @@ -5660,7 +6015,7 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -5849,6 +6204,11 @@ object-inspect@^1.12.2, object-inspect@^1.9.0: resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + object-is@^1.1.5: version "1.1.5" resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" @@ -5881,6 +6241,15 @@ object.entries@^1.1.6: define-properties "^1.1.4" es-abstract "^1.20.4" +object.entries@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" + integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + object.fromentries@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" @@ -5890,6 +6259,25 @@ object.fromentries@^2.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +object.groupby@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + object.hasown@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" @@ -5907,6 +6295,15 @@ object.values@^1.1.6: define-properties "^1.1.4" es-abstract "^1.20.4" +object.values@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + oidc-token-hash@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz" @@ -5964,17 +6361,17 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" ora@6.1.2, ora@^6.1.2: version "6.1.2" @@ -6562,11 +6959,28 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +reflect.getprototypeof@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" + integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7: version "0.13.11" resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" @@ -6576,10 +6990,14 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" registry-auth-token@^5.0.1: version "5.0.2" @@ -6671,12 +7089,17 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + resolve.exports@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.1.tgz#cee884cd4e3f355660e501fa3276b27d7ffe5a20" integrity sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw== -resolve@^1.1.6, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1: +resolve@^1.1.6, resolve@^1.20.0, resolve@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -6685,6 +7108,15 @@ resolve@^1.1.6, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" @@ -6765,6 +7197,16 @@ rxjs@^7.5.1, rxjs@^7.5.7: dependencies: tslib "^2.1.0" +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -6826,6 +7268,37 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0, set-function-name@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -7042,6 +7515,15 @@ string.prototype.matchall@^4.0.8: regexp.prototype.flags "^1.4.3" side-channel "^1.0.4" +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string.prototype.trimend@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" @@ -7051,6 +7533,15 @@ string.prototype.trimend@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string.prototype.trimstart@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" @@ -7060,6 +7551,15 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -7113,7 +7613,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -7185,6 +7685,11 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + telejson@^6.0.8: version "6.0.8" resolved "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz" @@ -7299,12 +7804,17 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +ts-api-utils@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" + integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + ts-dedent@^2.0.0, ts-dedent@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz" integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== -tsconfig-paths@^3.14.1: +tsconfig-paths@^3.14.2: version "3.14.2" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== @@ -7319,7 +7829,7 @@ tslib@2.4.0: resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.3: +tslib@^1.10.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -7334,13 +7844,6 @@ tslib@^2.4.0: resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz" integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -7402,6 +7905,36 @@ type-fest@^3.0.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.6.1.tgz#cf8025edeebfd6cf48de73573a5e1423350b9993" integrity sha512-htXWckxlT6U4+ilVgweNliPqlsVSSucbxVexRYllyMVJDtf5rTjv6kF/s+qAd4QSL1BZcnJPEJavYBPQiWuZDA== +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + typed-array-length@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" @@ -7681,6 +8214,24 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + dependencies: + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + which-collection@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz" @@ -7691,6 +8242,17 @@ which-collection@^1.0.1: is-weakmap "^2.0.1" is-weakset "^2.0.1" +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.4" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + which-typed-array@^1.1.9: version "1.1.9" resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" @@ -7729,7 +8291,7 @@ windows-release@^5.0.1: dependencies: execa "^5.1.1" -word-wrap@^1.2.3, word-wrap@~1.2.3: +word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== From db63d967dbe990a11f07aa542160ec4dd62d53b1 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Mon, 4 Dec 2023 14:13:38 -0600 Subject: [PATCH 24/36] intentionally throw an error to test the org sentry auth token --- utils/api/base.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utils/api/base.js b/utils/api/base.js index b16c0ab..8bbef98 100644 --- a/utils/api/base.js +++ b/utils/api/base.js @@ -7,9 +7,10 @@ const defaultHeaders = (token) => ({ Authorization: `Bearer ${token || process.e const api = axios.create({ baseURL }) export const fetcher = (url, token) => { - return api.get(url, { headers: defaultHeaders(token) }) + return api.get(url, { headers: `Bearer 1234` }) .then(res => res.data) .catch(error => { + console.log({ error }) Sentry.captureException(error) }) } From 9b83dc736225480b9aba3633f926aeacaab3bcb4 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Mon, 4 Dec 2023 14:21:00 -0600 Subject: [PATCH 25/36] add Sentry.captureEvent for testing --- utils/api/base.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/utils/api/base.js b/utils/api/base.js index 8bbef98..0f88042 100644 --- a/utils/api/base.js +++ b/utils/api/base.js @@ -12,6 +12,11 @@ export const fetcher = (url, token) => { .catch(error => { console.log({ error }) Sentry.captureException(error) + Sentry.captureEvent({ + message: error, + stacktrace: error.stacktrace, + name: error.name, + }) }) } From afaf8694a9a3ebf66ae5a3026db66095f36a83f0 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Mon, 4 Dec 2023 16:19:09 -0600 Subject: [PATCH 26/36] test throwing the error instead --- utils/api/base.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/utils/api/base.js b/utils/api/base.js index 0f88042..d2628d6 100644 --- a/utils/api/base.js +++ b/utils/api/base.js @@ -11,12 +11,12 @@ export const fetcher = (url, token) => { .then(res => res.data) .catch(error => { console.log({ error }) - Sentry.captureException(error) - Sentry.captureEvent({ - message: error, - stacktrace: error.stacktrace, - name: error.name, - }) + throw Sentry.captureException(error) + // Sentry.captureEvent({ + // message: error, + // stacktrace: error.stacktrace, + // name: error.name, + // }) }) } From 91644aa03ac35e93fdb1c84ba8baee53cf94af36 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Mon, 4 Dec 2023 16:23:47 -0600 Subject: [PATCH 27/36] throw the event instead? --- utils/api/base.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/utils/api/base.js b/utils/api/base.js index d2628d6..8bade21 100644 --- a/utils/api/base.js +++ b/utils/api/base.js @@ -11,12 +11,12 @@ export const fetcher = (url, token) => { .then(res => res.data) .catch(error => { console.log({ error }) - throw Sentry.captureException(error) - // Sentry.captureEvent({ - // message: error, - // stacktrace: error.stacktrace, - // name: error.name, - // }) + // Sentry.captureException(error) + throw Sentry.captureEvent({ + message: error, + stacktrace: error.stacktrace, + name: error.name, + }) }) } From 1e6ac518ffe72a2c47bcc2ab7a0f359c8b902975 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Mon, 4 Dec 2023 16:27:52 -0600 Subject: [PATCH 28/36] new error? --- utils/api/base.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/utils/api/base.js b/utils/api/base.js index 8bade21..03dfe4b 100644 --- a/utils/api/base.js +++ b/utils/api/base.js @@ -11,12 +11,12 @@ export const fetcher = (url, token) => { .then(res => res.data) .catch(error => { console.log({ error }) - // Sentry.captureException(error) - throw Sentry.captureEvent({ - message: error, - stacktrace: error.stacktrace, - name: error.name, - }) + Sentry.captureException(new Error(error)) + // Sentry.captureEvent({ + // message: error, + // stacktrace: error.stacktrace, + // name: error.name, + // }) }) } From f2f02e6ea19e46ddfa24613bedf3b9625235b9d1 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Mon, 4 Dec 2023 17:07:18 -0600 Subject: [PATCH 29/36] testing out more theories... --- next.config.js | 15 +++++++-------- sentry.client.config.js | 2 +- sentry.edge.config.js | 2 +- sentry.server.config.js | 2 +- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/next.config.js b/next.config.js index df3483e..46de15a 100644 --- a/next.config.js +++ b/next.config.js @@ -1,6 +1,6 @@ // This guard clause allows the app to still build in the event another exception handler will be used, // or the sentry project hasn't been set up yet -if (!process.env.SENTRY_DSN && !process.env.NEXT_PUBLIC_SENTRY_DSN) return +if (!process.env.SENTRY_DSN) return // This file sets a custom webpack configuration to use your Next.js app // with Sentry. @@ -8,14 +8,13 @@ if (!process.env.SENTRY_DSN && !process.env.NEXT_PUBLIC_SENTRY_DSN) return // https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/ const { withSentryConfig } = require('@sentry/nextjs') -/** @type {import('next').NextConfig} */ -const moduleExports = { - output: 'standalone', +const nextConfig = { + // output: 'standalone', reactStrictMode: true, swcMinify: true, - eslint: { - dirs: ['pages', 'utils'], // Only run ESLint on the 'pages' and 'utils' directories during production builds - }, + // eslint: { + // dirs: ['pages', 'utils'], // Only run ESLint on the 'pages' and 'utils' directories during production builds + // }, sentry: { // Use `hidden-source-map` rather than `source-map` as the Webpack `devtool` // for client-side builds. (This will be the default starting in @@ -44,6 +43,6 @@ const sentryWebpackPluginOptions = { // Make sure adding Sentry options is the last code to run before exporting, to // ensure that your source maps include changes from all other Webpack plugins module.exports = withSentryConfig( - moduleExports, + nextConfig, sentryWebpackPluginOptions ) diff --git a/sentry.client.config.js b/sentry.client.config.js index 443157f..c288393 100644 --- a/sentry.client.config.js +++ b/sentry.client.config.js @@ -5,7 +5,7 @@ import * as Sentry from '@sentry/nextjs' Sentry.init({ - dsn: process.env.SENTRY_DSN || process.env.NEXT_PUBLIC_SENTRY_DSN, + dsn: process.env.SENTRY_DSN, // Adjust this value in production, or use tracesSampler for greater control // ref: https://develop.sentry.dev/sdk/performance/#sdk-configuration tracesSampleRate: 1.0, diff --git a/sentry.edge.config.js b/sentry.edge.config.js index 7eb9bfc..3833c84 100644 --- a/sentry.edge.config.js +++ b/sentry.edge.config.js @@ -5,7 +5,7 @@ import * as Sentry from '@sentry/nextjs' Sentry.init({ - dsn: process.env.SENTRY_DSN || process.env.NEXT_PUBLIC_SENTRY_DSN, + dsn: process.env.SENTRY_DSN, // Adjust this value in production, or use tracesSampler for greater control // ref: https://develop.sentry.dev/sdk/performance/#sdk-configuration tracesSampleRate: 1.0, diff --git a/sentry.server.config.js b/sentry.server.config.js index 9d5e645..464e093 100644 --- a/sentry.server.config.js +++ b/sentry.server.config.js @@ -5,7 +5,7 @@ import * as Sentry from '@sentry/nextjs' Sentry.init({ - dsn: process.env.SENTRY_DSN || process.env.NEXT_PUBLIC_SENTRY_DSN, + dsn: process.env.SENTRY_DSN, // Adjust this value in production, or use tracesSampler for greater control // ref: https://develop.sentry.dev/sdk/performance/#sdk-configuration tracesSampleRate: 1.0, From d566a9694d50f23cf6618a5e69f5a89534f362b6 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Wed, 6 Dec 2023 15:56:51 -0600 Subject: [PATCH 30/36] reporting errors to sentry turns out that hardcoding the SENTRY_DSN was the necessary change. idk why though. the sentry docs, referenced below, mention using the env variable. https://docs.sentry.io/product/sentry-basics/concepts/dsn-explainer/#what-the-dsn-does --- sentry.client.config.js | 2 +- sentry.edge.config.js | 2 +- sentry.server.config.js | 2 +- utils/api/base.js | 8 +------- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/sentry.client.config.js b/sentry.client.config.js index c288393..2daf1e0 100644 --- a/sentry.client.config.js +++ b/sentry.client.config.js @@ -5,7 +5,7 @@ import * as Sentry from '@sentry/nextjs' Sentry.init({ - dsn: process.env.SENTRY_DSN, + dsn: 'https://78ce09ae2f694f0e8981cf5cec6fc2c7@o1008683.ingest.sentry.io/4504810271408128', // Adjust this value in production, or use tracesSampler for greater control // ref: https://develop.sentry.dev/sdk/performance/#sdk-configuration tracesSampleRate: 1.0, diff --git a/sentry.edge.config.js b/sentry.edge.config.js index 3833c84..fe70ab0 100644 --- a/sentry.edge.config.js +++ b/sentry.edge.config.js @@ -5,7 +5,7 @@ import * as Sentry from '@sentry/nextjs' Sentry.init({ - dsn: process.env.SENTRY_DSN, + dsn: 'https://78ce09ae2f694f0e8981cf5cec6fc2c7@o1008683.ingest.sentry.io/4504810271408128', // Adjust this value in production, or use tracesSampler for greater control // ref: https://develop.sentry.dev/sdk/performance/#sdk-configuration tracesSampleRate: 1.0, diff --git a/sentry.server.config.js b/sentry.server.config.js index 464e093..0b86ab6 100644 --- a/sentry.server.config.js +++ b/sentry.server.config.js @@ -5,7 +5,7 @@ import * as Sentry from '@sentry/nextjs' Sentry.init({ - dsn: process.env.SENTRY_DSN, + dsn: 'https://78ce09ae2f694f0e8981cf5cec6fc2c7@o1008683.ingest.sentry.io/4504810271408128', // Adjust this value in production, or use tracesSampler for greater control // ref: https://develop.sentry.dev/sdk/performance/#sdk-configuration tracesSampleRate: 1.0, diff --git a/utils/api/base.js b/utils/api/base.js index 03dfe4b..b79a565 100644 --- a/utils/api/base.js +++ b/utils/api/base.js @@ -10,13 +10,7 @@ export const fetcher = (url, token) => { return api.get(url, { headers: `Bearer 1234` }) .then(res => res.data) .catch(error => { - console.log({ error }) - Sentry.captureException(new Error(error)) - // Sentry.captureEvent({ - // message: error, - // stacktrace: error.stacktrace, - // name: error.name, - // }) + Sentry.captureException(error) }) } From 70f318a3c7b8e3531e402bd4b7b22f5217dc772c Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Wed, 6 Dec 2023 15:57:34 -0600 Subject: [PATCH 31/36] update .env.development.example list references to how users would determine the values of the sentry variables --- .env.development.example | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.env.development.example b/.env.development.example index feb9850..be458f7 100644 --- a/.env.development.example +++ b/.env.development.example @@ -5,9 +5,8 @@ CLIENT_SECRET= NEXT_PUBLIC_TOKEN= # uncomment the “SENTRY” prefixed variables below if you are using sentry and need to catch errors in local dev -# SENTRY_DSN= -# NEXT_PUBLIC_SENTRY_DSN= +# SENTRY_DSN=ref: https://docs.sentry.io/product/sentry-basics/concepts/dsn-explainer/#where-to-find-your-dsn # SENTRY_URL=https://sentry.io/ -# SENTRY_ORG= -# SENTRY_PROJECT= -# SENTRY_AUTH_TOKEN= +# SENTRY_ORG= ref: https://github.com/getsentry/sentry-webpack-plugin#options (org) +# SENTRY_PROJECT= ref: https://github.com/getsentry/sentry-webpack-plugin#options (project) +# SENTRY_AUTH_TOKEN= ref: https://github.com/getsentry/sentry-webpack-plugin#options (authToken) From aa204243132e9929ff152a76ed1350fce45cf6aa Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Wed, 6 Dec 2023 16:02:05 -0600 Subject: [PATCH 32/36] revert changes made while debugging --- next.config.js | 6 +++--- utils/api/base.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/next.config.js b/next.config.js index 46de15a..7b85540 100644 --- a/next.config.js +++ b/next.config.js @@ -12,9 +12,9 @@ const nextConfig = { // output: 'standalone', reactStrictMode: true, swcMinify: true, - // eslint: { - // dirs: ['pages', 'utils'], // Only run ESLint on the 'pages' and 'utils' directories during production builds - // }, + eslint: { + dirs: ['pages', 'utils'], // Only run ESLint on the 'pages' and 'utils' directories during production builds + }, sentry: { // Use `hidden-source-map` rather than `source-map` as the Webpack `devtool` // for client-side builds. (This will be the default starting in diff --git a/utils/api/base.js b/utils/api/base.js index b79a565..b16c0ab 100644 --- a/utils/api/base.js +++ b/utils/api/base.js @@ -7,7 +7,7 @@ const defaultHeaders = (token) => ({ Authorization: `Bearer ${token || process.e const api = axios.create({ baseURL }) export const fetcher = (url, token) => { - return api.get(url, { headers: `Bearer 1234` }) + return api.get(url, { headers: defaultHeaders(token) }) .then(res => res.data) .catch(error => { Sentry.captureException(error) From 2e1330cdca287eb5bdde60f561177f1cff9130b5 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Wed, 6 Dec 2023 16:03:44 -0600 Subject: [PATCH 33/36] reverting one more --- next.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/next.config.js b/next.config.js index 7b85540..f9f1c01 100644 --- a/next.config.js +++ b/next.config.js @@ -9,7 +9,7 @@ if (!process.env.SENTRY_DSN) return const { withSentryConfig } = require('@sentry/nextjs') const nextConfig = { - // output: 'standalone', + output: 'standalone', reactStrictMode: true, swcMinify: true, eslint: { From d46069a2ee5e4eabff823faf3fbdb4d8cec2413c Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Wed, 6 Dec 2023 17:05:26 -0600 Subject: [PATCH 34/36] update the cookie policy to reflect webstore cookies ref: https://assaydepot.slack.com/archives/C05U031L0V9/p1701809599298789?thread_ts=1701363833.246969&cid=C05U031L0V9 ref: https://github.com/scientist-softserv/webstore/issues/316 --- pages/legal-notices/cookie-policy.js | 72 ++++++---------------------- utils/cookies.js | 26 +++------- 2 files changed, 22 insertions(+), 76 deletions(-) diff --git a/pages/legal-notices/cookie-policy.js b/pages/legal-notices/cookie-policy.js index 617a354..8dfcd50 100644 --- a/pages/legal-notices/cookie-policy.js +++ b/pages/legal-notices/cookie-policy.js @@ -5,7 +5,7 @@ const CookiePolicy = () => ( <div className='container'> <Title title='Cookie Policy' style={{ marginTop: '1rem' }} /> {cookiePolicy} - <h2>Cookie Preferences</h2> + {/* <h2>Cookie Preferences</h2> <p> Please provide your consent below to our use of non-essential cookies on our site. You may withdraw your consent at any point by following the instructions above or by returning to this page and changing your selection.</p> @@ -13,7 +13,7 @@ const CookiePolicy = () => ( cookieConsentValue={cookieConsentValue} disableCookies={disableCookies} enableCookies={enableCookies} - /> + /> */} <div className='mb-4'></div> </div> ) @@ -31,9 +31,9 @@ const cookiePolicy = ( <ul> <li><strong>Strictly necessary cookies.</strong> These are cookies that are required for the operation of our site. They include, for example, cookies that enable you to log into secure areas of our site or make use of services. We do not require your consent to place these cookies. Nevertheless, you may be able to block these cookies yourself on your device/browser, but restricting these cookies is likely to mean that our site will not work as you would expect and certain functionality may be inoperable.</li> <p style={{textDecoration: 'underline'}}><strong>Non-essential cookies</strong></p> - <li><strong>Analytical/performance cookies.</strong> They allow us to recognise and count the number of visitors and to see how visitors move around our site when they are using it. This helps us to improve the way our site works, for example, by ensuring that users are finding what they are looking for easily. We use cookies to compile visitor statistics such as how many people have visited our site, how they reached our site, what type of technology they are using (e.g. Mac or Windows which helps to identify when our site isn't working as it should for particular technologies), how long they spend on the site, what page they look at etc. This helps us to continuously improve our website.</li> + {/* <li><strong>Analytical/performance cookies.</strong> They allow us to recognise and count the number of visitors and to see how visitors move around our site when they are using it. This helps us to improve the way our site works, for example, by ensuring that users are finding what they are looking for easily. We use cookies to compile visitor statistics such as how many people have visited our site, how they reached our site, what type of technology they are using (e.g. Mac or Windows which helps to identify when our site isn't working as it should for particular technologies), how long they spend on the site, what page they look at etc. This helps us to continuously improve our website.</li> <li><strong>Functionality cookies.</strong> These are used to recognise you/your language when you return to our site. This enables us to personalise our content for you and remember your preferences (for example, your choice of language or region).</li> - <li><strong>Targeting cookies.</strong> These cookies record your visit to our site, the pages you have visited and the links you have followed. This information will be used by us and third parties to make our site and the advertising displayed on it more relevant to your interests. We may also share this information with third parties for this purpose but only if you consent to such sharing.</li> + <li><strong>Targeting cookies.</strong> These cookies record your visit to our site, the pages you have visited and the links you have followed. This information will be used by us and third parties to make our site and the advertising displayed on it more relevant to your interests. We may also share this information with third parties for this purpose but only if you consent to such sharing.</li> */} <li><strong>Social Website Cookies.</strong> We have included buttons on our site for certain social media sites such as Facebook, Twitter and Instagram. These cookies are set by the third party social media sites to which they relate.</li> </ul> <p>The privacy implications vary from social media site to social media site and will be dependent on the privacy settings you have chosen on these sites. Please refer to the relevant social media site's privacy and cookies policy for more information.</p> @@ -60,10 +60,10 @@ const cookiePolicy = ( </tr> <tr> <td> - _rx_session + __Secure-next-auth.session-token </td> <td> - End of browser session + 30 days </td> <td> Scientist.com @@ -74,75 +74,33 @@ const cookiePolicy = ( </tr> <tr> <td> - _rx_cookie_consent + __Host-next-auth.csrf-token </td> <td> - 1 year + End of browser session </td> <td> Scientist.com <br /> <br /> - This cookie stores the user's cookie consent status. + This cookie provides cross site request forgery protection on authentication routes. </td> </tr> <tr> <td> - intercom-lou-XXX - </td> - <td> - 1 year + __Secure-next-auth.callback-url </td> <td> - Intercom cookie - <br /> - <br /> - This cookie helps to remember the user between visits and resume chat conversations. - </td> - </tr> - <tr> - <td> - intercom-session-XXX - </td> - <td> - 1 week - </td> - <td> - Intercom cookie - <br /> - <br /> - This cookie enables us to track the user's session, including maintaining continuity in chat conversations. - </td> - </tr> - <tr> - <td> - intercom-id-XXX - </td> - <td> - 1 year - </td> - <td> - Intercom cookie - <br /> - <br /> - This cookie enables us to distinguish users. - </td> - </tr> - <tr> - <td> - NID - </td> - <td> - 6 months + End of browser session </td> <td> - Google + Scientist.com <br /> <br /> - This cookie contains a unique ID that identifies a returning user's device. Used by Google’s reCAPTCHA service to prevent spam. + This cookie allows the user to be redirected back to the application after signing in. </td> </tr> - <tr> + {/* <tr> <td colSpan={3} style={{textDecoration: 'underline'}}> <strong>Non-essential cookies</strong> </td> @@ -273,7 +231,7 @@ const cookiePolicy = ( <br /> This cookie enables us to remember the last language visited. </td> - </tr> + </tr> */} </tbody> </table> <p>Please note that third parties (including, for example, providers of external services like web traffic analysis services) may also use cookies, over which we have no control. These cookies are likely to be analytical/performance cookies or targeting cookies.</p> diff --git a/utils/cookies.js b/utils/cookies.js index 1563465..2fe697d 100644 --- a/utils/cookies.js +++ b/utils/cookies.js @@ -6,17 +6,12 @@ import { } from 'cookies-next' /** - * TODO: determine if/how to handle cookies - * ref: https://assaydepot.slack.com/archives/C05U031L0V9/p1701363833246969 - * tldr: no rx session cookies are being set, and google analytics isn't enabled - * - * if we want to handle cookies, we need to readdress enableCookies() and disableCookies() + * if/when we add analytics, we need to address each TODO below */ const cookieConsentGiven = hasCookie('_dl_cookie_consent') -export const getCookieConsent = () => cookieConsentGiven // delete this and uncomment the line below to re-enable cookie consent -// export const getCookieConsent = () => !cookieConsentGiven +export const getCookieConsent = () => !cookieConsentGiven export const cookieConsentValue = cookieConsentGiven ? getCookie('_dl_cookie_consent') : 'false' @@ -33,23 +28,16 @@ const cookieOptions = { export const enableCookies = () => { // TODO(alishaevn): check for the presence of non essential (analytics) cookies. if none, enable them. - // setCookie('_dl_cookie_consent', 'true', cookieOptions) + setCookie('_dl_cookie_consent', 'true', cookieOptions) } const nonEssentialCookies = [ - '__ga', - '__gid', - '__utma', - '__utmt', - '__utmb', - '__utmc', - '__utmz', - '__utmv', - 'pll_language' + // TODO(alishaevn): create this list + // TODO(alishaevn): add these cookies to pages/legal-notices/cookie-policy.js under "Non-essential cookies" with a description and expiration time frame ] export const disableCookies = () => { - // nonEssentialCookies.forEach(cookie => deleteCookie(cookie)) + nonEssentialCookies.forEach(cookie => deleteCookie(cookie)) // TODO(alishaevn): after deleting the cookies, we need to also disable them - // setCookie('_dl_cookie_consent', 'false', cookieOptions) + setCookie('_dl_cookie_consent', 'false', cookieOptions) } From 5da7d8ca7dd05352698b64a2f2df114cde69fb80 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Wed, 6 Dec 2023 17:18:26 -0600 Subject: [PATCH 35/36] hide CookiePreferencesModal --- pages/_app.js | 4 ++-- utils/cookies.js | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pages/_app.js b/pages/_app.js index f94612b..b9f60e4 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -35,11 +35,11 @@ const WebStore = ({ Component }) => { return ( <> - <CookiePreferencesModal + {/* <CookiePreferencesModal disableCookies={disableCookies} enableCookies={enableCookies} getCookieConsent={getCookieConsent()} - /> + /> */} <Header auth={{ signIn: () => signIn(process.env.NEXT_PUBLIC_PROVIDER_NAME), diff --git a/utils/cookies.js b/utils/cookies.js index 2fe697d..5280bcb 100644 --- a/utils/cookies.js +++ b/utils/cookies.js @@ -6,7 +6,9 @@ import { } from 'cookies-next' /** - * if/when we add analytics, we need to address each TODO below + * if/when we add analytics, we need to address the following TODO's, as well as the TODO's in the code below + * - uncomment CookiePreferencesModal in pages/_app.js + * - uncomment CookiePreferencesCheck, the header and text in pages/legal-notices/cookie-policy.js */ const cookieConsentGiven = hasCookie('_dl_cookie_consent') From ad15d0c51fa2793f25e0adf2b51b0fe1f1ca50c4 Mon Sep 17 00:00:00 2001 From: Alisha Evans <alishaevn2@gmail.com> Date: Thu, 7 Dec 2023 08:57:19 -0600 Subject: [PATCH 36/36] Update the description for the __Secure-next-auth.callback-url cookie --- pages/legal-notices/cookie-policy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/legal-notices/cookie-policy.js b/pages/legal-notices/cookie-policy.js index 8dfcd50..56d72ea 100644 --- a/pages/legal-notices/cookie-policy.js +++ b/pages/legal-notices/cookie-policy.js @@ -97,7 +97,7 @@ const cookiePolicy = ( Scientist.com <br /> <br /> - This cookie allows the user to be redirected back to the application after signing in. + This cookie allows for proper redirection during the sign up/in process. </td> </tr> {/* <tr>