diff --git a/.github/workflows/cd-workflow.yml b/.github/workflows/cd-workflow.yml index 538c84e0..72102772 100644 --- a/.github/workflows/cd-workflow.yml +++ b/.github/workflows/cd-workflow.yml @@ -55,7 +55,7 @@ jobs: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - name: Install project dependencies (via cache) - run: yarn --prefer-offline + run: yarn --frozen-lockfile --prefer-offline --ignore-optional - name: Build application bundle run: yarn build - name: Deploy diff --git a/.github/workflows/lint-workflow.yml b/.github/workflows/lint-workflow.yml index 82bf5ce8..ee887e1d 100644 --- a/.github/workflows/lint-workflow.yml +++ b/.github/workflows/lint-workflow.yml @@ -21,6 +21,6 @@ jobs: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - name: Install project dependencies (via cache) - run: yarn --prefer-offline + run: yarn --frozen-lockfile --prefer-offline --ignore-optional - name: Run ESLint run: npx eslint src --ext .js,.jsx,.ts,.tsx --exit-on-fatal-error diff --git a/.github/workflows/test-workflow.yml b/.github/workflows/test-workflow.yml index 1cac379c..d12d54c5 100644 --- a/.github/workflows/test-workflow.yml +++ b/.github/workflows/test-workflow.yml @@ -31,7 +31,7 @@ jobs: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - name: Install project dependencies (via cache) - run: yarn --prefer-offline + run: yarn --frozen-lockfile --prefer-offline --ignore-optional jest: needs: install @@ -54,7 +54,7 @@ jobs: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - name: Install project dependencies (via cache) - run: yarn --prefer-offline + run: yarn --frozen-lockfile --prefer-offline --ignore-optional - name: Run Jest Tests run: yarn jest @@ -62,7 +62,7 @@ jobs: needs: install runs-on: ubuntu-latest container: - image: cypress/browsers:node-20.5.0-chrome-114.0.5735.133-1-ff-114.0.2-edge-114.0.1823.51-1 + image: cypress/browsers:node-20.14.0-chrome-125.0.6422.141-1-ff-126.0.1-edge-125.0.2535.85-1 options: --user 1001 strategy: fail-fast: false @@ -102,7 +102,7 @@ jobs: # Starts web server for E2E tests - replace with your own server invocation # https://docs.cypress.io/guides/continuous-integration/introduction#Boot-your-server start: yarn start - wait-on: 'http://localhost:3000' # Waits for above + wait-on: 'http://127.0.0.1:3000' # Waits for above browser: chrome # Records to Cypress Cloud # https://docs.cypress.io/guides/cloud/projects#Set-up-a-project-to-record @@ -111,6 +111,7 @@ jobs: spec: cypress/e2e/${{ matrix.e2e }} parallel: false # Don't use Cypress in-built parallelization install: true + install-command: yarn --frozen-lockfile --prefer-offline --ignore-optional cache-key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} env: # For recording and parallelization to work you must set your CYPRESS_RECORD_KEY diff --git a/.tool-versions b/.tool-versions index da05de7b..0751e80c 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,3 +1,3 @@ # MUST match .node-version -nodejs 20.5.1 -yarn 1.22.19 +nodejs 20.14.0 +yarn 1.22.22 diff --git a/README.md b/README.md index 9701f339..12e6421a 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ If you wish to maintain + deploy your own version of PagerDuty Live, we recommen #### Local Development -1. Install [NodeJS v20.5.1](https://nodejs.org/en/blog/release/v20.5.1/) via [`asdf install`](https://github.com/asdf-vm/asdf) / [`nvm`](https://github.com/nvm-sh/nvm) +1. Install [NodeJS v20.14.0](https://nodejs.org/en/blog/release/v20.14.0/) via [`asdf install`](https://github.com/asdf-vm/asdf) / [`nvm`](https://github.com/nvm-sh/nvm) 2. `$ git clone` repo to desired destination and `$ cd pd-live-react` into directory diff --git a/cypress.config.js b/cypress.config.js index 5be05f0c..78b83e79 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -20,7 +20,7 @@ module.exports = defineConfig({ config.env.PD_USER_TOKEN = process.env.VITE_PD_USER_TOKEN; return config; }, - baseUrl: 'http://localhost:3000/pd-live-react', + baseUrl: 'http://127.0.0.1:3000/pd-live-react', specPattern: 'cypress/e2e/**/*.spec.{js,ts,jsx,tsx}', testIsolation: true, }, diff --git a/cypress/e2e/Search/search.spec.js b/cypress/e2e/Search/search.spec.js index 900df9ac..41b63d7e 100644 --- a/cypress/e2e/Search/search.spec.js +++ b/cypress/e2e/Search/search.spec.js @@ -113,4 +113,12 @@ describe('Search Incidents', { failFast: { enabled: true } }, () => { cy.get('#service-filter-icon').realHover(); cy.get('button[aria-label="Clear Filter"]').filter(':visible').click(); }); + + it('Column filtering on Service column for `zzzzzz` returns no incidents and clear filters button', () => { + cy.get('#service-filter-icon').realHover(); + cy.get('input[placeholder="Filter"]').filter(':visible').click().type('zzzzzz'); + cy.get('.empty-incidents-badge').should('be.visible'); + cy.get('#clear-filters-button').filter(':visible').click(); + waitForIncidentTable(); + }); }); diff --git a/cypress/e2e/app.spec.js b/cypress/e2e/app.spec.js index 92063b85..bd41e8a8 100644 --- a/cypress/e2e/app.spec.js +++ b/cypress/e2e/app.spec.js @@ -112,4 +112,14 @@ describe('PagerDuty Live', { failFast: { enabled: true } }, () => { cy.get('iframe[title="TestExtra"]'); // would need to enable cross-domain iframe javascript access to test further }); + + it('Application correctly renders the catastrophe modal', () => { + cy + .window() + .its('store') + .invoke('dispatch', { type: 'CATASTROPHE' }); + + cy.get('header').contains('Catastrophic Error'); + cy.get('p').contains('The application will restart'); + }); }); diff --git a/package.json b/package.json index dbdbee68..1b359cd1 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,19 @@ { "name": "pd-live-react", "homepage": "https://pagerduty.github.io/pd-live-react", - "version": "0.12.2-beta.0", + "version": "0.13.0-beta.0", "private": true, "dependencies": { "@chakra-ui/icons": "^2.1.1", "@chakra-ui/react": "^2.8.0", - "@datadog/browser-rum": "^4.47.0", + "@datadog/browser-rum": "^5.14.0", + "@datadog/datadog-ci": "^2.37.0", "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@fortawesome/fontawesome-svg-core": "^6.4.2", "@fortawesome/free-brands-svg-icons": "^6.4.2", "@fortawesome/free-regular-svg-icons": "^6.5.1", - "@fortawesome/free-solid-svg-icons": "^6.4.2", + "@fortawesome/free-solid-svg-icons": "^6.5.2", "@fortawesome/react-fontawesome": "^0.2.0", "@pagerduty/pdjs": "^2.2.3", "@types/jest": "^29.5.12", @@ -37,16 +38,17 @@ "moment": "^2.29.4", "pretty-print-error": "^1.1.1", "react": "^18", - "react-bootstrap": "^2.9.1", + "react-bootstrap": "^2.10.2", "react-contextmenu": "^2.14.0", "react-datepicker": "^4.21.0", "react-dnd": "^16.0.1", "react-dnd-html5-backend": "^16.0.1", "react-dom": "^18", + "react-error-boundary": "^4.0.13", "react-i18next": "^13.2.0", - "react-icons": "^4.9.0", + "react-icons": "^5.2.1", "react-minimal-pie-chart": "^8.4.0", - "react-redux": "^8.1.2", + "react-redux": "^9.1.2", "react-select": "^5.7.7", "react-table": "^7.8.0", "react-window": "^1.8.8", @@ -61,6 +63,7 @@ "scripts": { "start": "vite", "build": "npx genversion src/config/version.js --semi --es6 && vite build", + "sourcemaps": "datadog-ci sourcemaps upload build --service=pd-live-react --release-version=$(node -e 'console.log(require(__dirname + `/package.json`).version)') --project-path=./ --minified-path-prefix=/pd-live-react/", "genversion": "npx genversion src/config/version.js --semi --es6", "jest": "npx jest", "cypress:open": "npx cypress open --browser chrome --e2e", @@ -99,7 +102,7 @@ "@babel/eslint-parser": "^7.22.10", "@babel/preset-env": "^7.22.10", "@babel/preset-react": "^7.22.5", - "@cypress/react": "^8.0.0", + "@cypress/react": "^8.0.2", "@faker-js/faker": "^8.0.2", "@testing-library/dom": "^9.3.4", "@testing-library/jest-dom": "^6.1.4", @@ -142,12 +145,12 @@ "prettier-eslint-cli": "^8.0.1", "redux-mock-store": "^1.5.4", "redux-saga-test-plan": "^4.0.6", - "sass": "^1.66.1", + "sass": "^1.77.5", "string.prototype.replaceall": "^1.0.6", - "vite": "^4.5.2", + "vite": "^4.5.3", "vite-plugin-environment": "^1.1.3", "vite-plugin-eslint": "^1.8.1", - "vite-plugin-svgr": "^3.2.0", + "vite-plugin-svgr": "^4.2.0", "wait-on": "^7.2.0", "yarn-audit-fix": "^10.0.5" } diff --git a/src/App.jsx b/src/App.jsx index f6f911e4..b2e494c2 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,5 +1,5 @@ import React, { - useEffect, useRef, + useEffect, useMemo, useState, } from 'react'; import { useSelector, useDispatch, @@ -12,12 +12,19 @@ import { HTML5Backend, } from 'react-dnd-html5-backend'; +import { + ErrorBoundary, +} from 'react-error-boundary'; + +import RealUserMonitoring from 'src/config/monitoring'; + import { Box, Flex, } from '@chakra-ui/react'; import moment from 'moment/min/moment-with-locales'; +import CatastropheModal from 'src/components/CatastropheModal/CatastropheModal'; import AuthComponent from 'src/components/Auth/AuthComponent'; import UnauthorizedModalComponent from 'src/components/UnauthorizedModal/UnauthorizedModalComponent'; import DisclaimerModalComponent from 'src/components/DisclaimerModal/DisclaimerModalComponent'; @@ -40,11 +47,12 @@ import { } from 'src/redux/extensions/actions'; import { getIncidentsAsync as getIncidentsAsyncConnected, - // refreshIncidentsAsync as refreshIncidentsAsyncConnected, } from 'src/redux/incidents/actions'; import { - getLogEntriesAsync as getLogEntriesAsyncConnected, - cleanRecentLogEntriesAsync as cleanRecentLogEntriesAsyncConnected, + START_LOG_ENTRIES_POLLING, + STOP_LOG_ENTRIES_POLLING, + START_CLEAN_RECENT_LOG_ENTRIES_POLLING, + STOP_CLEAN_RECENT_LOG_ENTRIES_POLLING, } from 'src/redux/log_entries/actions'; import { getPrioritiesAsync as getPrioritiesAsyncConnected, @@ -56,63 +64,61 @@ import { getResponsePlaysAsync as getResponsePlaysAsyncConnected, } from 'src/redux/response_plays/actions'; import { - checkConnectionStatus as checkConnectionStatusConnected, - updateQueueStats as updateQueueStatsConnected, - checkAbilities as checkAbilitiesConnected, + START_CONNECTION_STATUS_POLLING, + START_ABILITIES_POLLING, + STOP_ABILITIES_POLLING, + START_QUEUE_STATS_POLLING, + START_OAUTH_REFRESH_POLLING, + STOP_OAUTH_REFRESH_POLLING, + CATASTROPHE, } from 'src/redux/connection/actions'; import { startMonitoring as startMonitoringConnected, } from 'src/redux/monitoring/actions'; import { - getLimiterStats, -} from 'src/util/pd-api-wrapper'; - -import { + PD_USER_TOKEN, PD_OAUTH_CLIENT_ID, PD_OAUTH_CLIENT_SECRET, - PD_REQUIRED_ABILITY, - LOG_ENTRIES_POLLING_INTERVAL_SECONDS, - // TODO: Implement log entries clearing - // LOG_ENTRIES_CLEARING_INTERVAL_SECONDS, - DEBUG_DISABLE_POLLING, } from 'src/config/constants'; import 'src/App.scss'; import 'moment/min/locales.min'; const App = () => { - // Verify if session token is present - const token = sessionStorage.getItem('pd_access_token'); - const dispatch = useDispatch(); const startMonitoring = () => dispatch(startMonitoringConnected()); const userAuthorize = () => dispatch(userAuthorizeConnected()); - const checkAbilities = () => dispatch(checkAbilitiesConnected()); - const checkConnectionStatus = () => dispatch(checkConnectionStatusConnected()); - const updateQueueStats = (queueStats) => dispatch(updateQueueStatsConnected(queueStats)); const getExtensionsAsync = () => dispatch(getExtensionsAsyncConnected()); const getPrioritiesAsync = () => dispatch(getPrioritiesAsyncConnected()); const getResponsePlaysAsync = () => dispatch(getResponsePlaysAsyncConnected()); - const getLogEntriesAsync = (since) => dispatch(getLogEntriesAsyncConnected(since)); - const cleanRecentLogEntriesAsync = () => dispatch(cleanRecentLogEntriesAsyncConnected()); const getIncidentsAsync = () => dispatch(getIncidentsAsyncConnected()); + const dispatchCatastrophe = (connectionStatusMessage) => dispatch({ + type: CATASTROPHE, + connectionStatusMessage, + }); + const darkMode = useSelector((state) => state.settings.darkMode); - const abilities = useSelector((state) => state.connection.abilities); - const { - fetchingIncidents, lastFetchDate, - } = useSelector((state) => state.incidents); + const { userAuthorized, userAcceptedDisclaimer, currentUserLocale, } = useSelector( (state) => state.users, ); + const { - fetchingData: fetchingLogEntries, latestLogEntryDate, - } = useSelector( - (state) => state.logEntries, - ); + status: connectionStatus, + connectionStatusMessage, + } = useSelector((state) => state.connection); + const [catastrophe, setCatastrophe] = useState(false); + useEffect(() => { + if (connectionStatus === CATASTROPHE) { + setCatastrophe(true); + } + }, [connectionStatus]); + + const token = useMemo(() => sessionStorage.getItem('pd_access_token'), [userAuthorized]); if (darkMode) { document.body.classList.add('dark-mode'); @@ -123,12 +129,10 @@ const App = () => { userAuthorize(); if (token && userAuthorized) { startMonitoring(); - checkAbilities(); getPrioritiesAsync(); getIncidentsAsync(); getExtensionsAsync(); getResponsePlaysAsync(); - checkConnectionStatus(); } }, [userAuthorized]); @@ -137,86 +141,39 @@ const App = () => { moment.locale(currentUserLocale); }, [currentUserLocale]); - // use these refs in the polling interval to avoid stale values - // without having to add them to the dependency array - const latestLogEntryDateRef = useRef(latestLogEntryDate); - useEffect(() => { - latestLogEntryDateRef.current = latestLogEntryDate; - }, [latestLogEntryDate]); - const fetchingIncidentsRef = useRef(fetchingIncidents); - useEffect(() => { - fetchingIncidentsRef.current = fetchingIncidents; - }, [fetchingIncidents]); - const fetchingLogEntriesRef = useRef(fetchingLogEntries); - useEffect(() => { - fetchingLogEntriesRef.current = fetchingLogEntries; - }, [fetchingLogEntries]); - - // Set up log entry polling - useEffect( - () => { - const pollingInterval = setInterval(() => { - checkConnectionStatus(); - if (userAuthorized && abilities.includes(PD_REQUIRED_ABILITY)) { - if (fetchingLogEntriesRef.current) { - // eslint-disable-next-line no-console - console.warn('skipping log entries fetch because already fetching log entries'); - return; - } - - if (!fetchingIncidentsRef.current && !DEBUG_DISABLE_POLLING) { - // Determine lookback based on last fetch/refresh of incidents - // 2x polling interval is a good lookback if we don't have a last fetch date - let since = new Date(new Date() - 2000 * LOG_ENTRIES_POLLING_INTERVAL_SECONDS); - // If we have a last fetch date, use that - if (lastFetchDate) { - since = new Date(lastFetchDate - 1000); - } - // If we have a latest log entry date and it's newer than last fetch date, use that - if (latestLogEntryDateRef.current && latestLogEntryDateRef.current > since) { - since = new Date(latestLogEntryDateRef.current - 1000); - } - getLogEntriesAsync(since); - } else if (fetchingIncidentsRef.current) { - // eslint-disable-next-line no-console - console.warn('skipping log entries fetch because already fetching incidents'); - } - } - }, LOG_ENTRIES_POLLING_INTERVAL_SECONDS * 1000); - return () => clearInterval(pollingInterval); - }, - // Changes to any of these in the store resets log entries timer - [userAuthorized, fetchingIncidents, lastFetchDate], - ); - - // Setup log entry clearing + // Set up API polling useEffect(() => { - const clearingInterval = setInterval( - () => { - if (userAuthorized) { - cleanRecentLogEntriesAsync(); - } - }, - 60 * 60 * 1000, - ); - return () => clearInterval(clearingInterval); - }, [userAuthorized]); + if (token && userAuthorized && userAcceptedDisclaimer) { + dispatch({ type: START_LOG_ENTRIES_POLLING }); + dispatch({ type: START_CLEAN_RECENT_LOG_ENTRIES_POLLING }); + dispatch({ type: START_ABILITIES_POLLING }); + dispatch({ type: START_OAUTH_REFRESH_POLLING }); + } else { + dispatch({ type: STOP_LOG_ENTRIES_POLLING }); + dispatch({ type: STOP_CLEAN_RECENT_LOG_ENTRIES_POLLING }); + dispatch({ type: STOP_ABILITIES_POLLING }); + dispatch({ type: STOP_OAUTH_REFRESH_POLLING }); + } + }, [userAuthorized, userAcceptedDisclaimer]); - // Setup queue stats update for status beacon tooltip + // Set up connection status polling useEffect(() => { - const queueStateInterval = setInterval(() => { - if (userAuthorized) { - updateQueueStats(getLimiterStats()); - } - }, 2000); - return () => clearInterval(queueStateInterval); - }, [userAuthorized]); + dispatch({ type: START_CONNECTION_STATUS_POLLING }); + dispatch({ type: START_QUEUE_STATS_POLLING }); + }, []); - const headerRef = useRef(null); - const mainRef = useRef(null); - const footerRef = useRef(null); + if (catastrophe) { + return ( + + ); + } - if (!token) { + if ( + !PD_USER_TOKEN + && (typeof token !== 'string' || !token.startsWith('pd')) + ) { return (
@@ -244,29 +201,38 @@ const App = () => { return (
- - - - - - - - - - - - - - - - - - + { + RealUserMonitoring.trackError(details.error); + dispatchCatastrophe(`UI Render error: ${details.error.message}`); + return null; + } + } + > + + + + + + + + + + + + + + + + + + + + + + - - - - +
); }; diff --git a/src/components/Auth/AuthComponent.jsx b/src/components/Auth/AuthComponent.jsx index 038c78be..3a526258 100644 --- a/src/components/Auth/AuthComponent.jsx +++ b/src/components/Auth/AuthComponent.jsx @@ -47,14 +47,25 @@ const AuthComponent = (props) => { useEffect(() => { if (code && codeVerifier && !accessToken) { + // if there were button params on the first load, load the button params and put them back on the URL + const savedButtonsStr = sessionStorage.getItem('pd_buttons'); + const savedButtons = savedButtonsStr ? JSON.parse(savedButtonsStr) : []; + const buttonParams = savedButtons ? `?button=${savedButtons.join('&button=')}` : ''; + exchangeCodeForToken(clientId, clientSecret, redirectURL, codeVerifier, code).then( - (token) => { + (data) => { + const { + access_token: newAccessToken, + refresh_token: newRefreshToken, + expires_in: expiresIn, + } = data; + if (!newAccessToken || !newRefreshToken || !expiresIn) { + window.location.assign(redirectURL + buttonParams); + } sessionStorage.removeItem('code_verifier'); - sessionStorage.setItem('pd_access_token', token); - // if there were button params on the first load, load the button params and put them back on the URL - const savedButtonsStr = sessionStorage.getItem('pd_buttons'); - const savedButtons = savedButtonsStr ? JSON.parse(savedButtonsStr) : []; - const buttonParams = savedButtons ? `?button=${savedButtons.join('&button=')}` : ''; + sessionStorage.setItem('pd_access_token', newAccessToken); + sessionStorage.setItem('pd_refresh_token', newRefreshToken); + sessionStorage.setItem('pd_token_expires_at', new Date().getTime() + (expiresIn * 1000)); window.location.assign(redirectURL + buttonParams); }, ); diff --git a/src/components/CatastropheModal/CatastropheModal.jsx b/src/components/CatastropheModal/CatastropheModal.jsx new file mode 100644 index 00000000..130a9115 --- /dev/null +++ b/src/components/CatastropheModal/CatastropheModal.jsx @@ -0,0 +1,115 @@ +import React, { + useEffect, + useState, + useRef, +} from 'react'; + +import { + useDispatch, +} from 'react-redux'; + +import { + Button, + Code, + Modal, + ModalOverlay, + ModalContent, + ModalHeader, + ModalBody, + Text, +} from '@chakra-ui/react'; + +import { + useTranslation, +} from 'react-i18next'; + +import { + userUnauthorize as userUnauthorizeConnected, +} from 'src/redux/users/actions'; + +import { + stopMonitoring as stopMonitoringConnected, +} from 'src/redux/monitoring/actions'; + +const CatastropheOverlay = ({ + errorMessage, + countdownSeconds = 30, +}) => { + const { + t, + } = useTranslation(); + + const dispatch = useDispatch(); + const userUnauthorize = () => dispatch(userUnauthorizeConnected()); + const stopMonitoring = () => dispatch(stopMonitoringConnected()); + + const [seconds, setSeconds] = useState(countdownSeconds); + const timerIdRef = useRef(null); + + useEffect(() => { + if (seconds > 0) { + timerIdRef.current = setTimeout(() => { + setSeconds(seconds - 1); + }, 1000); + } else { + window.location.reload(true); + } + return () => { + if (timerIdRef.current) { + clearTimeout(timerIdRef.current); + timerIdRef.current = null; + } + }; + }, [seconds]); + + const cancelTimer = () => { + if (timerIdRef.current) { + clearTimeout(timerIdRef.current); + timerIdRef.current = null; + } + }; + + return ( + + + + {t('Catastrophic Error')} + + {t('An unexpected error has occurred:')} + {errorMessage} + + { + timerIdRef.current + ? t('The application will restart in X seconds.', { seconds }) + : t('Restart canceled') + } + + + + + + + ); +}; + +export default CatastropheOverlay; diff --git a/src/components/Common/EscalationPolicySelect.jsx b/src/components/Common/EscalationPolicySelect.jsx index 39a3c869..fb9d6183 100644 --- a/src/components/Common/EscalationPolicySelect.jsx +++ b/src/components/Common/EscalationPolicySelect.jsx @@ -6,6 +6,10 @@ import { useDebouncedCallback, } from 'use-debounce'; +import { + useToast, +} from '@chakra-ui/react'; + import { Select, } from 'chakra-react-select'; @@ -14,6 +18,11 @@ import { useTranslation, } from 'react-i18next'; +import RealUserMonitoring from 'src/config/monitoring'; +import { + AxiosError, +} from 'axios'; + import { throttledPdAxiosRequest, } from 'src/util/pd-api-wrapper'; @@ -29,6 +38,8 @@ const EscalationPolicySelect = ({ t, } = useTranslation(); + const toast = useToast(); + const [selectOptions, setSelectOptions] = useState([]); const [currentInputValue, setCurrentInputValue] = useState(''); const [more, setMore] = useState(false); @@ -36,6 +47,26 @@ const EscalationPolicySelect = ({ const [storedSelectEps, setStoredSelectEps] = useState([]); + const [apiError, setApiError] = useState(null); + + useEffect(() => { + const details = {}; + if (apiError) { + if (apiError instanceof AxiosError) { + details.url = apiError.config.url; + details.method = apiError.config.method; + details.status = apiError.response?.status; + details.data = apiError.response?.data; + } + RealUserMonitoring.trackError(apiError, details); + toast({ + title: t('Error'), + description: apiError.message, + status: 'error', + }); + } + }, [apiError]); + // get the names for the selected epIds useEffect(() => { const epIds = isMulti ? value : [value]; @@ -49,13 +80,21 @@ const EscalationPolicySelect = ({ }, [value]); const requestOptionsPage = useCallback(async (inputValue, offset) => { - const r = await throttledPdAxiosRequest('GET', 'escalation_policies', { - query: inputValue, - offset, - }); - setMore(r.data.more); - const r2 = r.data.escalation_policies.map((ep) => ({ label: ep.name, value: ep.id })); - return r2; + try { + const r = await throttledPdAxiosRequest( + 'GET', + 'escalation_policies', + { query: inputValue, offset }, + null, + { throwErrors: true }, + ); + setMore(r.data.more); + const r2 = r.data.escalation_policies.map((ep) => ({ label: ep.name, value: ep.id })); + return r2; + } catch (e) { + setApiError(e); + return []; + } }, []); const loadOptions = useCallback( diff --git a/src/components/Common/ServiceSelect.jsx b/src/components/Common/ServiceSelect.jsx index 3a8ece93..6c0c4cfa 100644 --- a/src/components/Common/ServiceSelect.jsx +++ b/src/components/Common/ServiceSelect.jsx @@ -6,6 +6,10 @@ import { useDebouncedCallback, } from 'use-debounce'; +import { + useToast, +} from '@chakra-ui/react'; + import { Select, } from 'chakra-react-select'; @@ -14,6 +18,11 @@ import { useTranslation, } from 'react-i18next'; +import RealUserMonitoring from 'src/config/monitoring'; +import { + AxiosError, +} from 'axios'; + import { throttledPdAxiosRequest, } from 'src/util/pd-api-wrapper'; @@ -29,6 +38,8 @@ const ServiceSelect = ({ t, } = useTranslation(); + const toast = useToast(); + const [selectOptions, setSelectOptions] = useState([]); const [currentInputValue, setCurrentInputValue] = useState(''); const [more, setMore] = useState(false); @@ -36,6 +47,26 @@ const ServiceSelect = ({ const [storedSelectServices, setStoredSelectServices] = useState([]); + const [apiError, setApiError] = useState(null); + + useEffect(() => { + const details = {}; + if (apiError) { + if (apiError instanceof AxiosError) { + details.url = apiError.config.url; + details.method = apiError.config.method; + details.status = apiError.response?.status; + details.data = apiError.response?.data; + } + RealUserMonitoring.trackError(apiError, details); + toast({ + title: t('Error'), + description: apiError.message, + status: 'error', + }); + } + }, [apiError]); + // get the user names for the selected serviceIds useEffect(() => { const serviceIds = isMulti ? value : [value]; @@ -49,10 +80,21 @@ const ServiceSelect = ({ }, [value]); const requestOptionsPage = useCallback(async (inputValue, offset) => { - const r = await throttledPdAxiosRequest('GET', 'services', { query: inputValue, offset }); - setMore(r.data.more); - const r2 = r.data.services.map((service) => ({ label: service.name, value: service.id })); - return r2; + try { + const r = await throttledPdAxiosRequest( + 'GET', + 'services', + { query: inputValue, offset }, + null, + { throwErrors: true }, + ); + setMore(r.data.more); + const r2 = r.data.services.map((service) => ({ label: service.name, value: service.id })); + return r2; + } catch (e) { + setApiError(e); + return []; + } }, []); const loadOptions = useCallback( diff --git a/src/components/Common/TeamSelect.jsx b/src/components/Common/TeamSelect.jsx index 070d3850..def18b31 100644 --- a/src/components/Common/TeamSelect.jsx +++ b/src/components/Common/TeamSelect.jsx @@ -6,6 +6,10 @@ import { useDebouncedCallback, } from 'use-debounce'; +import { + useToast, +} from '@chakra-ui/react'; + import { Select, } from 'chakra-react-select'; @@ -14,6 +18,11 @@ import { useTranslation, } from 'react-i18next'; +import RealUserMonitoring from 'src/config/monitoring'; +import { + AxiosError, +} from 'axios'; + import { throttledPdAxiosRequest, } from 'src/util/pd-api-wrapper'; @@ -25,6 +34,8 @@ const TeamSelect = ({ t, } = useTranslation(); + const toast = useToast(); + const [selectOptions, setSelectOptions] = useState([]); const [currentInputValue, setCurrentInputValue] = useState(''); const [more, setMore] = useState(false); @@ -32,6 +43,26 @@ const TeamSelect = ({ const [storedSelectTeams, setStoredSelectTeams] = useState([]); + const [apiError, setApiError] = useState(null); + + useEffect(() => { + const details = {}; + if (apiError) { + if (apiError instanceof AxiosError) { + details.url = apiError.config.url; + details.method = apiError.config.method; + details.status = apiError.response?.status; + details.data = apiError.response?.data; + } + RealUserMonitoring.trackError(apiError, details); + toast({ + title: t('Error'), + description: apiError.message, + status: 'error', + }); + } + }, [apiError]); + // get the names for the selected teamIds useEffect(() => { const teamIds = isMulti ? value : [value]; @@ -45,10 +76,21 @@ const TeamSelect = ({ }, [value]); const requestOptionsPage = useCallback(async (inputValue, offset) => { - const r = await throttledPdAxiosRequest('GET', 'teams', { query: inputValue, offset }); - setMore(r.data.more); - const r2 = r.data.teams.map((team) => ({ label: team.name, value: team.id })); - return r2; + try { + const r = await throttledPdAxiosRequest( + 'GET', + 'teams', + { query: inputValue, offset }, + null, + { throwErrors: true }, + ); + setMore(r.data.more); + const r2 = r.data.teams.map((team) => ({ label: team.name, value: team.id })); + return r2; + } catch (e) { + setApiError(e); + return []; + } }, []); const loadOptions = useCallback( diff --git a/src/components/Common/UserSelect.jsx b/src/components/Common/UserSelect.jsx index 293e486b..8a4e7c9f 100644 --- a/src/components/Common/UserSelect.jsx +++ b/src/components/Common/UserSelect.jsx @@ -10,6 +10,10 @@ import { useDebouncedCallback, } from 'use-debounce'; +import { + useToast, +} from '@chakra-ui/react'; + import { Select, } from 'chakra-react-select'; @@ -18,6 +22,11 @@ import { useTranslation, } from 'react-i18next'; +import RealUserMonitoring from 'src/config/monitoring'; +import { + AxiosError, +} from 'axios'; + import { throttledPdAxiosRequest, } from 'src/util/pd-api-wrapper'; @@ -33,6 +42,8 @@ const UserSelect = ({ t, } = useTranslation(); + const toast = useToast(); + const usersMap = useSelector((state) => state.users.usersMap); const dispatch = useDispatch(); const addUserToUsersMap = (user) => { @@ -46,6 +57,26 @@ const UserSelect = ({ const [storedSelectUsers, setStoredSelectUsers] = useState([]); + const [apiError, setApiError] = useState(null); + + useEffect(() => { + const details = {}; + if (apiError) { + if (apiError instanceof AxiosError) { + details.url = apiError.config.url; + details.method = apiError.config.method; + details.status = apiError.response?.status; + details.data = apiError.response?.data; + } + RealUserMonitoring.trackError(apiError, details); + toast({ + title: t('Error'), + description: apiError.message, + status: 'error', + }); + } + }, [apiError]); + // get the user names for the selected userIds useEffect(() => { const userIds = isMulti ? value : [value]; @@ -63,15 +94,26 @@ const UserSelect = ({ }, [value]); const requestOptionsPage = useCallback(async (inputValue, offset) => { - const r = await throttledPdAxiosRequest('GET', 'users', { query: inputValue, offset }); - setMore(r.data.more); - const r2 = r.data.users.map((user) => { - if (!usersMap[user.id]) { - addUserToUsersMap(user); - } - return { label: user.name, value: user.id }; - }); - return r2; + try { + const r = await throttledPdAxiosRequest( + 'GET', + 'users', + { query: inputValue, offset }, + null, + { throwErrors: true }, + ); + setMore(r.data.more); + const r2 = r.data.users.map((user) => { + if (!usersMap[user.id]) { + addUserToUsersMap(user); + } + return { label: user.name, value: user.id }; + }); + return r2; + } catch (e) { + setApiError(e); + return []; + } }, []); const loadOptions = useCallback( diff --git a/src/components/DetailedStatusOverlay/DetailedStatusOverlay.jsx b/src/components/DetailedStatusOverlay/DetailedStatusOverlay.jsx index 01afead8..aab303a8 100644 --- a/src/components/DetailedStatusOverlay/DetailedStatusOverlay.jsx +++ b/src/components/DetailedStatusOverlay/DetailedStatusOverlay.jsx @@ -7,6 +7,8 @@ import { useSelector, useDispatch, useStore, } from 'react-redux'; +import moment from 'moment/min/moment-with-locales'; + import { Badge, Box, @@ -33,12 +35,20 @@ import { useTranslation, } from 'react-i18next'; +import { + DATE_FORMAT, +} from 'src/config/constants'; + import { getIncidentsAsync as getIncidentsAsyncAction, UPDATE_INCIDENT_ALERTS, UPDATE_INCIDENT_NOTES, } from 'src/redux/incidents/actions'; +import { + OAUTH_REFRESH_REQUESTED, +} from 'src/redux/connection/actions'; + const DetailedStatusOverlay = ({ btnRef, isOpen, onOpen, onClose, }) => { @@ -46,11 +56,7 @@ const DetailedStatusOverlay = ({ const { t, } = useTranslation(); - const { - status: connectionStatus, - error: connectionError, - // errors, - } = useSelector((state) => state.connection); + const { status: incidentStatus, error: incidentError, @@ -59,7 +65,14 @@ const DetailedStatusOverlay = ({ incidentNotes, } = useSelector((state) => state.incidents); const { - status: logEntriesStatus, error: logEntriesError, + // status: logEntriesStatus, error: logEntriesError, + latestLogEntryDate, + pollingStatus: { + polling: logEntriesPolling, + lastPollStarted, + lastPollCompleted, + errors: pollingErrors, + }, } = useSelector( (state) => state.logEntries, ); @@ -95,6 +108,7 @@ const DetailedStatusOverlay = ({ const badgeText = status.split('_').pop(); switch (badgeText) { case 'COMPLETED': + case 'STARTED': badgeProps.colorScheme = 'green'; break; case 'REQUESTED': @@ -102,6 +116,7 @@ const DetailedStatusOverlay = ({ break; case 'FAILED': case 'ERROR': + case 'STOPPED': badgeProps.colorScheme = 'red'; break; default: @@ -126,7 +141,6 @@ const DetailedStatusOverlay = ({ {badgeForStatus(status)} - {/* {error && !(['REQUESTED', 'COMPLETED'].includes(status.split('_').pop())) && ( */} {error && ( {error} @@ -268,13 +282,52 @@ const DetailedStatusOverlay = ({ + + + {t('Live Updates')} + + {statusFor(t('Polling'), logEntriesPolling ? 'STARTED' : 'STOPPED', '')} + + {t('Last Requested')} + : + + + {lastPollStarted ? moment(lastPollStarted.toISOString()).format(DATE_FORMAT) : t('n/a')} + + + {t('Last Completed')} + : + + + {lastPollCompleted ? moment(lastPollCompleted.toISOString()).format(DATE_FORMAT) : t('n/a')} + + + {t('Latest Log Entry')} + : + + + {latestLogEntryDate ? moment(latestLogEntryDate.toISOString()).format(DATE_FORMAT) : t('n/a')} + + {pollingErrors.length > 0 && ( + + + + )} + {t('Status')} - {statusFor(t('Connection'), connectionStatus, connectionError)} {statusFor(t('Incidents'), incidentStatus, incidentError)} - {statusFor(t('Log Entries'), logEntriesStatus, logEntriesError)} {statusFor(t('Extensions'), extensionsStatus, extensionsError)} {statusFor(t('Response Plays'), responsePlaysStatus, responsePlaysError)} @@ -282,6 +335,18 @@ const DetailedStatusOverlay = ({ {t('Debugging Actions')} + + ); + } + return ( diff --git a/src/components/IncidentActions/subcomponents/MergeButton.jsx b/src/components/IncidentActions/subcomponents/MergeButton.jsx index 26621162..36330b63 100644 --- a/src/components/IncidentActions/subcomponents/MergeButton.jsx +++ b/src/components/IncidentActions/subcomponents/MergeButton.jsx @@ -1,4 +1,5 @@ import React, { + // useEffect, useMemo, } from 'react'; @@ -18,6 +19,11 @@ import { useTranslation, } from 'react-i18next'; +import { + updateActionAlertsModal as updateActionAlertsModalConnected, + toggleDisplayActionAlertsModal as toggleDisplayActionAlertsModalConnected, +} from 'src/redux/action_alerts/actions'; + import { toggleDisplayMergeModal as toggleDisplayMergeModalConnected, } from 'src/redux/incident_actions/actions'; @@ -27,10 +33,37 @@ const MergeButton = () => { t, } = useTranslation(); const selectedCount = useSelector((state) => state.incidentTable.selectedCount); + const { + selectedRows, + } = useSelector((state) => state.incidentTable); const dispatch = useDispatch(); + const updateActionAlertsModal = (actionAlertsModalType, actionAlertsModalMessage) => ( + dispatch(updateActionAlertsModalConnected(actionAlertsModalType, actionAlertsModalMessage)) + ); + const toggleDisplayActionAlertsModal = () => dispatch(toggleDisplayActionAlertsModalConnected()); const toggleDisplayMergeModal = () => dispatch(toggleDisplayMergeModalConnected()); + const displayActionModal = (actionAlertsModalType, actionAlertsModalMessage) => { + updateActionAlertsModal(actionAlertsModalType, actionAlertsModalMessage); + toggleDisplayActionAlertsModal(); + }; + const enabled = useMemo(() => selectedCount > 0, [selectedCount]); + const selectedIncidentsTotalAlerts = useMemo(() => { + if (!(selectedRows instanceof Array)) { + return 0; + } + return selectedRows.reduce((acc, incident) => acc + (incident.alert_counts?.all || 0), 0); + }, [selectedRows]); + + const handleClick = () => { + if (selectedIncidentsTotalAlerts > 1000) { + displayActionModal('error', t('Cannot merge incidents containing more than 1000 alerts')); + } else { + toggleDisplayMergeModal(); + } + }; + return ( - diff --git a/src/components/NavigationBar/NavigationBarComponent.jsx b/src/components/NavigationBar/NavigationBarComponent.jsx index 098e780d..f539f6bc 100644 --- a/src/components/NavigationBar/NavigationBarComponent.jsx +++ b/src/components/NavigationBar/NavigationBarComponent.jsx @@ -61,9 +61,7 @@ import { version as PD_APP_VERSION, } from 'src/config/version'; -import { - ReactComponent as Logo, -} from 'src/assets/images/pd_logo_black.svg'; +import Logo from 'src/assets/images/pd_logo_black.svg'; import GlobalSearchComponent from 'src/components/GlobalSearch/GlobalSearchComponent'; import QuerySettingsComponent from 'src/components/QuerySettings/QuerySettingsComponent'; diff --git a/src/components/QuerySettings/QuerySettingsComponent.jsx b/src/components/QuerySettings/QuerySettingsComponent.jsx index 36d5da8b..8146eae9 100644 --- a/src/components/QuerySettings/QuerySettingsComponent.jsx +++ b/src/components/QuerySettings/QuerySettingsComponent.jsx @@ -1,4 +1,6 @@ -import React from 'react'; +import React, { + useMemo, +} from 'react'; import { useSelector, useDispatch, @@ -28,6 +30,7 @@ import DatePickerComponent from './subcomponents/DatePickerComponent'; import StatusQueryComponent from './subcomponents/StatusQueryComponent'; import UrgencyQueryComponent from './subcomponents/UrgencyQueryComponent'; import PriorityQueryComponent from './subcomponents/PriorityQueryComponent'; +import ColumnFilterIndicatorComponent from './subcomponents/ColumnFilterIndicatorComponent'; import './QuerySettingsComponent.scss'; @@ -52,6 +55,10 @@ const QuerySettingsComponent = () => { } = useSelector( (state) => state.querySettings, ); + const { + filters, + } = useSelector((state) => state.incidentTable.incidentTableState); + const dispatch = useDispatch(); const updateQuerySettingsServices = (newServiceIds) => { dispatch(updateQuerySettingsServicesConnected(newServiceIds)); @@ -66,6 +73,13 @@ const QuerySettingsComponent = () => { dispatch(updateQuerySettingsTeamsConnected(newTeamIds)); }; + const filterCount = useMemo(() => { + if (filters instanceof Array) { + return filters.length; + } + return 0; + }, [filters]); + return ( { isMulti /> - {/* */} + { filterCount > 0 && ( + + + + )} ); diff --git a/src/components/QuerySettings/subcomponents/ColumnFilterIndicatorComponent.jsx b/src/components/QuerySettings/subcomponents/ColumnFilterIndicatorComponent.jsx new file mode 100644 index 00000000..01cc8002 --- /dev/null +++ b/src/components/QuerySettings/subcomponents/ColumnFilterIndicatorComponent.jsx @@ -0,0 +1,63 @@ +import React, { + useMemo, +} from 'react'; + +import { + useSelector, + useDispatch, +} from 'react-redux'; + +import { + useTranslation, +} from 'react-i18next'; + +import { + Flex, + Button, + Tag, +} from '@chakra-ui/react'; + +import { + clearIncidentTableFilters as clearIncidentTableFiltersConnected, +} from 'src/redux/incident_table/actions'; + +const ColumnFilterIndicatorComponent = () => { + const { + t, + } = useTranslation(); + const { + filters, + } = useSelector((state) => state.incidentTable.incidentTableState); + + const dispatch = useDispatch(); + const clearIncidentTableFilters = () => { + dispatch(clearIncidentTableFiltersConnected()); + }; + + const filterCount = useMemo(() => { + if (filters instanceof Array) { + return filters.length; + } + return 0; + }, [filters]); + + return ( + + + {filterCount} + + + + ); +}; + +export default ColumnFilterIndicatorComponent; diff --git a/src/components/UnauthorizedModal/UnauthorizedModalComponent.jsx b/src/components/UnauthorizedModal/UnauthorizedModalComponent.jsx index de655da7..778cd140 100644 --- a/src/components/UnauthorizedModal/UnauthorizedModalComponent.jsx +++ b/src/components/UnauthorizedModal/UnauthorizedModalComponent.jsx @@ -1,4 +1,6 @@ -import React from 'react'; +import React, { + useEffect, useState, +} from 'react'; import { connect, } from 'react-redux'; @@ -15,6 +17,22 @@ import { userAcceptDisclaimer as userAcceptDisclaimerConnected, } from 'src/redux/users/actions'; +// Ref: https://stackoverflow.com/a/61390352/6480733 +const Delayed = ({ + children, waitBeforeShow = 500, +}) => { + const [isShown, setIsShown] = useState(false); + + useEffect(() => { + const timer = setTimeout(() => { + setIsShown(true); + }, waitBeforeShow); + return () => clearTimeout(timer); + }, [waitBeforeShow]); + + return isShown ? children : null; +}; + const UnauthorizedModalComponent = ({ users, userAcceptDisclaimer, }) => { @@ -27,27 +45,29 @@ const UnauthorizedModalComponent = ({ return (
- { - userAcceptDisclaimer(); - sessionStorage.removeItem('pd_access_token'); - window.location.reload(); - }} - > - - {t('Unauthorized Access')} - - -

- {t('User is not permitted to access this instance of PagerDuty Live')} - {'. '} - {t('Please contact the associated site owner for access')} - . -

-
-
+ + { + userAcceptDisclaimer(); + sessionStorage.removeItem('pd_access_token'); + window.location.reload(); + }} + > + + {t('Unauthorized Access')} + + +

+ {t('User is not permitted to access this instance of PagerDuty Live')} + {'. '} + {t('Please contact the associated site owner for access')} + . +

+
+
+
); }; diff --git a/src/config/column-generator.jsx b/src/config/column-generator.jsx index 00d4167b..41bda4a0 100644 --- a/src/config/column-generator.jsx +++ b/src/config/column-generator.jsx @@ -644,7 +644,17 @@ export const defaultAlertsColumns = () => [ id: 'severity', header: 'Severity', columnType: 'alert', - accessor: (incident) => incident.alerts?.[0]?.body?.cef_details?.severity || '', + accessor: (incident) => { + if ( + incident.alerts + && incident.alerts instanceof Array + && incident.alerts.length > 0 + && incident.alerts[0] instanceof Object + ) { + return incident.alerts[0].severity || '--'; + } + return '--'; + }, minWidth: 100, renderer: ({ value, cell, diff --git a/src/config/constants.js b/src/config/constants.js index 17a43e4c..1764e19a 100644 --- a/src/config/constants.js +++ b/src/config/constants.js @@ -40,14 +40,21 @@ export const DEBUG_UNTIL_DATE = debugParams.get('until') || null; export const EXTRA_BUTTONS = debugParams .getAll('button') .map((button) => { - const [label, url, width, height] = button.split(','); + const [label, url, widthOrTab, height] = button.split(','); if (!label || !url) { return null; } + if (widthOrTab === 'tab') { + return { + label, + url, + tab: true, + }; + } return { label, url, - width, + width: widthOrTab, height, }; }) diff --git a/src/config/version.js b/src/config/version.js index f885508f..ecff75ff 100644 --- a/src/config/version.js +++ b/src/config/version.js @@ -1,2 +1,2 @@ // Generated by genversion. -export const version = '0.12.2-beta.0'; +export const version = '0.13.0-beta.0'; diff --git a/src/locales/de/translation.json b/src/locales/de/translation.json index 5886b6cd..d29f676b 100644 --- a/src/locales/de/translation.json +++ b/src/locales/de/translation.json @@ -24,11 +24,14 @@ "Age": "Alter", "Alerts": "Benachrichtigungen", "Alerts for incident X": "Benachrichtigungen für Vorfall {{incident_number}}", + "An unexpected error has occurred:": "Ein unerwarteter Fehler ist aufgetreten:", "and their alerts have been merged onto incident": "und ihre Warnungen wurden mit dem Vorfall zusammengeführt", "and X more": "und {{excessIncidents}} mehr", "Assignees": "Bearbeiter", "Available": "Verfügbar", "Cancel": "Abbrechen", + "Cannot merge incidents containing more than 1000 alerts": "Vorfälle mit mehr als 1000 Benachrichtigungen können nicht zusammengeführt werden", + "Catastrophic Error": "Katastrophaler Fehler", "characters remaining": "Zeichen verbleibend", "Class": "Klasse", "Clear Alerts": "Benachrichtigungen löschen", @@ -42,7 +45,6 @@ "Connect using PagerDuty OAuth to use this app": "Verbindung unter Verwendung von PagerDuty OAuth herstellen, um diese App zu verwenden", "Connected": "Verbunden", "Connecting": "Verbinden", - "Connection": "Verbindung", "Created At": "Erstellt am", "critical": "kritisch", "Current subdomain does not have the correct ability to use PagerDuty Live": "Die aktuelle Subdomain hat nicht die richtige Funktion aktiviert, PagerDuty Live zu verwenden", @@ -56,6 +58,7 @@ "Description": "Beschreibung", "Detailed Status": "Detaillierter Status", "Disclaimer & License": "Haftungsausschluss & Lizenz", + "Don't Restart": "Nicht neu starten", "Download CSV (X alerts)_one": "CSV herunterladen (1 Benachrichtigung)", "Download CSV (X alerts)_other": "CSV herunterladen ({{count}} Benachrichtigungen)", "Drag and drop to reorder": "Ziehen und ablegen, um neu zu ordnen", @@ -98,9 +101,12 @@ "info": "info", "Invalid presets file": "Ungültige Voreinstellungsdatei", "JSON Path": "JSON-Pfad", + "Last Completed": "Letzter Abschluss", + "Last Requested": "Letzte Anforderung", "Last Status Change At": "Letzte Statusänderung um", "Last Status Change By": "Letzte Statusänderung durch", "Latest Alert At": "Neueste Benachrichtigung um", + "Latest Log Entry": "Neuester Protokolleintrag", "Latest Log Entry At": "Neuester Protokolleintrag um", "Latest Log Entry Type": "Neuester Protokolleintragstyp", "Latest Note": "Neueste Notiz", @@ -109,13 +115,13 @@ "Links": "Verlinkungen", "Live Incidents Console": "Konsole für Live-Vorfälle", "Live Incidents Console will reload to apply the new presets": "Die Konsole für Live-Vorfälle wird neu geladen, um die neuen Voreinstellungen anzuwenden", + "Live Updates": "Live-Updates", "Live updates disabled": "Live-Updates deaktiviert", "Live updates enabled": "Live-Updates aktiviert", "Load Presets from File": "Voreinstellungen aus Datei laden", "Load/Save Presets": "Voreinstellungen laden/speichern", "Locale": "Gebietsschema", "Log App State to console": "App-Status in Konsole protokollieren", - "Log Entries": "Protokolleinträge", "Log Out": "Abmelden", "Low": "Niedrig", "Main menu": "Hauptmenü", @@ -131,6 +137,7 @@ "Move to": "Verschieben nach", "Move X alerts to another incident_one": "1 Benachrichtigung in einen anderen Vorfall verschieben", "Move X alerts to another incident_other": "{{count}} Benachrichtigungen in einen anderen Vorfall verschieben", + "n/a": "n/a", "New Incidents": "Neue Vorfälle", "No Incidents Found": "Keine Vorfälle gefunden", "Not requested": "Nicht angefordert", @@ -141,6 +148,7 @@ "on": "ein", "Open Incidents": "Offene Vorfälle", "Please contact the associated site owner for access": "Bitte wenden Sie sich an den Eigentümer der zugehörigen Website, um Zugriff zu erhalten", + "Polling": "Abfragen", "Presets file is for a different subdomain": "Die Voreinstellungsdatei ist für eine andere Subdomain", "Presets loaded": "Voreinstellungen geladen", "Priority": "Priorität", @@ -151,7 +159,9 @@ "Reassign": "Neu zuweisen", "Reassign To": "Neu zuweisen zu", "Reassigning": "Neu zuweisen", + "Reauthorize": "Erneut autorisieren", "Refresh Incidents": "Vorfälle aktualisieren", + "Refresh OAuth Token": "OAuth-Token aktualisieren", "Refreshing": "Aktualisieren", "Relative Dates": "Relative Daten", "Requested additional response for": "Zusätzliche Antwort angefordert für", @@ -162,6 +172,7 @@ "Responders": "Helfer", "response play for": "Response Play für", "Response Plays": "Response Play", + "Restart canceled": "Neustart abgebrochen", "Run Action": "Aktion ausführen", "running": "läuft", "Running custom action": "Benutzerdefinierte Aktion wird ausgeführt", @@ -197,6 +208,7 @@ "Teams": "Teams", "Text to add": "Text hinzufügen", "The alerts of the selected incidents will be merged into a single incident": "Die Warnungen der ausgewählten Vorfälle werden zu einem einzigen Vorfall zusammengeführt", + "The application will restart in X seconds.": "Die Anwendung wird in {{seconds}} Sekunden neu gestartet.", "The remaining selected incidents will be resolved after the merge is complete": "Die verbleibenden ausgewählten Vorfälle werden nach Abschluss der Zusammenführung als gelöst geschlossen", "Time": "Zeit", "Title": "Titel", @@ -206,14 +218,15 @@ "triggered for": "ausgelöst für", "Unable to fetch account abilities": "Die dem Konto zugeordneten Funktionen konnten nicht abgerufen werden", "Unable to fetch current user details": "Aktuelle Benutzerdetails konnten nicht abgerufen werden", - "Unable to fetch log entries": "Protokolleinträge konnten nicht abgerufen werden", "Unauthorized Access": "Nicht autorisierter Zugriff", + "Unauthorized. Please re-authorize.": "Nicht autorisiert. Bitte erneut autorisieren.", "Unknown error while using PD API": "Unbekannter Fehler bei der Verwendung der PD-API", "Until": "Bis", "Update Priority": "Priorität aktualisieren", "Updated At": "Aktualisiert um", "Updated user profile settings": "Benutzerprofileinstellungen aktualisiert", "Updating priority": "Priorität aktualisieren", + "Updating titles": "Titel aktualisieren", "Urgency": "Dringlichkeit", "User is not permitted to access this instance of PagerDuty Live": "Benutzer darf nicht auf diese Instanz von PagerDuty Live zugreifen", "Users": "Benutzer", diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 61bf2825..653c7800 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -24,11 +24,14 @@ "Age": "Age", "Alerts": "Alerts", "Alerts for incident X": "Alerts for incident {{incident_number}}", + "An unexpected error has occurred:": "An unexpected error has occurred:", "and their alerts have been merged onto incident": "and their alerts have been merged onto incident", "and X more": "and {{excessIncidents}} more", "Assignees": "Assignees", "Available": "Available", "Cancel": "Cancel", + "Cannot merge incidents containing more than 1000 alerts": "Cannot merge incidents containing more than 1000 alerts", + "Catastrophic Error": "Catastrophic Error", "characters remaining": "characters remaining", "Class": "Class", "Clear Alerts": "Clear Alerts", @@ -42,7 +45,6 @@ "Connect using PagerDuty OAuth to use this app": "Connect using PagerDuty OAuth to use this app", "Connected": "Connected", "Connecting": "Connecting", - "Connection": "Connection", "Created At": "Created At", "critical": "critical", "Current subdomain does not have the correct ability to use PagerDuty Live": "Current subdomain does not have the correct ability to use PagerDuty Live", @@ -56,6 +58,7 @@ "Description": "Description", "Detailed Status": "Detailed Status", "Disclaimer & License": "Disclaimer & License", + "Don't Restart": "Don't Restart", "Download CSV (X alerts)_one": "Download CSV (1 alert)", "Download CSV (X alerts)_other": "Download CSV ({{count}} alerts)", "Drag and drop to reorder": "Drag and drop to reorder", @@ -98,9 +101,12 @@ "info": "info", "Invalid presets file": "Invalid presets file", "JSON Path": "JSON Path", + "Last Completed": "Last Completed", + "Last Requested": "Last Requested", "Last Status Change At": "Last Status Change At", "Last Status Change By": "Last Status Change By", "Latest Alert At": "Latest Alert At", + "Latest Log Entry": "Latest Log Entry", "Latest Log Entry At": "Latest Log Entry At", "Latest Log Entry Type": "Latest Log Entry Type", "Latest Note": "Latest Note", @@ -109,13 +115,13 @@ "Links": "Links", "Live Incidents Console": "Live Incidents Console", "Live Incidents Console will reload to apply the new presets": "Live Incidents Console will reload to apply the new presets", + "Live Updates": "Live Updates", "Live updates disabled": "Live updates disabled", "Live updates enabled": "Live updates enabled", "Load Presets from File": "Load Presets from File", "Load/Save Presets": "Load/Save Presets", "Locale": "Locale", "Log App State to console": "Log App State to console", - "Log Entries": "Log Entries", "Log Out": "Log Out", "Low": "Low", "Main menu": "Main menu", @@ -131,6 +137,7 @@ "Move to": "Move to", "Move X alerts to another incident_one": "Move 1 alert to another incident", "Move X alerts to another incident_other": "Move {{count}} alerts to another incident", + "n/a": "n/a", "New Incidents": "New Incidents", "No Incidents Found": "No Incidents Found", "Not requested": "Not requested", @@ -141,6 +148,7 @@ "on": "on", "Open Incidents": "Open Incidents", "Please contact the associated site owner for access": "Please contact the associated site owner for access", + "Polling": "Polling", "Presets file is for a different subdomain": "Presets file is for a different subdomain", "Presets loaded": "Presets loaded", "Priority": "Priority", @@ -151,7 +159,9 @@ "Reassign": "Reassign", "Reassign To": "Reassign To", "Reassigning": "Reassigning", + "Reauthorize": "Reauthorize", "Refresh Incidents": "Refresh Incidents", + "Refresh OAuth Token": "Refresh OAuth Token", "Refreshing": "Refreshing", "Relative Dates": "Relative Dates", "Requested additional response for": "Requested additional response for", @@ -162,6 +172,7 @@ "Responders": "Responders", "response play for": "response play for", "Response Plays": "Response Plays", + "Restart canceled": "Restart canceled", "Run Action": "Run Action", "running": "running", "Running custom action": "Running custom action", @@ -197,6 +208,7 @@ "Teams": "Teams", "Text to add": "Text to add", "The alerts of the selected incidents will be merged into a single incident": "The alerts of the selected incidents will be merged into a single incident", + "The application will restart in X seconds.": "The application will restart in {{seconds}} seconds.", "The remaining selected incidents will be resolved after the merge is complete": "The remaining selected incidents will be resolved after the merge is complete", "Time": "Time", "Title": "Title", @@ -206,14 +218,15 @@ "triggered for": "triggered for", "Unable to fetch account abilities": "Unable to fetch account abilities", "Unable to fetch current user details": "Unable to fetch current user details", - "Unable to fetch log entries": "Unable to fetch log entries", "Unauthorized Access": "Unauthorized Access", + "Unauthorized. Please re-authorize.": "Unauthorized. Please re-authorize.", "Unknown error while using PD API": "Unknown error while using PD API", "Until": "Until", "Update Priority": "Update Priority", "Updated At": "Updated At", "Updated user profile settings": "Updated user profile settings", "Updating priority": "Updating priority", + "Updating titles": "Updating titles", "Urgency": "Urgency", "User is not permitted to access this instance of PagerDuty Live": "User is not permitted to access this instance of PagerDuty Live", "Users": "Users", diff --git a/src/locales/es/translation.json b/src/locales/es/translation.json index 4f963402..2dabdb53 100644 --- a/src/locales/es/translation.json +++ b/src/locales/es/translation.json @@ -24,11 +24,14 @@ "Age": "Edad", "Alerts": "Alertas", "Alerts for incident X": "Alertas para incidente {{incident_number}}", + "An unexpected error has occurred:": "Se ha producido un error inesperado:", "and their alerts have been merged onto incident": "y sus alertas se han fusionado con el incidente", "and X more": "y {{excessIncidents}} más", "Assignees": "Cesionarios", "Available": "Disponible", "Cancel": "Cancelar", + "Cannot merge incidents containing more than 1000 alerts": "No se pueden combinar incidentes que contengan más de 1000 alertas", + "Catastrophic Error": "Error Catastrófico", "characters remaining": "caracteres restantes", "Class": "Clase", "Clear Alerts": "Borrar alertas", @@ -42,7 +45,6 @@ "Connect using PagerDuty OAuth to use this app": "Conectar usando PagerDuty OAuth para usar esta aplicación", "Connected": "Conectado", "Connecting": "Conectando", - "Connection": "Conexión", "Created At": "Creado En", "critical": "extremo", "Current subdomain does not have the correct ability to use PagerDuty Live": "El subdominio actual no tiene la capacidad correcta para usar PagerDuty Live", @@ -56,6 +58,7 @@ "Description": "Descripción", "Detailed Status": "Estado detallado", "Disclaimer & License": "Aviso legal y licencia", + "Don't Restart": "No reiniciar", "Download CSV (X alerts)_one": "Descargar CSV (1 alerta)", "Download CSV (X alerts)_many": "Descargar CSV ({{count}} alertas)", "Download CSV (X alerts)_other": "Descargar CSV ({{count}} alertas)", @@ -99,9 +102,12 @@ "info": "información", "Invalid presets file": "Archivo de preajustes no válido", "JSON Path": "Ruta JSON", + "Last Completed": "Último Completado", + "Last Requested": "Último Solicitado", "Last Status Change At": "Último Cambio de Estado en", "Last Status Change By": "Último Cambio de Estado por", "Latest Alert At": "Última Alerta en", + "Latest Log Entry": "Última Entrada de Registro", "Latest Log Entry At": "Última Entrada de Registro en", "Latest Log Entry Type": "Último Tipo de Entrada de Registro", "Latest Note": "Última Nota", @@ -110,13 +116,13 @@ "Links": "Enlaces", "Live Incidents Console": "Consola de incidentes en vivo", "Live Incidents Console will reload to apply the new presets": "La consola de incidentes en vivo se volverá a cargar para aplicar los nuevos preajustes", + "Live Updates": "Actualizaciones en vivo", "Live updates disabled": "Actualizaciones en vivo deshabilitadas", "Live updates enabled": "Actualizaciones en vivo habilitadas", "Load Presets from File": "Cargar preajustes desde archivo", "Load/Save Presets": "Cargar/Guardar preajustes", "Locale": "Configuracion regional", "Log App State to console": "Registrar estado de la aplicación en la consola", - "Log Entries": "Entradas de registro", "Log Out": "Cerrar sesión", "Low": "Bajo", "Main menu": "Menú principal", @@ -133,6 +139,7 @@ "Move X alerts to another incident_one": "Mover 1 alerta a otro incidente", "Move X alerts to another incident_many": "Mover {{count}} alertas a otro incidente", "Move X alerts to another incident_other": "Mover {{count}} alertas a otro incidente", + "n/a": "n/a", "New Incidents": "Nuevos incidentes", "No Incidents Found": "No se encontraron incidentes", "Not requested": "No solicitado", @@ -143,6 +150,7 @@ "on": "en", "Open Incidents": "Incidentes abiertos", "Please contact the associated site owner for access": "Póngase en contacto con el propietario del sitio asociado para obtener acceso", + "Polling": "Sondeo", "Presets file is for a different subdomain": "El archivo de preajustes es para un subdominio diferente", "Presets loaded": "Preajustes cargados", "Priority": "Prioridad", @@ -153,7 +161,9 @@ "Reassign": "Reasignar", "Reassign To": "Reasignar a", "Reassigning": "Reasignando", + "Reauthorize": "Reautorizar", "Refresh Incidents": "Actualizar incidentes", + "Refresh OAuth Token": "Actualizar token OAuth", "Refreshing": "Actualizando", "Relative Dates": "Fechas relativas", "Requested additional response for": "Solicitó una respuesta adicional para", @@ -164,6 +174,7 @@ "Responders": "Responsables", "response play for": "juego de respuesta para", "Response Plays": "Respuestas de juego", + "Restart canceled": "Reinicio cancelado", "Run Action": "Ejecutar acción", "running": "ejecutando", "Running custom action": "Ejecutando acción personalizada", @@ -199,6 +210,7 @@ "Teams": "Equipos", "Text to add": "Texto para agregar", "The alerts of the selected incidents will be merged into a single incident": "Las alertas de los incidentes seleccionados se combinarán en un solo incidente", + "The application will restart in X seconds.": "La aplicación se reiniciará en {{seconds}} segundos.", "The remaining selected incidents will be resolved after the merge is complete": "Los incidentes seleccionados restantes se resolverán después de que se complete la combinación", "Time": "Hora", "Title": "Título", @@ -208,14 +220,15 @@ "triggered for": "iniciado para", "Unable to fetch account abilities": "No se pueden recuperar las capacidades de la cuenta", "Unable to fetch current user details": "No se pueden obtener los detalles del usuario actual", - "Unable to fetch log entries": "No se pueden recuperar las entradas de registro", "Unauthorized Access": "Acceso no autorizado", + "Unauthorized. Please re-authorize.": "No autorizado. Por favor, vuelva a autorizar.", "Unknown error while using PD API": "Error desconocido al usar la API de PD", "Until": "Hasta", "Update Priority": "Actualizar prioridad", "Updated At": "Actualizado en", "Updated user profile settings": "Configuración de perfil de usuario actualizada", "Updating priority": "Actualizando prioridad", + "Updating titles": "Actualizando títulos", "Urgency": "Urgencia", "User is not permitted to access this instance of PagerDuty Live": "El usuario no tiene permiso para acceder a esta instancia de PagerDuty Live", "Users": "Usuarios", diff --git a/src/locales/fr/translation.json b/src/locales/fr/translation.json index 46df9dd9..27e600a2 100644 --- a/src/locales/fr/translation.json +++ b/src/locales/fr/translation.json @@ -24,11 +24,14 @@ "Age": "Âge", "Alerts": "Alertes", "Alerts for incident X": "Alertes pour l'incident {{incident_number}}", + "An unexpected error has occurred:": "Une erreur inattendue s'est produite :", "and their alerts have been merged onto incident": "et leurs alertes ont été fusionnées sur l'incident", "and X more": "et {{excessIncidents}} de plus", "Assignees": "Cessionnaires", "Available": "Disponible", "Cancel": "Annuler", + "Cannot merge incidents containing more than 1000 alerts": "Impossible de fusionner des incidents contenant plus de 1000 alertes", + "Catastrophic Error": "Erreur catastrophique", "characters remaining": "caractères restants", "Class": "Classe", "Clear Alerts": "Effacer les alertes", @@ -42,7 +45,6 @@ "Connect using PagerDuty OAuth to use this app": "Connectez-vous en utilisant l'OAuth PagerDuty pour utiliser cette application", "Connected": "Connecté", "Connecting": "Connexion", - "Connection": "Connexion", "Created At": "Créé à", "critical": "critique", "Current subdomain does not have the correct ability to use PagerDuty Live": "Le sous-domaine actuel n'a pas la bonne capacité pour utiliser PagerDuty Live", @@ -56,6 +58,7 @@ "Description": "Description", "Detailed Status": "Statut détaillé", "Disclaimer & License": "Clause de non-responsabilité et licence (en anglais)", + "Don't Restart": "Ne pas redémarrer", "Download CSV (X alerts)_one": "Télécharger CSV ({{count}} alerte)", "Download CSV (X alerts)_many": "Télécharger CSV ({{count}} alertes)", "Download CSV (X alerts)_other": "Télécharger CSV ({{count}} alertes)", @@ -99,9 +102,12 @@ "info": "info", "Invalid presets file": "Fichier de préréglages non valide", "JSON Path": "Chemin JSON", + "Last Completed": "Dernière complétée", + "Last Requested": "Dernière demandée", "Last Status Change At": "Dernier changement de statut à", "Last Status Change By": "Dernier changement de statut par", "Latest Alert At": "Dernière alerte à", + "Latest Log Entry": "Dernière entrée de journal", "Latest Log Entry At": "Dernière entrée de journal à", "Latest Log Entry Type": "Dernier type d'entrée de journal", "Latest Note": "Dernière note", @@ -110,13 +116,13 @@ "Links": "Liens", "Live Incidents Console": "Console d'incidents en direct", "Live Incidents Console will reload to apply the new presets": "La console d'incidents en direct se rechargera pour appliquer les nouveaux préréglages", + "Live Updates": "Mises à jour en direct", "Live updates disabled": "Mises à jour en direct désactivées", "Live updates enabled": "Mises à jour en direct activées", "Load Presets from File": "Charger les préréglages à partir du fichier", "Load/Save Presets": "Charger/enregistrer les préréglages", "Locale": "Paramètres régionaux", "Log App State to console": "Journaliser l'état de l'application dans la console", - "Log Entries": "Entrées de journal", "Log Out": "Se déconnecter", "Low": "Basse", "Main menu": "Menu principal", @@ -133,6 +139,7 @@ "Move X alerts to another incident_one": "Déplacer {{count}} alerte vers un autre incident", "Move X alerts to another incident_many": "Déplacer {{count}} alertes vers un autre incident", "Move X alerts to another incident_other": "Déplacer {{count}} alertes vers un autre incident", + "n/a": "n/a", "New Incidents": "Nouveaux incidents", "No Incidents Found": "Aucun incident trouvé", "Not requested": "Non demandé", @@ -143,6 +150,7 @@ "on": "sur", "Open Incidents": "Incidents ouverts", "Please contact the associated site owner for access": "Please contact the associated site owner for access", + "Polling": "Interrogation", "Presets file is for a different subdomain": "Le fichier de préréglages est pour un sous-domaine différent", "Presets loaded": "Préréglages chargés", "Priority": "Priorité", @@ -153,7 +161,9 @@ "Reassign": "Réaffecter", "Reassign To": "Réaffecter à", "Reassigning": "Réaffectation", + "Reauthorize": "Réautoriser", "Refresh Incidents": "Actualiser les incidents", + "Refresh OAuth Token": "Actualiser le jeton OAuth", "Refreshing": "Rafraîchissement", "Relative Dates": "Dates relatives", "Requested additional response for": "Demande de réponse supplémentaire pour", @@ -164,6 +174,7 @@ "Responders": "Intervenants", "response play for": "jouer la réponse pour", "Response Plays": "Réponses", + "Restart canceled": "Redémarrage annulé", "Run Action": "Actions", "running": "en cours d'exécution", "Running custom action": "Exécution d'une action personnalisée", @@ -199,6 +210,7 @@ "Teams": "Équipes", "Text to add": "Texte à ajouter", "The alerts of the selected incidents will be merged into a single incident": "Les alertes des incidents sélectionnés seront fusionnées en un seul incident", + "The application will restart in X seconds.": "L'application redémarrera dans {{seconds}} secondes.", "The remaining selected incidents will be resolved after the merge is complete": "Les incidents restants sélectionnés seront résolus après la fusion", "Time": "Temps", "Title": "Titre", @@ -208,14 +220,15 @@ "triggered for": "triggered pour", "Unable to fetch account abilities": "Impossible de récupérer les capacités du compte", "Unable to fetch current user details": "Impossible de récupérer les détails de l'utilisateur actuel", - "Unable to fetch log entries": "Impossible de récupérer les entrées de journal", "Unauthorized Access": "Accès non autorisé", + "Unauthorized. Please re-authorize.": "Non autorisé. Veuillez réautoriser.", "Unknown error while using PD API": "Erreur inconnue lors de l'utilisation de l'API PD", "Until": "Jusqu'à", "Update Priority": "Priorité", "Updated At": "Mis à jour à", "Updated user profile settings": "Paramètres du profil utilisateur mis à jour", "Updating priority": "Mise à jour de la priorité", + "Updating titles": "Mise à jour des titres", "Urgency": "Urgence", "User is not permitted to access this instance of PagerDuty Live": "L'utilisateur n'est pas autorisé à accéder à cette instance de PagerDuty Live", "Users": "Utilisateurs", diff --git a/src/locales/id/translation.json b/src/locales/id/translation.json index 24358d8b..cdce0017 100644 --- a/src/locales/id/translation.json +++ b/src/locales/id/translation.json @@ -24,11 +24,14 @@ "Age": "Usia", "Alerts": "Peringatan", "Alerts for incident X": "Peringatan untuk insiden {{incident_number}}", + "An unexpected error has occurred:": "Terjadi error yang tidak terduga:", "and their alerts have been merged onto incident": "dan peringatan-peringatan (alert) mereka telah digabungkan ke satu insiden", "and X more": "dan {{excessIncidents}} lagi", "Assignees": "Penerima tugas", "Available": "Tersedia", "Cancel": "Batal", + "Cannot merge incidents containing more than 1000 alerts": "Tidak dapat menggabungkan insiden yang berisi lebih dari 1000 peringatan", + "Catastrophic Error": "Error Kategori Tinggi", "characters remaining": "karakter yang tersisa", "Class": "Kelas", "Clear Alerts": "Hapus Peringatan", @@ -42,7 +45,6 @@ "Connect using PagerDuty OAuth to use this app": "Untuk menggunakan app ini, hubungkan dengan menggunakan PagerDuty OAuth", "Connected": "Terhubung", "Connecting": "Menghubungkan", - "Connection": "Koneksi", "Created At": "Dibuat pada", "critical": "kritis", "Current subdomain does not have the correct ability to use PagerDuty Live": "Subdomain saat ini tidak memiliki kemampuan untuk menggunakan PagerDuty Live", @@ -56,6 +58,7 @@ "Description": "Deskripsi", "Detailed Status": "Status Detail", "Disclaimer & License": "Sanggahan & Lisensi", + "Don't Restart": "Jangan Mulai Ulang", "Download CSV (X alerts)_other": "Unduh CSV ({{count}} peringatan)", "Drag and drop to reorder": "Seret dan lepas untuk mengurutkan ulang", "error": "error", @@ -97,9 +100,12 @@ "info": "info", "Invalid presets file": "File preset tidak valid", "JSON Path": "Lokasi JSON", + "Last Completed": "Terakhir Selesai", + "Last Requested": "Terakhir Diminta", "Last Status Change At": "Perubahan status terakhir pada", "Last Status Change By": "Perubahan status terakhir oleh", "Latest Alert At": "Peringatan terakhir pada", + "Latest Log Entry": "Entri log terakhir", "Latest Log Entry At": "Entri log terakhir pada", "Latest Log Entry Type": "Tipe entri log terakhir", "Latest Note": "Catatan terkini", @@ -108,13 +114,13 @@ "Links": "Tautan", "Live Incidents Console": "Konsol insiden langsung", "Live Incidents Console will reload to apply the new presets": "Konsol insiden langsung akan dimuat ulang untuk menerapkan preset baru", + "Live Updates": "Pembaruan Langsung", "Live updates disabled": "Pembaruan langsung dinonaktifkan", "Live updates enabled": "Pembaruan langsung diaktifkan", "Load Presets from File": "Muat Preset dari File", "Load/Save Presets": "Muat/Simpan Preset", "Locale": "Lokal", "Log App State to console": "Catat status app ke konsol", - "Log Entries": "Entri Log", "Log Out": "Keluar", "Low": "Low", "Main menu": "Menu utama", @@ -129,6 +135,7 @@ "Move each selected alert to its own new incident": "Pindahkan setiap peringatan terpilih ke insiden baru masing-masing", "Move to": "Pindah ke", "Move X alerts to another incident_other": "Pindahkan {{count}} peringatan ke insiden lain", + "n/a": "n/a", "New Incidents": "Insiden Baru", "No Incidents Found": "Tidak ada insiden yang ditemukan", "Not requested": "Tidak diminta", @@ -139,6 +146,7 @@ "on": "on", "Open Incidents": "Insiden yang Dibuka", "Please contact the associated site owner for access": "Silakan hubungi pemilik situs terkait untuk akses", + "Polling": "Polling", "Presets file is for a different subdomain": "File preset untuk subdomain yang berbeda", "Presets loaded": "Preset dimuat", "Priority": "Prioritas", @@ -149,7 +157,9 @@ "Reassign": "Tugaskan ulang", "Reassign To": "Tugaskan ulang ke", "Reassigning": "Menugaskan ulang", + "Reauthorize": "Otorisasi ulang", "Refresh Incidents": "Segarkan insiden", + "Refresh OAuth Token": "Segarkan Token OAuth", "Refreshing": "Sedang refresh", "Relative Dates": "Tanggal Relatif", "Requested additional response for": "Meminta tanggapan tambahan untuk", @@ -160,6 +170,7 @@ "Responders": "Penjawab", "response play for": "response play untuk", "Response Plays": "Response Plays", + "Restart canceled": "Mulai ulang dibatalkan", "Run Action": "Jalankan Aksi", "running": "sedang berjalan", "Running custom action": "Menjalankan aksi khusus", @@ -195,6 +206,7 @@ "Teams": "Tim-tim", "Text to add": "Teks yang akan ditambahkan", "The alerts of the selected incidents will be merged into a single incident": "Peringatan dari insiden yang dipilih akan digabungkan menjadi satu insiden tunggal", + "The application will restart in X seconds.": "Aplikasi akan dimulai ulang dalam {{seconds}} detik.", "The remaining selected incidents will be resolved after the merge is complete": "Insiden terpilih yang tersisa akan diselesaikan setelah penggabungan selesai", "Time": "Waktu", "Title": "Judul", @@ -204,14 +216,15 @@ "triggered for": "terpicu untuk", "Unable to fetch account abilities": "Tidak dapat mengambil kemampuan akun", "Unable to fetch current user details": "Tidak dapat mengambil detail pengguna saat ini", - "Unable to fetch log entries": "Tidak dapat mengambil entri log", "Unauthorized Access": "Akses tidak sah", - "Unknown error while using PD API": "Unknown error while using PD API", + "Unauthorized. Please re-authorize.": "Tidak diizinkan. Silakan otorisasi ulang.", + "Unknown error while using PD API": "Error tidak diketahui saat menggunakan API PD", "Until": "Sampai", "Update Priority": "Perbarui Prioritas", "Updated At": "Diperbarui pada", "Updated user profile settings": "Pengaturan profil pengguna telah diperbarui", "Updating priority": "Memperbarui prioritas", + "Updating titles": "Memperbarui judul", "Urgency": "Urgensi", "User is not permitted to access this instance of PagerDuty Live": "Pengguna tidak diizinkan untuk mengakses instance PagerDuty Live ini", "Users": "Pengguna", diff --git a/src/locales/ja/translation.json b/src/locales/ja/translation.json index 4a73cdc3..96913c19 100644 --- a/src/locales/ja/translation.json +++ b/src/locales/ja/translation.json @@ -24,11 +24,14 @@ "Age": "経過時間", "Alerts": "アラート", "Alerts for incident X": "インシデント {{incident_number}} のアラート", + "An unexpected error has occurred:": "予期しないエラーが発生しました:", "and their alerts have been merged onto incident": "そして該当アラートはインシデントにマージされました", "and X more": "とその他{{excessIncidents}}件", "Assignees": "アサイン先", "Available": "選択可能", "Cancel": "キャンセル", + "Cannot merge incidents containing more than 1000 alerts": "1000件以上のアラートを含むインシデントはマージできません", + "Catastrophic Error": "致命的エラー", "characters remaining": "文字まで入力可能", "Class": "クラス", "Clear Alerts": "アラートをクリア", @@ -42,7 +45,6 @@ "Connect using PagerDuty OAuth to use this app": "このアプリを利用するのに、PagerDuty OAuthに接続してください", "Connected": "接続済み", "Connecting": "接続中", - "Connection": "接続", "Created At": "作成日時", "critical": "critical", "Current subdomain does not have the correct ability to use PagerDuty Live": "現在のサブドメインはPagerDuty Liveを使用するための十分な権限を持っていません", @@ -56,6 +58,7 @@ "Description": "説明", "Detailed Status": "詳細ステータス", "Disclaimer & License": "免責事項・ライセンス", + "Don't Restart": "再起動しない", "Download CSV (X alerts)_other": "CSVをダウンロード({{count}}件)", "Drag and drop to reorder": "ドラッグ&ドロップで並び替え", "error": "error", @@ -97,9 +100,12 @@ "info": "info", "Invalid presets file": "無効なプリセットファイル", "JSON Path": "JSONパス", + "Last Completed": "最後に完了した", + "Last Requested": "最後にリクエストされた", "Last Status Change At": "最終ステータス更新日時", "Last Status Change By": "最終ステータス更新者", "Latest Alert At": "最新のアラート日時", + "Latest Log Entry": "Latest Log Entry", "Latest Log Entry At": "最新のログエントリー日時", "Latest Log Entry Type": "最新のログエントリータイプ", "Latest Note": "最新のメモ", @@ -108,13 +114,13 @@ "Links": "リンク", "Live Incidents Console": "ライブインシデントコンソール", "Live Incidents Console will reload to apply the new presets": "ライブインシデントコンソールは新しいプリセットを適用するためにリロードされます", + "Live Updates": "ライブ更新", "Live updates disabled": "ライブ更新が無効になっています", "Live updates enabled": "ライブ更新が有効になっています", "Load Presets from File": "ファイルからプリセットを読み込む", "Load/Save Presets": "プリセットの読み込み/保存", "Locale": "ロケール", "Log App State to console": "アプリの状態をコンソールに記録", - "Log Entries": "ログエントリー", "Log Out": "ログアウト", "Low": "低", "Main menu": "メインメニュー", @@ -129,6 +135,7 @@ "Move each selected alert to its own new incident": "選択した各アラートをそれぞれ新しいインシデントに移動", "Move to": "移動先", "Move X alerts to another incident_other": "{{count}}件のアラートを別のインシデントに移動", + "n/a": "n/a", "New Incidents": "新規インシデント", "No Incidents Found": "インシデントが見つかりません", "Not requested": "リクエストされていません", @@ -139,6 +146,7 @@ "on": "。対象:", "Open Incidents": "オープンインシデント", "Please contact the associated site owner for access": "アクセスするには、サイトオーナーにお問い合わせください", + "Polling": "ポーリング中", "Presets file is for a different subdomain": "プリセットファイルは別のサブドメイン用です", "Presets loaded": "プリセットがロードされました", "Priority": "優先度", @@ -149,7 +157,9 @@ "Reassign": "再アサイン", "Reassign To": "再アサイン先", "Reassigning": "再アサイン中", + "Reauthorize": "再認証", "Refresh Incidents": "インシデントを更新", + "Refresh OAuth Token": "OAuthトークンをリフレッシュ", "Refreshing": "リフレッシュ中", "Relative Dates": "相対日付", "Requested additional response for": "追加対応を依頼対象", @@ -160,6 +170,7 @@ "Responders": "レスポンダー", "response play for": "レスポンスプレイ対象", "Response Plays": "レスポンスプレイ", + "Restart canceled": "再起動がキャンセルされました", "Run Action": "アクションを実行", "running": "実行中", "Running custom action": "カスタムアクションを実行中", @@ -195,6 +206,7 @@ "Teams": "チーム", "Text to add": "追加するテキスト", "The alerts of the selected incidents will be merged into a single incident": "選択したインシデントのアラートはのインシデントにマージされます", + "The application will restart in X seconds.": "アプリケーションは{{seconds}}秒後に再起動します。", "The remaining selected incidents will be resolved after the merge is complete": "残りの選択中のインシデントはマージが完了したら、解決済みになります", "Time": "時間", "Title": "件名", @@ -204,14 +216,15 @@ "triggered for": "トリガー対象", "Unable to fetch account abilities": "アカウント権限を取得できません", "Unable to fetch current user details": "現在のユーザーの詳細を取得できません", - "Unable to fetch log entries": "ログエントリーを取得できません", "Unauthorized Access": "不正アクセス", + "Unauthorized. Please re-authorize.": "権限がありません。再認証してください。", "Unknown error while using PD API": "PD API使用時に不明なエラーが発生しました", "Until": "下記の日付まで", "Update Priority": "優先度を更新する", "Updated At": "更新日時", "Updated user profile settings": "ユーザープロフィール設定が更新されました", "Updating priority": "優先度を更新中", + "Updating titles": "タイトルを更新中", "Urgency": "緊急度", "User is not permitted to access this instance of PagerDuty Live": "ユーザーはこのPagerDuty Liveのインスタンスへのアクセスは許可されません", "Users": "ユーザー", diff --git a/src/locales/pt-br/translation.json b/src/locales/pt-br/translation.json index 9a1089db..0c5d9bee 100644 --- a/src/locales/pt-br/translation.json +++ b/src/locales/pt-br/translation.json @@ -24,11 +24,14 @@ "Age": "Idade", "Alerts": "Alertas", "Alerts for incident X": "Alertas para incidente {{incident_number}}", + "An unexpected error has occurred:": "Ocorreu um erro inesperado:", "and their alerts have been merged onto incident": "e os seus alertas foram combinados no incidente", "and X more": "e mais {{excessIncidents}}", "Assignees": "Detentores", "Available": "Disponível", "Cancel": "Cancelar", + "Cannot merge incidents containing more than 1000 alerts": "Não é possível combinar incidentes que contenham mais de 1000 alertas", + "Catastrophic Error": "Erro Catastrófico", "characters remaining": "caracteres restantes", "Class": "Classe", "Clear Alerts": "Limpar Alertas", @@ -42,7 +45,6 @@ "Connect using PagerDuty OAuth to use this app": "Conectar usando PagerDuty OAuth para usar esta aplicação", "Connected": "Conectado", "Connecting": "Conectando", - "Connection": "Conexão", "Created At": "Criado Em", "critical": "urgente", "Current subdomain does not have the correct ability to use PagerDuty Live": "O subdomínio atual não tem a capacidade correta para usar PagerDuty Live", @@ -56,6 +58,7 @@ "Description": "Descrição", "Detailed Status": "Estado Detalhado", "Disclaimer & License": "Aviso Legal & Licença", + "Don't Restart": "Não Reiniciar", "Download CSV (X alerts)_one": "Baixar CSV ({{count}} alerta)", "Download CSV (X alerts)_many": "Baixar CSV ({{count}} alertas)", "Download CSV (X alerts)_other": "Baixar CSV ({{count}} alertas)", @@ -99,9 +102,12 @@ "info": "informação", "Invalid presets file": "Arquivo de predefinições inválido", "JSON Path": "Caminho JSON", + "Last Completed": "Último Concluído", + "Last Requested": "Último Solicitado", "Last Status Change At": "Última Alteração de Estado às", "Last Status Change By": "Última Alteração de Estado por", "Latest Alert At": "Último Alerta às", + "Latest Log Entry": "Última Entrada de Registro", "Latest Log Entry At": "Última Entrada de Registro às", "Latest Log Entry Type": "Último Tipo de Entrada de Registro", "Latest Note": "Última Anotação", @@ -110,13 +116,13 @@ "Links": "Links", "Live Incidents Console": "Console de Incidentes ao Vivo", "Live Incidents Console will reload to apply the new presets": "O Console de Incidentes ao Vivo será recarregado para aplicar as novas predefinições", + "Live Updates": "Atualizações ao Vivo", "Live updates disabled": "Atualizações ao Vivo Desativadas", "Live updates enabled": "Atualizações ao Vivo Ativadas", "Load Presets from File": "Carregar Predefinições de Arquivo", "Load/Save Presets": "Carregar/Salvar Predefinições", "Locale": "Região", "Log App State to console": "Registrar Estado da Aplicação no console", - "Log Entries": "Entradas de Registro", "Log Out": "Terminar Sessão", "Low": "Baixo", "Main menu": "Menu principal", @@ -133,6 +139,7 @@ "Move X alerts to another incident_one": "Mover 1 alerta para outro incidente", "Move X alerts to another incident_many": "Mover {{count}} alertas para outro incidente", "Move X alerts to another incident_other": "Mover {{count}} alertas para outro incidente", + "n/a": "n/d", "New Incidents": "Novos Incidentes", "No Incidents Found": "Nenhum Incidente Encontrado", "Not requested": "Não solicitado", @@ -143,6 +150,7 @@ "on": "em", "Open Incidents": "Incidentes Abertos", "Please contact the associated site owner for access": "Por favor entre em contato com o proprietário do site associado para obter acesso", + "Polling": "Consultando", "Presets file is for a different subdomain": "O arquivo de predefinições é para um subdomínio diferente", "Presets loaded": "Predefinições carregadas", "Priority": "Prioridade", @@ -153,7 +161,9 @@ "Reassign": "Reatribuir", "Reassign To": "Reatribuir a", "Reassigning": "Reass", + "Reauthorize": "Reautorizar", "Refresh Incidents": "Atualizar Incidentes", + "Refresh OAuth Token": "Atualizar Token OAuth", "Refreshing": "Atualizando", "Relative Dates": "Datas Relativas", "Requested additional response for": "Resposta adicional solicitada para", @@ -164,6 +174,7 @@ "Responders": "Respondentes", "response play for": "conjunto de respostas para", "Response Plays": "Conjunto de Respostas", + "Restart canceled": "Reinício cancelado", "Run Action": "Executar Ação", "running": "executando", "Running custom action": "Executando ação personalizada", @@ -199,6 +210,7 @@ "Teams": "Equipes", "Text to add": "Texto a adicionar", "The alerts of the selected incidents will be merged into a single incident": "Os alertas dos incidentes selecionados serão combinados em um único incidente", + "The application will restart in X seconds.": "A aplicação será reiniciada em {{seconds}} segundos.", "The remaining selected incidents will be resolved after the merge is complete": "Os restantes incidentes selecionados serão resolvidos, uma vez completa a combinação", "Time": "Hora", "Title": "Título", @@ -208,14 +220,15 @@ "triggered for": "acionado para", "Unable to fetch account abilities": "Não foi possível obter as capacidades da conta", "Unable to fetch current user details": "Não foi possível obter os dados atuais do usuário", - "Unable to fetch log entries": "Não foi possível obter as entradas de registro", "Unauthorized Access": "Acesso não autorizado", + "Unauthorized. Please re-authorize.": "Não autorizado. Por favor, reautorize.", "Unknown error while using PD API": "Erro desconhecido ao usar a API da PD", "Until": "Até", "Update Priority": "Atualizar Prioridade", "Updated At": "Atualizado às", "Updated user profile settings": "Configurações de perfil de usuário atualizadas", "Updating priority": "Atualizando prioridade", + "Updating titles": "Atualizando títulos", "Urgency": "Urgência", "User is not permitted to access this instance of PagerDuty Live": "O usuário não tem permissão para acessar a esta instância do PagerDuty Live", "Users": "Usuários", diff --git a/src/locales/pt/translation.json b/src/locales/pt/translation.json index dc72bc2b..3797a4da 100644 --- a/src/locales/pt/translation.json +++ b/src/locales/pt/translation.json @@ -24,11 +24,14 @@ "Age": "Idade", "Alerts": "Alertas", "Alerts for incident X": "Alertas para incidente {{incident_number}}", + "An unexpected error has occurred:": "Ocorreu um erro inesperado:", "and their alerts have been merged onto incident": "e os seus alertas foram combinados no incidente", "and X more": "e mais {{excessIncidents}}", "Assignees": "Responsáveis", "Available": "Disponível", "Cancel": "Cancelar", + "Cannot merge incidents containing more than 1000 alerts": "Não é possível combinar incidentes que contenham mais de 1000 alertas", + "Catastrophic Error": "Erro Catastrófico", "characters remaining": "caracteres restantes", "Class": "Classe", "Clear Alerts": "Limpar Alertas", @@ -42,7 +45,6 @@ "Connect using PagerDuty OAuth to use this app": "Ligue usando PagerDuty OAuth para usar esta aplicação", "Connected": "Ligado", "Connecting": "A ligar", - "Connection": "Ligação", "Created At": "Criado Em", "critical": "urgente", "Current subdomain does not have the correct ability to use PagerDuty Live": "O subdomínio atual não tem a capacidade correta para usar PagerDuty Live", @@ -56,6 +58,7 @@ "Description": "Descrição", "Detailed Status": "Estado Detalhado", "Disclaimer & License": "Aviso Legal & Licença", + "Don't Restart": "Não Reiniciar", "Download CSV (X alerts)_one": "Baixar CSV ({{count}} alerta)", "Download CSV (X alerts)_many": "Baixar CSV ({{count}} alertas)", "Download CSV (X alerts)_other": "Baixar CSV ({{count}} alertas)", @@ -99,9 +102,12 @@ "info": "informação", "Invalid presets file": "Ficheiro de predefinições inválido", "JSON Path": "Caminho JSON", + "Last Completed": "Último Concluído", + "Last Requested": "Último Solicitado", "Last Status Change At": "Última Alteração de Estado às", "Last Status Change By": "Última Alteração de Estado por", "Latest Alert At": "Último Alerta às", + "Latest Log Entry": "Última Entrada de Registo", "Latest Log Entry At": "Última Entrada de Registo às", "Latest Log Entry Type": "Último Tipo de Entrada de Registo", "Latest Note": "Última Nota", @@ -110,13 +116,13 @@ "Links": "Links", "Live Incidents Console": "Consola de Incidentes ao Vivo", "Live Incidents Console will reload to apply the new presets": "A Consola de Incidentes ao Vivo será recarregada para aplicar as novas predefinições", + "Live Updates": "Atualizações ao Vivo", "Live updates disabled": "Atualizações ao Vivo Desativadas", "Live updates enabled": "Live updates enabled", "Load Presets from File": "Carregar Predefinições de Ficheiro", "Load/Save Presets": "Carregar/Gravar Predefinições", "Locale": "Região", "Log App State to console": "Registar Estado da Aplicação na consola", - "Log Entries": "Entradas de Registo", "Log Out": "Terminar Sessão", "Low": "Baixo", "Main menu": "Menu principal", @@ -133,6 +139,7 @@ "Move X alerts to another incident_one": "Mover 1 alerta para outro incidente", "Move X alerts to another incident_many": "Mover {{count}} alertas para outro incidente", "Move X alerts to another incident_other": "Mover {{count}} alertas para outro incidente", + "n/a": "n/d", "New Incidents": "Novos Incidentes", "No Incidents Found": "Nenhum Incidente Encontrado", "Not requested": "Não solicitado", @@ -143,6 +150,7 @@ "on": "em", "Open Incidents": "Incidentes Abertos", "Please contact the associated site owner for access": "Por favor entre em contato com o proprietário do site associado para obter acesso", + "Polling": "A sondar", "Presets file is for a different subdomain": "O ficheiro de predefinições é para um subdomínio diferente", "Presets loaded": "Predefinições carregadas", "Priority": "Prioridade", @@ -153,7 +161,9 @@ "Reassign": "Reatribuir", "Reassign To": "Reatribuir a", "Reassigning": "A reatribuir", + "Reauthorize": "Reautorizar", "Refresh Incidents": "Atualizar Incidentes", + "Refresh OAuth Token": "Atualizar Token OAuth", "Refreshing": "Atualizando", "Relative Dates": "Datas Relativas", "Requested additional response for": "Resposta adicional solicitada para", @@ -164,6 +174,7 @@ "Responders": "Respondentes", "response play for": "conjunto de respostas para", "Response Plays": "Conjunto de Respostas", + "Restart canceled": "Reinício cancelado", "Run Action": "Executar Ação", "running": "executando", "Running custom action": "A executar ação personalizada", @@ -199,6 +210,7 @@ "Teams": "Equipas", "Text to add": "Texto a adicionar", "The alerts of the selected incidents will be merged into a single incident": "Os alertas dos incidentes selecionados serão combinados num único incidente", + "The application will restart in X seconds.": "A aplicação será reiniciada em {{seconds}} segundos.", "The remaining selected incidents will be resolved after the merge is complete": "Os restantes incidentes selecionados serão resolvidos, uma vez completa a combinação", "Time": "Hora", "Title": "Título", @@ -208,14 +220,15 @@ "triggered for": "acionado para", "Unable to fetch account abilities": "Não foi possível obter as capacidades da conta", "Unable to fetch current user details": "Não foi possível obter os dados atuais do utilizador", - "Unable to fetch log entries": "Não foi possível obter as entradas de registro", "Unauthorized Access": "Acesso não autorizado", + "Unauthorized. Please re-authorize.": "Não autorizado. Por favor, reautorize.", "Unknown error while using PD API": "Erro desconhecido ao usar a API da PD", "Until": "Até", "Update Priority": "Atualizar Prioridade", "Updated At": "Atualizado às", "Updated user profile settings": "Configurações de perfil de utilizador atualizadas", "Updating priority": "A atualizar prioridade", + "Updating titles": "A atualizar títulos", "Urgency": "Urgência", "User is not permitted to access this instance of PagerDuty Live": "O utilizador não tem permissão para aceder a esta instância do PagerDuty Live", "Users": "Utilizadores", diff --git a/src/redux/connection/actions.js b/src/redux/connection/actions.js index a9588325..62eaaf70 100644 --- a/src/redux/connection/actions.js +++ b/src/redux/connection/actions.js @@ -4,17 +4,31 @@ export const UPDATE_CONNECTION_STATUS_COMPLETED = 'UPDATE_CONNECTION_STATUS_COMP export const UPDATE_QUEUE_STATS_REQUESTED = 'UPDATE_QUEUE_STATS_REQUESTED'; export const UPDATE_QUEUE_STATS_COMPLETED = 'UPDATE_QUEUE_STATS_COMPLETED'; +export const START_QUEUE_STATS_POLLING = 'START_QUEUE_STATS_POLLING'; +export const STOP_QUEUE_STATS_POLLING = 'STOP_QUEUE_STATS_POLLING'; export const CHECK_CONNECTION_STATUS_REQUESTED = 'CHECK_CONNECTION_STATUS_REQUESTED'; export const CHECK_CONNECTION_STATUS_COMPLETED = 'CHECK_CONNECTION_STATUS_COMPLETED'; +export const START_CONNECTION_STATUS_POLLING = 'START_CONNECTION_STATUS_POLLING'; +export const STOP_CONNECTION_STATUS_POLLING = 'STOP_CONNECTION_STATUS_POLLING'; export const CHECK_ABILITIES_REQUESTED = 'CHECK_ABILITIES_REQUESTED'; export const CHECK_ABILITIES_COMPLETED = 'CHECK_ABILITIES_COMPLETED'; export const CHECK_ABILITIES_ERROR = 'CHECK_ABILITIES_ERROR'; +export const START_ABILITIES_POLLING = 'START_ABILITIES_POLLING'; +export const STOP_ABILITIES_POLLING = 'STOP_ABILITIES_POLLING'; + +export const OAUTH_REFRESH_REQUESTED = 'OAUTH_REFRESH_REQUESTED'; +export const OAUTH_REFRESH_COMPLETED = 'OAUTH_REFRESH_COMPLETED'; +export const OAUTH_REFRESH_ERROR = 'OAUTH_REFRESH_ERROR'; +export const START_OAUTH_REFRESH_POLLING = 'START_OAUTH_REFRESH_POLLING'; +export const STOP_OAUTH_REFRESH_POLLING = 'STOP_OAUTH_REFRESH_POLLING'; export const SAVE_ERROR_REQUESTED = 'SAVE_ERROR_REQUESTED'; export const SAVE_ERROR_COMPLETED = 'SAVE_ERROR_COMPLETED'; +export const CATASTROPHE = 'CATASTROPHE'; + // Define Actions export const updateConnectionStatus = ( connectionStatus, diff --git a/src/redux/connection/reducers.js b/src/redux/connection/reducers.js index ae664876..e14b7235 100644 --- a/src/redux/connection/reducers.js +++ b/src/redux/connection/reducers.js @@ -8,13 +8,23 @@ import { UPDATE_CONNECTION_STATUS_COMPLETED, UPDATE_QUEUE_STATS_REQUESTED, UPDATE_QUEUE_STATS_COMPLETED, + START_QUEUE_STATS_POLLING, + STOP_QUEUE_STATS_POLLING, CHECK_CONNECTION_STATUS_REQUESTED, CHECK_CONNECTION_STATUS_COMPLETED, + START_CONNECTION_STATUS_POLLING, + STOP_CONNECTION_STATUS_POLLING, CHECK_ABILITIES_REQUESTED, CHECK_ABILITIES_COMPLETED, CHECK_ABILITIES_ERROR, + START_ABILITIES_POLLING, + STOP_ABILITIES_POLLING, + OAUTH_REFRESH_REQUESTED, + OAUTH_REFRESH_COMPLETED, + OAUTH_REFRESH_ERROR, SAVE_ERROR_REQUESTED, SAVE_ERROR_COMPLETED, + CATASTROPHE, } from './actions'; const connection = produce( @@ -45,6 +55,14 @@ const connection = produce( draft.queueStats = action.queueStats; break; + case START_QUEUE_STATS_POLLING: + draft.status = START_QUEUE_STATS_POLLING; + break; + + case STOP_QUEUE_STATS_POLLING: + draft.status = STOP_QUEUE_STATS_POLLING; + break; + case CHECK_CONNECTION_STATUS_REQUESTED: draft.status = CHECK_CONNECTION_STATUS_REQUESTED; break; @@ -53,6 +71,14 @@ const connection = produce( draft.status = CHECK_CONNECTION_STATUS_COMPLETED; break; + case START_CONNECTION_STATUS_POLLING: + draft.status = START_CONNECTION_STATUS_POLLING; + break; + + case STOP_CONNECTION_STATUS_POLLING: + draft.status = STOP_CONNECTION_STATUS_POLLING; + break; + case CHECK_ABILITIES_REQUESTED: draft.status = CHECK_ABILITIES_REQUESTED; break; @@ -62,6 +88,26 @@ const connection = produce( draft.abilities = action.abilities; break; + case START_ABILITIES_POLLING: + draft.status = START_ABILITIES_POLLING; + break; + + case STOP_ABILITIES_POLLING: + draft.status = STOP_ABILITIES_POLLING; + break; + + case OAUTH_REFRESH_REQUESTED: + draft.status = OAUTH_REFRESH_REQUESTED; + break; + + case OAUTH_REFRESH_COMPLETED: + draft.status = OAUTH_REFRESH_COMPLETED; + break; + + case OAUTH_REFRESH_ERROR: + draft.status = OAUTH_REFRESH_ERROR; + break; + case CHECK_ABILITIES_ERROR: draft.status = CHECK_ABILITIES_ERROR; break; @@ -78,6 +124,11 @@ const connection = produce( } break; + case CATASTROPHE: + draft.status = CATASTROPHE; + draft.connectionStatusMessage = action.connectionStatusMessage; + break; + default: break; } diff --git a/src/redux/connection/sagas.js b/src/redux/connection/sagas.js index c9e0af57..230ba228 100644 --- a/src/redux/connection/sagas.js +++ b/src/redux/connection/sagas.js @@ -1,10 +1,11 @@ import { - put, call, select, takeLatest, take, + put, call, select, takeLatest, take, race, delay, } from 'redux-saga/effects'; import i18next from 'src/i18n'; import { + getLimiterStats, throttledPdAxiosRequest, } from 'src/util/pd-api-wrapper'; @@ -18,7 +19,10 @@ import { } from 'src/util/sagas'; import { - PD_REQUIRED_ABILITY, DEBUG_DISABLE_POLLING, + PD_OAUTH_CLIENT_ID, + PD_OAUTH_CLIENT_SECRET, + PD_REQUIRED_ABILITY, + DEBUG_DISABLE_POLLING, } from 'src/config/constants'; import { @@ -26,11 +30,22 @@ import { UPDATE_CONNECTION_STATUS_COMPLETED, UPDATE_QUEUE_STATS_REQUESTED, UPDATE_QUEUE_STATS_COMPLETED, + START_QUEUE_STATS_POLLING, + STOP_QUEUE_STATS_POLLING, CHECK_CONNECTION_STATUS_REQUESTED, CHECK_CONNECTION_STATUS_COMPLETED, + START_CONNECTION_STATUS_POLLING, + STOP_CONNECTION_STATUS_POLLING, CHECK_ABILITIES_REQUESTED, CHECK_ABILITIES_COMPLETED, CHECK_ABILITIES_ERROR, + START_ABILITIES_POLLING, + STOP_ABILITIES_POLLING, + OAUTH_REFRESH_REQUESTED, + OAUTH_REFRESH_COMPLETED, + OAUTH_REFRESH_ERROR, + START_OAUTH_REFRESH_POLLING, + STOP_OAUTH_REFRESH_POLLING, SAVE_ERROR_REQUESTED, SAVE_ERROR_COMPLETED, } from './actions'; @@ -65,6 +80,20 @@ export function* updateQueueStatsImpl(action) { }); } +export function* updateQueueStatsTask() { + while (true) { + yield call(updateQueueStatsImpl, { queueStats: getLimiterStats() }); + yield delay(1000); + } +} + +export function* updateQueueStatsTaskWatcher() { + while (true) { + yield take(START_QUEUE_STATS_POLLING); + yield race([call(updateQueueStatsTask), take(STOP_QUEUE_STATS_POLLING)]); + } +} + export function* checkConnectionStatus() { yield takeLatest(CHECK_CONNECTION_STATUS_REQUESTED, checkConnectionStatusImpl); } @@ -77,21 +106,31 @@ export function* checkConnectionStatusImpl() { } // Check entire store for fulfilled statuses - const store = yield select(); + const { + incidents: { + status: incidentsStatus, + }, + logEntries: { + status: logEntriesStatus, + }, + extensions: { + status: extensionsStatus, + }, + connection: { + abilities, + connectionStatusMessage, + }, + } = yield select(); let validConnection = false; if ( - store.incidents.status.includes('COMPLETED') - && store.logEntries.status.includes('COMPLETED') - && store.extensions.status.includes('COMPLETED') + incidentsStatus.includes('COMPLETED') + && logEntriesStatus.includes('COMPLETED') + && extensionsStatus.includes('COMPLETED') ) { // Ignoring priorities as this is persisted to localcache validConnection = true; } - // Update connection status depending on store state - const { - abilities, - } = store.connection; if (DEBUG_DISABLE_POLLING) { yield updateConnectionStatusRequested('negative', i18next.t('Live updates disabled')); } else if (validConnection) { @@ -108,11 +147,25 @@ export function* checkConnectionStatusImpl() { } else if (!abilities.includes(PD_REQUIRED_ABILITY)) { yield updateConnectionStatusRequested('negative', MISSING_ABILITY_ERROR); } else { - yield updateConnectionStatusRequested('neutral', store.connection.connectionStatusMessage); + yield updateConnectionStatusRequested('neutral', connectionStatusMessage); } yield put({ type: CHECK_CONNECTION_STATUS_COMPLETED }); } +export function* checkConnectionStatusTask() { + while (true) { + yield call(checkConnectionStatusImpl); + yield delay(1000); + } +} + +export function* checkConnectionStatusTaskWatcher() { + while (true) { + yield take(START_CONNECTION_STATUS_POLLING); + yield race([call(checkConnectionStatusTask), take(STOP_CONNECTION_STATUS_POLLING)]); + } +} + export function* checkAbilities() { yield takeLatest(CHECK_ABILITIES_REQUESTED, checkAbilitiesAsync); } @@ -146,6 +199,93 @@ export function* checkAbilitiesAsync() { } } +export function* checkAbilitiesTask() { + while (true) { + yield call(checkAbilitiesAsync); + yield delay(300_000); + } +} + +export function* checkAbilitiesTaskWatcher() { + while (true) { + yield take(START_ABILITIES_POLLING); + yield race([call(checkAbilitiesTask), take(STOP_ABILITIES_POLLING)]); + } +} + +export function* refreshOauth() { + yield takeLatest(OAUTH_REFRESH_REQUESTED, refreshOauthImpl); +} + +export function* refreshOauthImpl() { + const postData = async (url, data) => { + const formData = new URLSearchParams(data); // Convert data to URL-encoded form data + const response = await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', // Set the content type + }, + body: formData.toString(), // Convert the form data to a string + }); + const json = await response.json(); // Parse the response JSON + return json; + }; + + const refreshToken = sessionStorage.getItem('pd_refresh_token'); + if (!refreshToken) { + yield put({ type: OAUTH_REFRESH_ERROR, message: 'No refresh token found' }); + } + + const requestTokenUrl = 'https://identity.pagerduty.com/oauth/token'; + const formData = { + grant_type: 'refresh_token', + client_id: PD_OAUTH_CLIENT_ID, + client_secret: PD_OAUTH_CLIENT_SECRET, + refresh_token: refreshToken, + }; + + const response = yield call(postData, requestTokenUrl, formData); + const { + access_token: accessToken, + refresh_token: newRefreshToken, + expires_in: expiresIn, + } = response; + if (!accessToken || !newRefreshToken || !expiresIn) { + yield put({ type: OAUTH_REFRESH_ERROR, message: 'Invalid response from OAuth server' }); + } else { + sessionStorage.setItem('pd_access_token', accessToken); + sessionStorage.setItem('pd_refresh_token', newRefreshToken); + sessionStorage.setItem('pd_token_expires_at', Date.now() + expiresIn * 1000); + yield put({ type: OAUTH_REFRESH_COMPLETED }); + } +} + +export function* checkForTokenExpiry() { + while (true) { + const tokenExpiresAtStr = sessionStorage.getItem('pd_token_expires_at'); + const refreshToken = sessionStorage.getItem('pd_refresh_token'); + if ( + (typeof refreshToken === 'string') + && (refreshToken.startsWith('pd')) + && (typeof tokenExpiresAtStr === 'string') + && (/^-?\d+$/.test(tokenExpiresAtStr)) + ) { + const tokenExpiresAt = new Date(parseInt(tokenExpiresAtStr, 10)); + if (tokenExpiresAt && (Date.now() + 60_000 > tokenExpiresAt)) { + yield put({ type: OAUTH_REFRESH_REQUESTED }); + } + } + yield delay(60_000); + } +} + +export function* checkForTokenExpiryWatcher() { + while (true) { + yield take(START_OAUTH_REFRESH_POLLING); + yield race([call(checkForTokenExpiry), take(STOP_OAUTH_REFRESH_POLLING)]); + } +} + export function* saveError() { yield takeLatest(SAVE_ERROR_REQUESTED, saveErrorImpl); } diff --git a/src/redux/escalation_policies/sagas.js b/src/redux/escalation_policies/sagas.js index 94685fc4..8f062a6b 100644 --- a/src/redux/escalation_policies/sagas.js +++ b/src/redux/escalation_policies/sagas.js @@ -32,6 +32,7 @@ export function* getEscalationPolicies() { // Handle API auth failure if (e.response?.status === 401) { e.message = i18next.t('Unauthorized Access'); + throw e; } yield put({ type: FETCH_ESCALATION_POLICIES_ERROR, message: e.message }); yield put({ diff --git a/src/redux/extensions/sagas.js b/src/redux/extensions/sagas.js index 9bd51549..62da57ae 100644 --- a/src/redux/extensions/sagas.js +++ b/src/redux/extensions/sagas.js @@ -45,6 +45,7 @@ export function* getExtensions() { // Handle API auth failure if (e.response?.status === 401) { e.message = i18next.t('Unauthorized Access'); + throw e; } yield put({ type: FETCH_EXTENSIONS_ERROR, message: e.message }); yield put({ diff --git a/src/redux/incident_actions/actions.js b/src/redux/incident_actions/actions.js index fef16377..7c8bec7f 100644 --- a/src/redux/incident_actions/actions.js +++ b/src/redux/incident_actions/actions.js @@ -34,6 +34,7 @@ export const TOGGLE_DISPLAY_CUSTOM_SNOOZE_MODAL_REQUESTED = 'TOGGLE_DISPLAY_CUST export const TOGGLE_DISPLAY_CUSTOM_SNOOZE_MODAL_COMPLETED = 'TOGGLE_DISPLAY_CUSTOM_SNOOZE_MODAL_COMPLETED'; export const MERGE_REQUESTED = 'MERGE_REQUESTED'; +export const MERGE_PROGRESS = 'MERGE_PROGRESS'; export const MERGE_COMPLETED = 'MERGE_COMPLETED'; export const MERGE_ERROR = 'MERGE_ERROR'; diff --git a/src/redux/incident_actions/reducers.js b/src/redux/incident_actions/reducers.js index 544cf127..d20a587a 100644 --- a/src/redux/incident_actions/reducers.js +++ b/src/redux/incident_actions/reducers.js @@ -28,6 +28,7 @@ import { TOGGLE_DISPLAY_CUSTOM_SNOOZE_MODAL_REQUESTED, TOGGLE_DISPLAY_CUSTOM_SNOOZE_MODAL_COMPLETED, MERGE_REQUESTED, + MERGE_PROGRESS, MERGE_COMPLETED, MERGE_ERROR, TOGGLE_DISPLAY_MERGE_MODAL_REQUESTED, @@ -168,14 +169,24 @@ const incidentActions = produce( case MERGE_REQUESTED: draft.status = MERGE_REQUESTED; + draft.mergeProgress = { + total: 1, + complete: 0, + }; + break; + + case MERGE_PROGRESS: + draft.mergeProgress = action.mergeProgress; break; case MERGE_COMPLETED: draft.mergedIncident = action.mergedIncident; + draft.mergeProgress = {}; draft.status = MERGE_COMPLETED; break; case MERGE_ERROR: + draft.mergeProgress = {}; draft.status = MERGE_ERROR; draft.error = action.message; break; @@ -302,6 +313,7 @@ const incidentActions = produce( displayCustomSnoozeModal: false, displayAddNoteModal: false, displayMergeModal: false, + mergeProgress: {}, status: '', fetchingData: false, error: null, diff --git a/src/redux/incident_actions/sagas.js b/src/redux/incident_actions/sagas.js index 6aafeaa4..2b98d7e0 100644 --- a/src/redux/incident_actions/sagas.js +++ b/src/redux/incident_actions/sagas.js @@ -64,6 +64,7 @@ import { TOGGLE_DISPLAY_CUSTOM_SNOOZE_MODAL_REQUESTED, TOGGLE_DISPLAY_CUSTOM_SNOOZE_MODAL_COMPLETED, MERGE_REQUESTED, + MERGE_PROGRESS, MERGE_COMPLETED, MERGE_ERROR, TOGGLE_DISPLAY_MERGE_MODAL_REQUESTED, @@ -90,7 +91,7 @@ import { } from './actions'; import { - PROCESS_LOG_ENTRIES_COMPLETED, UPDATE_INCIDENTS, + PROCESS_LOG_ENTRIES_COMPLETED, UPDATE_INCIDENTS, getIncidentsAsync, } from '../incidents/actions'; const chunkedPdAxiosRequestCalls = ( @@ -156,7 +157,7 @@ export function* acknowledge(action) { const errors = responses.filter((response) => response.status !== 200); if (errors.length > 0) { - handleMultipleAPIErrorResponses(errors); + yield call(handleMultipleAPIErrorResponses, errors); } if (acknowledgedIncidents.length > 0) { @@ -209,7 +210,7 @@ export function* escalate(action) { const errors = responses.filter((response) => response.status !== 200); if (errors.length > 0) { - handleMultipleAPIErrorResponses(errors); + yield call(handleMultipleAPIErrorResponses, errors); } if (escalatedIncidents.length > 0) { @@ -278,7 +279,7 @@ export function* reassign(action) { const errors = responses.filter((response) => response.status !== 200); if (errors.length > 0) { - handleMultipleAPIErrorResponses(errors); + yield call(handleMultipleAPIErrorResponses, errors); } if (reassignedIncidents.length > 0) { @@ -371,7 +372,7 @@ export function* addResponder(action) { updatedIncidentResponderRequests: responses, }); } else { - handleMultipleAPIErrorResponses(responses); + yield call(handleMultipleAPIErrorResponses, responses); } } catch (e) { yield call(handleSagaError, ADD_RESPONDER_ERROR, e); @@ -451,7 +452,7 @@ export function* snooze(action) { snoozedIncidents: updatedIncidents, }); } else { - handleMultipleAPIErrorResponses(responses); + yield call(handleMultipleAPIErrorResponses, responses); } } catch (e) { yield call(handleSagaError, SNOOZE_ERROR, e); @@ -481,61 +482,89 @@ export function* mergeAsync() { export function* merge(action) { try { + const { + displayMergeModal, + // mergeProgress, + } = yield select(selectIncidentActions); const { targetIncident, incidents, displayModal, addToTitleText, } = action; const incidentsToBeMerged = [...incidents]; - // Build request manually given PUT - const data = { - source_incidents: incidentsToBeMerged.map((incident) => ({ + // split incidentsToBeMerged into chunks + const incidentChunks = chunkArray(incidentsToBeMerged, 25); + const incidentBodies = incidentChunks.map((chunk) => ({ + source_incidents: chunk.map((incident) => ({ id: incident.id, type: 'incident_reference', })), - }; + })); - const response = yield call( + const numRequests = incidentBodies.length + (addToTitleText ? 1 : 0); + let complete = 0; + yield put({ + type: MERGE_PROGRESS, + mergeProgress: { + total: numRequests, + complete, + }, + }); + + const mergeRequests = incidentBodies.map((incidentBody) => call( throttledPdAxiosRequest, 'PUT', `incidents/${targetIncident.id}/merge`, null, - data, + incidentBody, { priority: 1, expiration: 5 * 60 * 1000, }, - ); - - if (response.status >= 200 && response.status < 300) { - yield toggleDisplayMergeModalImpl(); - - const mergedIncident = response.data.incident; - const resolvedIncidents = incidentsToBeMerged.map((incident) => ({ - id: incident.id, - status: RESOLVED, - })); - yield put({ - type: UPDATE_INCIDENTS, - updatedIncidents: [...resolvedIncidents, mergedIncident], - }); + )); - if (displayModal) { - const actionAlertsModalType = 'success'; - const actionAlertsModalMessage = `${i18next.t('Incident')}(s) ${incidentsToBeMerged - .map((i) => i.incident_number) - .join(', ')} ${i18next.t('and their alerts have been merged onto incident')} - ${targetIncident.incident_number}`; - yield displayActionModal(actionAlertsModalType, actionAlertsModalMessage); + // eslint-disable-next-line no-restricted-syntax + for (const mergeRequest of mergeRequests) { + const response = yield mergeRequest; + if (response.status !== 200) { + yield call(handleSingleAPIErrorResponse, response); + yield put({ + type: MERGE_ERROR, + message: 'Error merging incidents', + }); + yield getIncidentsAsync(); + return; } + complete += 1; yield put({ - type: MERGE_COMPLETED, - mergedIncident, + type: MERGE_PROGRESS, + mergeProgress: { + total: numRequests, + complete, + }, }); - } else { - handleSingleAPIErrorResponse(response); } + const mergedIncidentResp = yield getIncidentByIdRequest(targetIncident.id); + const mergedIncident = mergedIncidentResp.data.incident; + const resolvedIncidents = incidentsToBeMerged.map((incident) => ({ + id: incident.id, + status: RESOLVED, + })); + + yield put({ + type: UPDATE_INCIDENTS, + updatedIncidents: [...resolvedIncidents, mergedIncident], + }); + if (addToTitleText) { + yield put({ + type: MERGE_PROGRESS, + mergeProgress: { + total: numRequests, + complete, + updatingTitles: true, + }, + }); const titleUpdates = incidentsToBeMerged.map((incident) => call( throttledPdAxiosRequest, 'PUT', @@ -553,11 +582,10 @@ export function* merge(action) { }, )); const titleResponses = yield all(titleUpdates); + const successes = titleResponses.filter((r) => r.status >= 200 && r.status < 300); if (successes.length !== titleResponses.length) { - handleMultipleAPIErrorResponses( - titleResponses.filter((r) => !(r.status >= 200 && r.status < 300)), - ); + yield call(handleMultipleAPIErrorResponses, titleResponses); } const updatedIncidents = successes.map((r) => r.data.incident); yield put({ @@ -565,6 +593,21 @@ export function* merge(action) { updatedIncidents, }); } + if (displayModal) { + const actionAlertsModalType = 'success'; + const actionAlertsModalMessage = `${i18next.t('Incident')}(s) ${incidentsToBeMerged + .map((i) => i.incident_number) + .join(', ')} ${i18next.t('and their alerts have been merged onto incident')} + ${targetIncident.incident_number}`; + yield displayActionModal(actionAlertsModalType, actionAlertsModalMessage); + } + if (displayMergeModal) { + yield toggleDisplayMergeModalImpl(); + } + yield put({ + type: MERGE_COMPLETED, + mergedIncident, + }); } catch (e) { yield call(handleSagaError, MERGE_ERROR, e); } @@ -614,7 +657,7 @@ export function* resolve(action) { const errors = responses.filter((response) => response.status !== 200); if (errors.length > 0) { - handleMultipleAPIErrorResponses(errors); + yield call(handleMultipleAPIErrorResponses, errors); } if (resolvedIncidents.length > 0) { @@ -705,7 +748,7 @@ export function* updatePriority(action) { yield displayActionModal(actionAlertsModalType, actionAlertsModalMessage); } } else { - handleMultipleAPIErrorResponses(responses); + yield call(handleMultipleAPIErrorResponses, responses); } } catch (e) { yield call(handleSagaError, UPDATE_PRIORITY_ERROR, e); @@ -755,7 +798,7 @@ export function* addNote(action) { updatedIncidentNotes: responses, }); } else { - handleMultipleAPIErrorResponses(responses); + yield call(handleMultipleAPIErrorResponses, responses); } } catch (e) { yield call(handleSagaError, ADD_NOTE_ERROR, e); @@ -823,7 +866,7 @@ export function* runCustomIncidentAction(action) { yield displayActionModal(actionAlertsModalType, actionAlertsModalMessage); } } else { - handleMultipleAPIErrorResponses(responses); + yield call(handleMultipleAPIErrorResponses, responses); } } catch (e) { yield call(handleSagaError, RUN_CUSTOM_INCIDENT_ACTION_ERROR, e); @@ -925,7 +968,7 @@ export function* syncWithExternalSystem(action) { yield displayActionModal(actionAlertsModalType, actionAlertsModalMessage); } } else { - handleMultipleAPIErrorResponses(responses); + yield call(handleMultipleAPIErrorResponses, responses); } } catch (e) { yield call(handleSagaError, SYNC_WITH_EXTERNAL_SYSTEM_ERROR, e); diff --git a/src/redux/incident_table/actions.js b/src/redux/incident_table/actions.js index f96e0f48..6895c487 100644 --- a/src/redux/incident_table/actions.js +++ b/src/redux/incident_table/actions.js @@ -12,6 +12,9 @@ export const UPDATE_INCIDENT_TABLE_STATE_COMPLETED = 'UPDATE_INCIDENT_TABLE_STAT export const SELECT_INCIDENT_TABLE_ROWS_REQUESTED = 'SELECT_INCIDENT_TABLE_ROWS_REQUESTED'; export const SELECT_INCIDENT_TABLE_ROWS_COMPLETED = 'SELECT_INCIDENT_TABLE_ROWS_COMPLETED'; +export const CLEAR_INCIDENT_TABLE_FILTERS_REQUESTED = 'CLEAR_INCIDENT_TABLE_FILTERS_REQUESTED'; +export const CLEAR_INCIDENT_TABLE_FILTERS_COMPLETED = 'CLEAR_INCIDENT_TABLE_FILTERS_COMPLETED'; + // Define Actions export const saveIncidentTable = (updatedIncidentTableColumns) => ({ @@ -35,3 +38,7 @@ export const selectIncidentTableRows = (allSelected, selectedCount, selectedRows selectedCount, selectedRows, }); + +export const clearIncidentTableFilters = () => ({ + type: CLEAR_INCIDENT_TABLE_FILTERS_REQUESTED, +}); diff --git a/src/redux/incident_table/reducers.js b/src/redux/incident_table/reducers.js index 652115ad..a7f8d3f8 100644 --- a/src/redux/incident_table/reducers.js +++ b/src/redux/incident_table/reducers.js @@ -12,6 +12,8 @@ import { UPDATE_INCIDENT_TABLE_STATE_COMPLETED, SELECT_INCIDENT_TABLE_ROWS_REQUESTED, SELECT_INCIDENT_TABLE_ROWS_COMPLETED, + CLEAR_INCIDENT_TABLE_FILTERS_REQUESTED, + CLEAR_INCIDENT_TABLE_FILTERS_COMPLETED, } from './actions'; const defaultColumns = [ @@ -70,6 +72,18 @@ const incidentTable = produce( draft.status = SELECT_INCIDENT_TABLE_ROWS_COMPLETED; break; + case CLEAR_INCIDENT_TABLE_FILTERS_REQUESTED: + draft.status = CLEAR_INCIDENT_TABLE_FILTERS_REQUESTED; + break; + + case CLEAR_INCIDENT_TABLE_FILTERS_COMPLETED: + draft.incidentTableState = { + ...draft.incidentTableState, + filters: [], + }; + draft.status = CLEAR_INCIDENT_TABLE_FILTERS_COMPLETED; + break; + default: break; } diff --git a/src/redux/incident_table/sagas.js b/src/redux/incident_table/sagas.js index 36641803..dcf69ada 100644 --- a/src/redux/incident_table/sagas.js +++ b/src/redux/incident_table/sagas.js @@ -16,6 +16,8 @@ import { UPDATE_INCIDENT_TABLE_STATE_COMPLETED, SELECT_INCIDENT_TABLE_ROWS_REQUESTED, SELECT_INCIDENT_TABLE_ROWS_COMPLETED, + CLEAR_INCIDENT_TABLE_FILTERS_REQUESTED, + CLEAR_INCIDENT_TABLE_FILTERS_COMPLETED, } from './actions'; import selectIncidentTable from './selectors'; @@ -122,3 +124,13 @@ export function* selectIncidentTableRowsImpl(action) { selectedRows, }); } + +export function* clearIncidentTableFilters() { + yield takeLatest(CLEAR_INCIDENT_TABLE_FILTERS_REQUESTED, clearIncidentTableFiltersImpl); +} + +export function* clearIncidentTableFiltersImpl() { + yield put({ + type: CLEAR_INCIDENT_TABLE_FILTERS_COMPLETED, + }); +} diff --git a/src/redux/incidents/reducers.js b/src/redux/incidents/reducers.js index 163045ba..4a6114bf 100644 --- a/src/redux/incidents/reducers.js +++ b/src/redux/incidents/reducers.js @@ -2,6 +2,8 @@ import { produce, } from 'immer'; +import RealUserMonitoring from 'src/config/monitoring'; + import { UPDATE_INCIDENT_REDUCER_STATUS, UPDATE_INCIDENT_LAST_FETCH_DATE, @@ -37,6 +39,12 @@ import { const uniqOnId = (arr) => { const map = new Map(); arr.forEach((item) => { + if (!(item?.id)) { + RealUserMonitoring.trackError(new Error('incidents/reducers:uniqOnId: item does not have an id'), { + item, + }); + return; + } map.set(item.id, item); }); return [...map.values()]; @@ -48,6 +56,7 @@ const incidents = produce( case FETCH_INCIDENTS_REQUESTED: draft.fetchingIncidents = true; draft.status = FETCH_INCIDENTS_REQUESTED; + draft.error = null; break; case FETCH_INCIDENTS_COMPLETED: diff --git a/src/redux/incidents/sagas.js b/src/redux/incidents/sagas.js index 0a517596..f7614b3e 100644 --- a/src/redux/incidents/sagas.js +++ b/src/redux/incidents/sagas.js @@ -4,6 +4,7 @@ import { import Fuse from 'fuse.js'; +import RealUserMonitoring from 'src/config/monitoring'; import { pd, // throttledPdAxiosRequest, @@ -192,12 +193,27 @@ export function* getAlertsForIncidents(action) { undefined, { priority: 6 }, ); + if (!(alertsChunk instanceof Array)) { + RealUserMonitoring.trackError(new Error('alertsChunk is not an array'), alertsChunk); + // eslint-disable-next-line no-continue + continue; + } const alertsChunkByIncidentId = incidentIdChunk.reduce((acc, incidentId) => { - // eslint-disable-next-line no-param-reassign - acc[incidentId] = []; + if (typeof incidentId !== 'string') { + RealUserMonitoring.trackError(new Error('incidentId is not a string'), incidentId); + } else { + // eslint-disable-next-line no-param-reassign + acc[incidentId] = []; + } return acc; }, {}); alertsChunk.forEach((alert) => { + if (!(alert?.incident?.id) || !(alertsChunkByIncidentId[alert.incident.id] instanceof Array)) { + RealUserMonitoring.trackError( + new Error('alert is missing incident id or alertsChunkByIncidentId is not an array'), alert, + ); + return; + } alertsChunkByIncidentId[alert.incident.id].push(alert); }); yield put({ @@ -232,12 +248,27 @@ export function* getNotesForIncidents(action) { undefined, { priority: 6 }, ); + if (!(notesChunk instanceof Array)) { + RealUserMonitoring.trackError(new Error('notesChunk is not an array'), notesChunk); + // eslint-disable-next-line no-continue + continue; + } const notesChunkByIncidentId = incidentIdChunk.reduce((acc, incidentId) => { - // eslint-disable-next-line no-param-reassign - acc[incidentId] = []; + if (typeof incidentId !== 'string') { + RealUserMonitoring.trackError(new Error('incidentId is not a string'), incidentId); + } else { + // eslint-disable-next-line no-param-reassign + acc[incidentId] = []; + } return acc; }, {}); notesChunk.forEach((note) => { + if (!(note?.incident?.id) || !(notesChunkByIncidentId[note.incident.id] instanceof Array)) { + RealUserMonitoring.trackError( + new Error('note is missing incident id or notesChunkByIncidentId is not an array'), note, + ); + return; + } notesChunkByIncidentId[note.incident.id].push(note); }); // dispatch FETCH_NOTES_FOR_INCIDENTS_COMPLETED @@ -273,6 +304,12 @@ export function* processLogEntriesImpl(action) { for (let i = 0; i < logEntries.length; i += 1) { const logEntry = logEntries[i]; + if (!logEntry.incident) { + // log entry does not have an incident, skip + RealUserMonitoring.trackError(new Error('Log entry does not have an incident'), logEntry); + // eslint-disable-next-line no-continue + continue; + } // update latest log entry if ( !incidentLatestLogEntryMap[logEntry.incident.id] @@ -551,7 +588,7 @@ export function* filterIncidentsImpl() { .map((res) => filteredIncidentsByQuery[res.refIndex]); } catch (e) { // eslint-disable-next-line no-console - console.log('Error in Fuse search', e); + console.error('Error in Fuse search', e); } } diff --git a/src/redux/log_entries/actions.js b/src/redux/log_entries/actions.js index 418dad3e..2b0c89fd 100644 --- a/src/redux/log_entries/actions.js +++ b/src/redux/log_entries/actions.js @@ -10,6 +10,12 @@ export const UPDATE_RECENT_LOG_ENTRIES_ERROR = 'UPDATE_RECENT_LOG_ENTRIES_ERROR' export const CLEAN_RECENT_LOG_ENTRIES = 'CLEAN_RECENT_LOG_ENTRIES'; export const CLEAN_RECENT_LOG_ENTRIES_COMPLETED = 'CLEAN_RECENT_LOG_ENTRIES_COMPLETED'; export const CLEAN_RECENT_LOG_ENTRIES_ERROR = 'CLEAN_RECENT_LOG_ENTRIES_ERROR'; +export const START_CLEAN_RECENT_LOG_ENTRIES_POLLING = 'START_CLEAN_RECENT_LOG_ENTRIES_POLLING'; +export const STOP_CLEAN_RECENT_LOG_ENTRIES_POLLING = 'STOP_CLEAN_RECENT_LOG_ENTRIES_POLLING'; + +export const START_LOG_ENTRIES_POLLING = 'START_LOG_ENTRIES_POLLING'; +export const UPDATE_LOG_ENTRIES_POLLING = 'UPDATE_LOG_ENTRIES_POLLING'; +export const STOP_LOG_ENTRIES_POLLING = 'STOP_LOG_ENTRIES_POLLING'; // Define Actions export const getLogEntriesAsync = (since) => ({ diff --git a/src/redux/log_entries/reducers.js b/src/redux/log_entries/reducers.js index 2050b155..f1da74bc 100644 --- a/src/redux/log_entries/reducers.js +++ b/src/redux/log_entries/reducers.js @@ -2,6 +2,10 @@ import { produce, } from 'immer'; +import { + LOG_ENTRIES_POLLING_INTERVAL_SECONDS, +} from 'src/config/constants'; + import { FETCH_LOG_ENTRIES_REQUESTED, FETCH_LOG_ENTRIES_COMPLETED, @@ -12,6 +16,11 @@ import { CLEAN_RECENT_LOG_ENTRIES, CLEAN_RECENT_LOG_ENTRIES_COMPLETED, CLEAN_RECENT_LOG_ENTRIES_ERROR, + START_CLEAN_RECENT_LOG_ENTRIES_POLLING, + STOP_CLEAN_RECENT_LOG_ENTRIES_POLLING, + START_LOG_ENTRIES_POLLING, + UPDATE_LOG_ENTRIES_POLLING, + STOP_LOG_ENTRIES_POLLING, } from './actions'; const logEntries = produce( @@ -65,18 +74,44 @@ const logEntries = produce( draft.recentLogEntries = action.recentLogEntries; break; + case START_CLEAN_RECENT_LOG_ENTRIES_POLLING: + draft.status = START_CLEAN_RECENT_LOG_ENTRIES_POLLING; + break; + + case STOP_CLEAN_RECENT_LOG_ENTRIES_POLLING: + draft.status = STOP_CLEAN_RECENT_LOG_ENTRIES_POLLING; + break; + case CLEAN_RECENT_LOG_ENTRIES_ERROR: draft.fetchingData = false; draft.status = CLEAN_RECENT_LOG_ENTRIES_ERROR; draft.error = action.message; break; + case START_LOG_ENTRIES_POLLING: + draft.pollingStatus.polling = true; + draft.status = START_LOG_ENTRIES_POLLING; + break; + + case UPDATE_LOG_ENTRIES_POLLING: + draft.pollingStatus = { + ...draft.pollingStatus, + ...action.pollingStatus, + }; + draft.status = UPDATE_LOG_ENTRIES_POLLING; + break; + + case STOP_LOG_ENTRIES_POLLING: + draft.pollingStatus.polling = false; + draft.status = STOP_LOG_ENTRIES_POLLING; + break; + default: break; } }, { - latestLogEntryDate: null, + latestLogEntryDate: new Date(new Date() - (2 * LOG_ENTRIES_POLLING_INTERVAL_SECONDS * 1000)), logEntries: [], recentLogEntries: {}, addList: [], @@ -85,6 +120,12 @@ const logEntries = produce( status: '', fetchingData: false, error: null, + pollingStatus: { + polling: false, + lastPollStarted: null, + lastPollCompleted: null, + errors: [], + }, }, ); diff --git a/src/redux/log_entries/sagas.js b/src/redux/log_entries/sagas.js index 72ee7ff6..089d9f12 100644 --- a/src/redux/log_entries/sagas.js +++ b/src/redux/log_entries/sagas.js @@ -2,16 +2,27 @@ /* eslint-disable max-len */ import { - put, call, select, takeLatest, take, + put, call, select, takeLatest, take, delay, race, } from 'redux-saga/effects'; import i18next from 'src/i18n'; +import { + handleSingleAPIErrorResponse, +} from 'src/util/sagas'; + +import { + LOG_ENTRIES_POLLING_INTERVAL_SECONDS, + LOG_ENTRIES_CLEARING_INTERVAL_SECONDS, + DEBUG_DISABLE_POLLING, +} from 'src/config/constants'; + import { pd, pdParallelFetch, } from 'src/util/pd-api-wrapper'; import { + CATASTROPHE, UPDATE_CONNECTION_STATUS_REQUESTED, } from 'src/redux/connection/actions'; import { @@ -25,6 +36,11 @@ import { CLEAN_RECENT_LOG_ENTRIES, CLEAN_RECENT_LOG_ENTRIES_COMPLETED, CLEAN_RECENT_LOG_ENTRIES_ERROR, + START_CLEAN_RECENT_LOG_ENTRIES_POLLING, + STOP_CLEAN_RECENT_LOG_ENTRIES_POLLING, + START_LOG_ENTRIES_POLLING, + UPDATE_LOG_ENTRIES_POLLING, + STOP_LOG_ENTRIES_POLLING, } from './actions'; import selectLogEntries from './selectors'; @@ -36,13 +52,16 @@ export function* getLogEntriesAsync() { export function* getLogEntries(action) { const { recentLogEntries, + pollingStatus: { + errors: pollingErrors, + }, } = yield select(selectLogEntries); - try { // Create params and call pd lib const { since, } = action; + const params = { since: since.toISOString().replace(/\.[\d]{3}/, ''), 'include[]': ['incidents', 'linked_incidents', 'external_references', 'channels'], @@ -51,22 +70,32 @@ export function* getLogEntries(action) { try { logEntries = yield call(pdParallelFetch, 'log_entries', params, null, { priority: 5, - maxRecords: 1000, + maxRecords: 5000, }); } catch (e) { if (e.message && e.message.startsWith('Too many records')) { // eslint-disable-next-line no-console - console.log(`getLogEntries: ${e.message} - fetching incidents instead`); + console.error(`getLogEntries: ${e.message} - fetching incidents instead`); + yield put({ + type: UPDATE_LOG_ENTRIES_POLLING, + pollingStatus: { + errors: [...pollingErrors, e].slice(-25), + }, + }); + // put COMPLETED action with empty log entries and update latestLogEntryDate + // so that we don't keep polling for older log entries yield put({ - type: FETCH_LOG_ENTRIES_ERROR, - message: e.message, + type: FETCH_LOG_ENTRIES_COMPLETED, + logEntries: [], + recentLogEntries, + latestLogEntryDate: new Date(), }); yield put({ type: FETCH_INCIDENTS_REQUESTED, }); return; } - throw Error(i18next.t('Unable to fetch log entries') + e.message ? `: ${e.message}` : ''); + throw e; } // Filter out log entries that are already in recent log entries map @@ -106,20 +135,88 @@ export function* getLogEntries(action) { type: PROCESS_LOG_ENTRIES, logEntries, }); - - // Call to update recent log entries with this data. - // yield call(updateRecentLogEntries); } catch (e) { - // Handle API auth failure - if (e.status === 401) { - e.message = i18next.t('Unauthorized Access'); - } + yield put({ + type: UPDATE_LOG_ENTRIES_POLLING, + pollingStatus: { + errors: [...pollingErrors, e].slice(-25), + }, + }); yield put({ type: FETCH_LOG_ENTRIES_ERROR, message: e.message }); yield put({ type: UPDATE_CONNECTION_STATUS_REQUESTED, connectionStatus: 'neutral', connectionStatusMessage: e.message, }); + // Handle API failure + if (e.response) { + yield call(handleSingleAPIErrorResponse, e.response); + } else { + throw e; + } + } +} + +export function* pollLogEntriesTask() { + while (true) { + const { + logEntries: { + latestLogEntryDate, + }, + users: { + userAuthorized, + userAcceptedDisclaimer, + }, + incidents: { + fetchingIncidents, + error: incidentsError, + }, + } = yield select(); + + const tooManyIncidentsError = ( + incidentsError + && typeof incidentsError === 'string' + && incidentsError.startsWith('Too many records') + ); + + if (userAuthorized && userAcceptedDisclaimer && !fetchingIncidents && !DEBUG_DISABLE_POLLING && !tooManyIncidentsError) { + const lastPollStarted = new Date(); + yield put({ + type: UPDATE_LOG_ENTRIES_POLLING, + pollingStatus: { + lastPollStarted, + }, + }); + yield call(getLogEntries, { since: latestLogEntryDate }); + const lastPollCompleted = new Date(); + yield put({ + type: UPDATE_LOG_ENTRIES_POLLING, + pollingStatus: { + lastPollCompleted, + }, + }); + + let timeTaken = lastPollCompleted - lastPollStarted; + if (timeTaken > LOG_ENTRIES_POLLING_INTERVAL_SECONDS * 1000) { + // if the time taken to fetch log entries is greater than the polling interval, + // then we should start the next poll immediately + timeTaken = LOG_ENTRIES_POLLING_INTERVAL_SECONDS * 1000; + } else if (timeTaken < 0) { + timeTaken = 0; + } + yield delay((LOG_ENTRIES_POLLING_INTERVAL_SECONDS * 1000) - timeTaken); + } else { + // eslint-disable-next-line no-console + console.log('skipping poll', { userAuthorized, userAcceptedDisclaimer, fetchingIncidents, DEBUG_DISABLE_POLLING, tooManyIncidentsError }); + yield delay(LOG_ENTRIES_POLLING_INTERVAL_SECONDS * 1000); + } + } +} + +export function* pollLogEntriesTaskWatcher() { + while (true) { + yield take(START_LOG_ENTRIES_POLLING); + yield race([call(pollLogEntriesTask), take(STOP_LOG_ENTRIES_POLLING)]); } } @@ -151,3 +248,17 @@ export function* cleanRecentLogEntries() { yield put({ type: CLEAN_RECENT_LOG_ENTRIES_ERROR, message: e.message }); } } + +export function* cleanRecentLogEntriesTask() { + while (true) { + yield call(cleanRecentLogEntries); + yield delay(LOG_ENTRIES_CLEARING_INTERVAL_SECONDS * 1000); + } +} + +export function* cleanRecentLogEntriesTaskWatcher() { + while (true) { + yield take(START_CLEAN_RECENT_LOG_ENTRIES_POLLING); + yield race([call(cleanRecentLogEntriesTask), take(STOP_CLEAN_RECENT_LOG_ENTRIES_POLLING)]); + } +} diff --git a/src/redux/log_entries/sagas.test.js b/src/redux/log_entries/sagas.test.js index 0d9d5345..af2f2eb2 100644 --- a/src/redux/log_entries/sagas.test.js +++ b/src/redux/log_entries/sagas.test.js @@ -21,7 +21,8 @@ import { import { FETCH_LOG_ENTRIES_REQUESTED, FETCH_LOG_ENTRIES_COMPLETED, - FETCH_LOG_ENTRIES_ERROR, + // FETCH_LOG_ENTRIES_ERROR, + UPDATE_LOG_ENTRIES_POLLING, } from './actions'; import { @@ -48,7 +49,7 @@ describe('Sagas: Log Entries', () => { it('fetches log entries', () => expectSaga(getLogEntriesAsync) .withReducer(logEntries) .provide([ - [select(selectLogEntries), { logEntries: [], recentLogEntries: {} }], + [select(selectLogEntries), { logEntries: [], recentLogEntries: {}, pollingStatus: { errors: [] } }], [matchers.call.fn(pdParallelFetch), mockLogEntries], ]) .dispatch({ @@ -73,7 +74,7 @@ describe('Sagas: Log Entries', () => { it('fetches incidents instead when log entries is too long', () => expectSaga(getLogEntriesAsync) .withReducer(logEntries) .provide([ - [select(selectLogEntries), { logEntries: [], recentLogEntries: {} }], + [select(selectLogEntries), { logEntries: [], recentLogEntries: {}, pollingStatus: { errors: [] } }], [matchers.call.fn(pdParallelFetch), throwError(new Error('Too many records: 1001 > 1000'))], ]) .dispatch({ @@ -86,8 +87,9 @@ describe('Sagas: Log Entries', () => { effects, } = result; expect(effects.call).toHaveLength(1); - expect(effects.put).toHaveLength(2); - expect(effects.put[0].payload.action.type).toEqual(FETCH_LOG_ENTRIES_ERROR); - expect(effects.put[1].payload.action.type).toEqual(FETCH_INCIDENTS_REQUESTED); + expect(effects.put).toHaveLength(3); + expect(effects.put[0].payload.action.type).toEqual(UPDATE_LOG_ENTRIES_POLLING); + expect(effects.put[1].payload.action.type).toEqual(FETCH_LOG_ENTRIES_COMPLETED); + expect(effects.put[2].payload.action.type).toEqual(FETCH_INCIDENTS_REQUESTED); })); }); diff --git a/src/redux/priorities/sagas.js b/src/redux/priorities/sagas.js index baf1dc8d..c89f042e 100644 --- a/src/redux/priorities/sagas.js +++ b/src/redux/priorities/sagas.js @@ -55,6 +55,7 @@ export function* getPriorities() { // Handle API auth failure if (e.response?.status === 401) { e.message = i18next.t('Unauthorized Access'); + throw e; } yield put({ type: FETCH_PRIORITIES_ERROR, message: e.message }); yield put({ diff --git a/src/redux/response_plays/sagas.js b/src/redux/response_plays/sagas.js index 4678a7d8..51a06749 100644 --- a/src/redux/response_plays/sagas.js +++ b/src/redux/response_plays/sagas.js @@ -45,6 +45,7 @@ export function* getResponsePlays() { // Handle API auth failure if (e.response?.status === 401) { e.message = i18next.t('Unauthorized Access'); + throw e; } if (e.response?.status === 301) { // user just doesn't have response plays @@ -102,7 +103,7 @@ export function* runResponsePlay(action) { yield displayActionModal(actionAlertsModalType, actionAlertsModalMessage); } } else { - handleMultipleAPIErrorResponses(responses); + yield call(handleMultipleAPIErrorResponses, responses); } } catch (e) { handleSagaError(RUN_RESPONSE_PLAY_ERROR, e); diff --git a/src/redux/rootSaga.js b/src/redux/rootSaga.js index c9ae841f..cc38aa32 100644 --- a/src/redux/rootSaga.js +++ b/src/redux/rootSaga.js @@ -1,7 +1,9 @@ import { - all, take, + all, take, put, } from 'redux-saga/effects'; +import RealUserMonitoring from 'src/config/monitoring'; + import { REHYDRATE, } from 'redux-persist/lib/constants'; @@ -37,6 +39,8 @@ import { getLogEntriesAsync, // updateRecentLogEntriesAsync, cleanRecentLogEntriesAsync, + cleanRecentLogEntriesTaskWatcher, + pollLogEntriesTaskWatcher, } from './log_entries/sagas'; import { @@ -44,6 +48,7 @@ import { updateIncidentTableColumns, updateIncidentTableState, selectIncidentTableRows, + clearIncidentTableFilters, } from './incident_table/sagas'; import { @@ -121,11 +126,20 @@ import { clearLocalCache, } from './settings/sagas'; +import { + CATASTROPHE, +} from './connection/actions'; + import { updateConnectionStatus, checkConnectionStatus, + checkConnectionStatusTaskWatcher, checkAbilities, + checkAbilitiesTaskWatcher, + refreshOauth, + checkForTokenExpiryWatcher, updateQueueStats, + updateQueueStatsTaskWatcher, } from './connection/sagas'; import { @@ -134,120 +148,138 @@ import { export default function* rootSaga() { yield take(REHYDRATE); // Wait for rehydrate to prevent sagas from running with empty store - yield all([ - // Query Settings - toggleDisplayQuerySettings(), - updateQuerySettingsSinceDate(), - updateQuerySettingsUntilDate(), - updateQuerySettingsIncidentStatus(), - updateQuerySettingsIncidentUrgency(), - updateQuerySettingsIncidentPriority(), - updateQuerySettingsTeams(), - updateQuerySettingsEscalationPolicies(), - updateQuerySettingsServices(), - updateQuerySettingsUsers(), - updateSearchQuery(), - validateIncidentQuery(), - confirmIncidentQuery(), - - // Incidents - getIncidentsAsync(), - getAlertsForIncidentsAsync(), - getNotesForIncidentsAsync(), - processLogEntries(), - updateIncidents(), - updateIncidentAlerts(), - updateIncidentNotes(), - filterIncidents(), - - // Log Entries - getLogEntriesAsync(), - cleanRecentLogEntriesAsync(), - - // Incident Table - saveIncidentTable(), - updateIncidentTableColumns(), - updateIncidentTableState(), - selectIncidentTableRows(), - - // Incident Actions - doAction(), - acknowledgeAsync(), - escalateAsync(), - reassignAsync(), - toggleDisplayReassignModal(), - addResponderAsync(), - toggleDisplayAddResponderModal(), - snoozeAsync(), - toggleDisplayCustomSnoozeModal(), - toggleDisplayMergeModal(), - mergeAsync(), - resolveAsync(), - updatePriorityAsync(), - addNoteAsync(), - toggleDisplayAddNoteModal(), - runCustomIncidentActionAsync(), - syncWithExternalSystemAsync(), - moveAlertsAsync(), - - // Action Alerts Modal - toggleActionAlertsModal(), - updateActionAlertsModal(), - - // Users - userAuthorize(), - userUnauthorize(), - userAcceptDisclaimer(), - getUsersAsync(), - getCurrentUserAsync(), - updateUserLocale(), - addUserToUsersMap(), - - // Services - getServicesAsync(), - - // Teams - getTeamsAsync(), - - // Priorities - getPrioritiesAsync(), - - // Escalation Policies - getEscalationPoliciesAsync(), - - // Extensions - getExtensionsAsync(), - mapServicesToExtensions(), - - // Response Plays - getResponsePlaysAsync(), - runResponsePlayAsync(), - - // Settings - toggleSettingsModal(), - toggleLoadSavePresetsModal(), - toggleColumnsModal(), - setDefaultSinceDateTenor(), - setSearchAllCustomDetails(), - setFuzzySearch(), - setRespondersInEpFilter(), - setAlertCustomDetailColumns(), - setShowIncidentAlertsModalForIncidentId(), - setMaxRateLimit(), - setAutoAcceptIncidentsQuery(), - setAutoRefreshInterval(), - setDarkMode(), - setRelativeDates(), - clearLocalCache(), - - // Connection - updateConnectionStatus(), - checkConnectionStatus(), - updateQueueStats(), - checkAbilities(), - - // Monitoring - startMonitoring(), - stopMonitoring(), - ]); + try { + yield all([ + // Query Settings + toggleDisplayQuerySettings(), + updateQuerySettingsSinceDate(), + updateQuerySettingsUntilDate(), + updateQuerySettingsIncidentStatus(), + updateQuerySettingsIncidentUrgency(), + updateQuerySettingsIncidentPriority(), + updateQuerySettingsTeams(), + updateQuerySettingsEscalationPolicies(), + updateQuerySettingsServices(), + updateQuerySettingsUsers(), + updateSearchQuery(), + validateIncidentQuery(), + confirmIncidentQuery(), + + // Incidents + getIncidentsAsync(), + getAlertsForIncidentsAsync(), + getNotesForIncidentsAsync(), + processLogEntries(), + updateIncidents(), + updateIncidentAlerts(), + updateIncidentNotes(), + filterIncidents(), + + // Log Entries + getLogEntriesAsync(), + cleanRecentLogEntriesAsync(), + cleanRecentLogEntriesTaskWatcher(), + pollLogEntriesTaskWatcher(), + + // Incident Table + saveIncidentTable(), + updateIncidentTableColumns(), + updateIncidentTableState(), + selectIncidentTableRows(), + clearIncidentTableFilters(), + + // Incident Actions + doAction(), + acknowledgeAsync(), + escalateAsync(), + reassignAsync(), + toggleDisplayReassignModal(), + addResponderAsync(), + toggleDisplayAddResponderModal(), + snoozeAsync(), + toggleDisplayCustomSnoozeModal(), + toggleDisplayMergeModal(), + mergeAsync(), + resolveAsync(), + updatePriorityAsync(), + addNoteAsync(), + toggleDisplayAddNoteModal(), + runCustomIncidentActionAsync(), + syncWithExternalSystemAsync(), + moveAlertsAsync(), + + // Action Alerts Modal + toggleActionAlertsModal(), + updateActionAlertsModal(), + + // Users + userAuthorize(), + userUnauthorize(), + userAcceptDisclaimer(), + getUsersAsync(), + getCurrentUserAsync(), + updateUserLocale(), + addUserToUsersMap(), + + // Services + getServicesAsync(), + + // Teams + getTeamsAsync(), + + // Priorities + getPrioritiesAsync(), + + // Escalation Policies + getEscalationPoliciesAsync(), + + // Extensions + getExtensionsAsync(), + mapServicesToExtensions(), + + // Response Plays + getResponsePlaysAsync(), + runResponsePlayAsync(), + + // Settings + toggleSettingsModal(), + toggleLoadSavePresetsModal(), + toggleColumnsModal(), + setDefaultSinceDateTenor(), + setSearchAllCustomDetails(), + setFuzzySearch(), + setRespondersInEpFilter(), + setAlertCustomDetailColumns(), + setShowIncidentAlertsModalForIncidentId(), + setMaxRateLimit(), + setAutoAcceptIncidentsQuery(), + setAutoRefreshInterval(), + setDarkMode(), + setRelativeDates(), + clearLocalCache(), + + // Connection + updateConnectionStatus(), + checkConnectionStatus(), + checkConnectionStatusTaskWatcher(), + updateQueueStats(), + updateQueueStatsTaskWatcher(), + checkAbilities(), + checkAbilitiesTaskWatcher(), + refreshOauth(), + checkForTokenExpiryWatcher(), + + // Monitoring + startMonitoring(), + stopMonitoring(), + ]); + } catch (e) { + RealUserMonitoring.trackError(e); + // eslint-disable-next-line no-console + console.error('Error in rootSaga:', e); + yield put({ + type: CATASTROPHE, + connectionStatusMessage: e.message, + }); + } } diff --git a/src/redux/services/sagas.js b/src/redux/services/sagas.js index 13bb5363..c4922ae3 100644 --- a/src/redux/services/sagas.js +++ b/src/redux/services/sagas.js @@ -45,6 +45,7 @@ export function* getServices(action) { // Handle API auth failure if (e.response?.status === 401) { e.message = i18next.t('Unauthorized Access'); + throw e; } yield put({ type: FETCH_SERVICES_ERROR, message: e.message }); yield put({ diff --git a/src/redux/teams/sagas.js b/src/redux/teams/sagas.js index 1f793b3d..3d707383 100644 --- a/src/redux/teams/sagas.js +++ b/src/redux/teams/sagas.js @@ -30,6 +30,7 @@ export function* getTeams() { // Handle API auth failure if (e.response?.status === 401) { e.message = i18next.t('Unauthorized Access'); + throw e; } yield put({ type: FETCH_TEAMS_ERROR, message: e.message }); yield put({ diff --git a/src/redux/users/sagas.js b/src/redux/users/sagas.js index 26d5ef06..d3aa0f87 100644 --- a/src/redux/users/sagas.js +++ b/src/redux/users/sagas.js @@ -141,6 +141,7 @@ export function* getUsers(action) { // Handle API auth failure if (e.response?.status === 401) { e.message = i18next.t('Unauthorized Access'); + throw e; } yield put({ type: GET_USERS_ERROR, message: e.message }); yield updateConnectionStatusRequested('neutral', e.message, formatError(e)); diff --git a/src/util/auth.js b/src/util/auth.js index e1074abc..782276ba 100644 --- a/src/util/auth.js +++ b/src/util/auth.js @@ -116,11 +116,7 @@ export const exchangeCodeForToken = async ( }; const data = await postData(requestTokenUrl, formData); - - if (data.access_token) { - return data.access_token; - } - return null; + return data; }; // eslint-disable-next-line no-unused-vars diff --git a/src/util/auth.test.js b/src/util/auth.test.js index fb7334a5..022cba78 100644 --- a/src/util/auth.test.js +++ b/src/util/auth.test.js @@ -22,7 +22,7 @@ const unmockedFetch = global.fetch; describe('Authentication Helper Suite', () => { const clientId = PD_OAUTH_CLIENT_ID; const clientSecret = PD_OAUTH_CLIENT_SECRET; - const redirectURL = 'http://localhost:3000/'; + const redirectURL = 'http://127.0.0.1:3000/'; const code = 'SOME_REDIRECT_CODE'; const mockAccessToken = faker.string.alphanumeric(); let codeVerifier; @@ -86,6 +86,6 @@ describe('Authentication Helper Suite', () => { codeVerifier, code, ); - expect(token).toEqual(mockAccessToken); + expect(token.access_token).toEqual(mockAccessToken); }); }); diff --git a/src/util/pd-api-wrapper.js b/src/util/pd-api-wrapper.js index a39badf3..69381c4c 100644 --- a/src/util/pd-api-wrapper.js +++ b/src/util/pd-api-wrapper.js @@ -9,6 +9,8 @@ import axios from 'axios'; import Bottleneck from 'bottleneck'; +import RealUserMonitoring from 'src/config/monitoring'; + import { PD_USER_TOKEN, } from 'src/config/constants'; @@ -46,7 +48,7 @@ export const getPdAccessTokenObject = () => { export const pd = api(getPdAccessTokenObject()); -export const pdAxiosRequest = async (method, endpoint, params = {}, data = {}) => axios({ +export const pdAxiosRequest = async (method, endpoint, params = {}, data = {}, throwErrors = false) => axios({ method, url: `https://api.pagerduty.com/${endpoint}`, headers: { @@ -62,8 +64,11 @@ export const pdAxiosRequest = async (method, endpoint, params = {}, data = {}) = }, params: { ...params, rand: Math.random().toString(36).substring(2, 7) }, data, - // never throw, just return the error - validateStatus: () => true, +}).catch((error) => { + if (throwErrors) { + throw error; + } + return error; }); let currentLimit = 200; @@ -102,6 +107,10 @@ let watchdogTimeout; limiter.on('depleted', () => { // eslint-disable-next-line no-console console.error('Limiter queue depleted, setting watchdog timeout'); + RealUserMonitoring.trackError(new Error('LimiterDepleted'), { + reservoir: 0, + currentLimit, + }); if (watchdogTimeout) { clearTimeout(watchdogTimeout); } @@ -112,12 +121,47 @@ limiter.on('depleted', () => { console.error( 'Watchdog timeout, queue is still depleted after 10 seconds; resetting limiter', ); + RealUserMonitoring.trackError(new Error('LimiterWatchdogTimeout'), { + reservoir, + currentLimit, + }); resetLimiterWithRateLimit(currentLimit); } }); }, 10 * 1000); }); +limiter.on('error', (error) => { + RealUserMonitoring.trackError(new Error('limiter error'), { + error, + currentLimit, + }); +}); + +// Listen to the 'failed' event +limiter.on('failed', async (error, jobInfo) => { + const { + id, + } = jobInfo.options; + // eslint-disable-next-line no-console + console.error(`Job ${id} failed: ${error}`); + + RealUserMonitoring.trackError(error, { + jobInfo, + }); + + if (jobInfo.retryCount < 3) { + // eslint-disable-next-line no-console + console.error(`Retrying job ${id} in 100ms!`); + return 100; + } + return undefined; +}); + +// Listen to the 'retry' event +// eslint-disable-next-line no-console +limiter.on('retry', (error, jobInfo) => console.error(`Now retrying ${jobInfo.options.id}`)); + /* Throttled version of Axios requests for direct API calls */ @@ -131,10 +175,12 @@ export const throttledPdAxiosRequest = ( priority: 5, }, ) => { - const qid = `${method}-${endpoint}-${JSON.stringify(params)}-${Date.now()}-${Math.random() + const qid = `${method}-${endpoint}-${Date.now()}-${Math.random() .toString(36) .substring(2, 7)}`; + const throwErrors = options?.throwErrors || false; + return limiter.schedule( { expiration: options?.expiration || 30 * 1000, @@ -142,10 +188,26 @@ export const throttledPdAxiosRequest = ( id: qid, }, async () => { - const r = await pdAxiosRequest(method, endpoint, params, data); + const r = await pdAxiosRequest(method, endpoint, params, data, throwErrors); return r; }, - ); + ).catch((error) => { + if (error instanceof Bottleneck.BottleneckError) { + RealUserMonitoring.trackError(error, { + type: 'limiter error', + method, + endpoint, + currentLimit, + }); + } else { + RealUserMonitoring.trackError(error, { + type: 'pdAxiosRequest error', + method, + endpoint, + }); + throw error; + } + }); }; export const getLimiterStats = () => limiter.counts(); @@ -192,6 +254,16 @@ export const pdParallelFetch = async ( axiosRequestOptions, ); + if (!firstPageResponse?.status) { + const e = new Error(`Error fetching ${endpoint}: no response object`); + RealUserMonitoring.trackError(e, { + endpoint, + response: firstPageResponse, + params: requestParams, + }); + throw e; + } + if (!(firstPageResponse.status >= 200 && firstPageResponse.status < 300)) { const e = new Error( `Error fetching ${endpoint}: ${firstPageResponse.status}` @@ -207,7 +279,19 @@ export const pdParallelFetch = async ( const fetchedData = firstPage[endpointIdentifier(endpoint)]; + if (!fetchedData) { + const e = new Error(`No data found for endpoint ${endpoint}`); + RealUserMonitoring.trackError(e, { + endpoint, + response: firstPage, + params: requestParams, + }); + throw e; + } + const promises = []; + const failed = []; + if (firstPage.more) { for ( let offset = requestParams.limit; @@ -221,9 +305,23 @@ export const pdParallelFetch = async ( undefined, axiosRequestOptions, ) - .then(({ - data, - }) => { + .then((response) => { + if (!response?.status || !(response.status >= 200 && response.status < 300) || !response.data) { + failed.push({ + endpoint, + response, + params: { ...requestParams, offset }, + }); + RealUserMonitoring.trackError(new Error('Failed to fetch data'), { + endpoint, + response, + params: { ...requestParams, offset }, + }); + return; + } + const { + data, + } = response; fetchedData.push(...data[endpointIdentifier(endpoint)]); if (progressCallback) { progressCallback(firstPage.total, fetchedData.length); @@ -232,6 +330,11 @@ export const pdParallelFetch = async ( .catch((error) => { // eslint-disable-next-line no-console console.error(error); + RealUserMonitoring.trackError(new Error('Failed to fetch data'), { + endpoint, + error, + params: { ...requestParams, offset }, + }); }); promises.push(promise); } diff --git a/src/util/sagas.js b/src/util/sagas.js index 4618bd60..8788eb56 100644 --- a/src/util/sagas.js +++ b/src/util/sagas.js @@ -2,6 +2,16 @@ import { put, } from 'redux-saga/effects'; +import { + userUnauthorize, +} from 'src/redux/users/actions'; + +import { + stopMonitoring, +} from 'src/redux/monitoring/actions'; + +import RealUserMonitoring from 'src/config/monitoring'; + import i18next from 'src/i18n'; import { @@ -10,6 +20,7 @@ import { } from 'src/redux/action_alerts/actions'; import { + // CATASTROPHE, UPDATE_CONNECTION_STATUS_REQUESTED, } from 'src/redux/connection/actions'; @@ -20,12 +31,25 @@ export const MISSING_ABILITY_ERROR = i18next.t( // Helper function to handle errors while processing saga export function* handleSagaError(action, exception) { + RealUserMonitoring.trackError(exception); + if (exception?.response?.status === 401) { + yield put(userUnauthorize()); + yield put(stopMonitoring()); + sessionStorage.removeItem('pd_access_token'); + throw Error(i18next.t('Unauthorized. Please re-authorize.')); + } yield displayActionModal('error', exception.message); yield put({ type: action, message: exception.message }); } // Helper functions to handle API errors in response -export const handleSingleAPIErrorResponse = (response) => { +export function* handleSingleAPIErrorResponse(response) { + if (response?.status === 401) { + yield put(userUnauthorize()); + yield put(stopMonitoring()); + sessionStorage.removeItem('pd_access_token'); + throw Error(i18next.t('Unauthorized. Please re-authorize.')); + } if (response?.data?.error) { throw Error( response.data.error.message @@ -34,21 +58,30 @@ export const handleSingleAPIErrorResponse = (response) => { } else { throw Error(i18next.t('Unknown error while using PD API')); } -}; +} -export const handleMultipleAPIErrorResponses = (responses) => { - const errors = responses +export function* handleMultipleAPIErrorResponses(responses) { + if (responses.some((response) => response?.status === 401)) { + yield put(userUnauthorize()); + yield put(stopMonitoring()); + sessionStorage.removeItem('pd_access_token'); + throw Error(i18next.t('Unauthorized. Please re-authorize.')); + } + const errorStrs = responses + .filter((response) => response?.status < 200 || response?.status >= 300) .filter((response) => response?.data?.error) .map( (response) => response.data.error.message + (response.data.error.errors ? `: ${response.data.error.errors.join(', ')}` : ''), ); + // dedup errors + const errors = [...new Set(errorStrs)]; if (errors.length) { throw Error(errors); } else { throw Error(i18next.t('Unknown error while using PD API')); } -}; +} // Helper function to display modal with API result export function* displayActionModal(actionAlertsModalType, actionAlertsModalMessage) { diff --git a/vite.config.js b/vite.config.js index b137446e..7a16086a 100644 --- a/vite.config.js +++ b/vite.config.js @@ -25,10 +25,12 @@ function fixAcceptHeader404() { export default defineConfig(() => ({ base: '/pd-live-react', server: { + host: '127.0.0.1', port: 3000, }, build: { outDir: 'build', + sourcemap: true, }, resolve: { alias: { @@ -48,7 +50,7 @@ export default defineConfig(() => ({ }), EnvironmentPlugin('all', { loadEnvFiles: true }), // svgr options: https://react-svgr.com/docs/options/ - svgr(), + svgr({ include: '**/*.svg' }), eslint(), fixAcceptHeader404(), ], diff --git a/yarn.lock b/yarn.lock index 0886ac86..0aa27f8b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25,6 +25,683 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" +"@aws-crypto/crc32@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1" + integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/sha256-browser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" + integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== + dependencies: + "@aws-crypto/sha256-js" "^5.2.0" + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" + integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/supports-web-crypto@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" + integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== + dependencies: + tslib "^2.6.2" + +"@aws-crypto/util@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" + integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-cloudwatch-logs@^3.537.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.598.0.tgz#24748eb885bc7a3344e2ed1b476e2b1db74807b4" + integrity sha512-BETOmRKBHc6im5YNSvaEBMo5AusxXWRP5ljpT0lRvS+hACuUKoqQb5wuloO5QUOM+1wdXELrSdwayypMiQU6Tg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.598.0" + "@aws-sdk/client-sts" "3.598.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.598.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/eventstream-serde-browser" "^3.0.2" + "@smithy/eventstream-serde-config-resolver" "^3.0.1" + "@smithy/eventstream-serde-node" "^3.0.2" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + uuid "^9.0.1" + +"@aws-sdk/client-cognito-identity@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.598.0.tgz#f4c1473ef8368bd240ba85c94d3f99c420439139" + integrity sha512-N/1lnkhkzk1Il8WEZBWR713/7sDEqBtl/1AS6dfgw6Zh7NWUYSwBkZx6xdN8KogDu4CFExRHhilNOgI1JMug3w== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.598.0" + "@aws-sdk/client-sts" "3.598.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.598.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-iam@^3.535.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-iam/-/client-iam-3.598.0.tgz#de146dab9042941233304fc248c1119e53979ee6" + integrity sha512-pxmwSMPh/WLlBuVVBIIjE0kyFK3DH4TnYkclJaTp3ZOr9fMvRT2bdZoZ2CYOwY02K0q6JKKx/1Y1N8C8SAHeZQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.598.0" + "@aws-sdk/client-sts" "3.598.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.598.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.0.1" + tslib "^2.6.2" + +"@aws-sdk/client-lambda@^3.536.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-lambda/-/client-lambda-3.598.0.tgz#c97403e73350295f2deaa6e6feea2b14947efb31" + integrity sha512-PtTdBNBp1MFWMdgE3T6/f5ZLLbGcenLwEWlgXBsWzHl5lvHnI4SjH54hhZM17JiqRmoz+0EAufl+JbDd5yqfsg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.598.0" + "@aws-sdk/client-sts" "3.598.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.598.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/eventstream-serde-browser" "^3.0.2" + "@smithy/eventstream-serde-config-resolver" "^3.0.1" + "@smithy/eventstream-serde-node" "^3.0.2" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-stream" "^3.0.2" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.0.1" + tslib "^2.6.2" + +"@aws-sdk/client-sfn@^3.535.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sfn/-/client-sfn-3.598.0.tgz#b8a2b192c6bb3d1c52ff58e0e7ae4bc17ac448bc" + integrity sha512-18a7H+6oQClSTZtQPMmiucK0Mm/F1bu0dzl8gAM55qNnjzSS8asiS65YcuISGDwwL22Ds0m5RZ0xGgu9tdgRUw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.598.0" + "@aws-sdk/client-sts" "3.598.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.598.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + uuid "^9.0.1" + +"@aws-sdk/client-sso-oidc@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.598.0.tgz#17ad1acd1c616ccbd36cda2db1ee80d63ad0aff5" + integrity sha512-jfdH1pAO9Tt8Nkta/JJLoUnwl7jaRdxToQTJfUtE+o3+0JP5sA4LfC2rBkJSWcU5BdAA+kyOs5Lv776DlN04Vg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sts" "3.598.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.598.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.598.0.tgz#aef58e198e504d3b3d1ba345355650a67d21facb" + integrity sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sts@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.598.0.tgz#5b3c082ac14b3f0b7a4c964eb4ba2b320988e1e4" + integrity sha512-bXhz/cHL0iB9UH9IFtMaJJf4F8mV+HzncETCRFzZ9SyUMt5rP9j8A7VZknqGYSx/6mI8SsB1XJQkWSbhn6FiSQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.598.0" + "@aws-sdk/core" "3.598.0" + "@aws-sdk/credential-provider-node" "3.598.0" + "@aws-sdk/middleware-host-header" "3.598.0" + "@aws-sdk/middleware-logger" "3.598.0" + "@aws-sdk/middleware-recursion-detection" "3.598.0" + "@aws-sdk/middleware-user-agent" "3.598.0" + "@aws-sdk/region-config-resolver" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@aws-sdk/util-user-agent-browser" "3.598.0" + "@aws-sdk/util-user-agent-node" "3.598.0" + "@smithy/config-resolver" "^3.0.2" + "@smithy/core" "^2.2.1" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/hash-node" "^3.0.1" + "@smithy/invalid-dependency" "^3.0.1" + "@smithy/middleware-content-length" "^3.0.1" + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.4" + "@smithy/util-defaults-mode-node" "^3.0.4" + "@smithy/util-endpoints" "^2.0.2" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.598.0", "@aws-sdk/core@^3.535.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.598.0.tgz#82a069d703be0cafe3ddeacb1de51981ee4faa25" + integrity sha512-HaSjt7puO5Cc7cOlrXFCW0rtA0BM9lvzjl56x0A20Pt+0wxXGeTOZZOkXQIepbrFkV2e/HYukuT9e99vXDm59g== + dependencies: + "@smithy/core" "^2.2.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/signature-v4" "^3.1.0" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + fast-xml-parser "4.2.5" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-cognito-identity@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.598.0.tgz#17cc02ccf038e9e5d086d63ead527747c610efce" + integrity sha512-u6oocRReswkA2mFlOwtCetgmEr9B+Yhle3K13x37rb1lQgq1wUuWUvHU7U9v26hUZIhfUpigV/Mgr/RQZB6+Yw== + dependencies: + "@aws-sdk/client-cognito-identity" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.598.0.tgz#ea1f30cfc9948017dd0608518868d3f50074164f" + integrity sha512-vi1khgn7yXzLCcgSIzQrrtd2ilUM0dWodxj3PQ6BLfP0O+q1imO3hG1nq7DVyJtq7rFHs6+9N8G4mYvTkxby2w== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.598.0.tgz#58144440e698aef63b5cb459780325817c0acf10" + integrity sha512-N7cIafi4HVlQvEgvZSo1G4T9qb/JMLGMdBsDCT5XkeJrF0aptQWzTFH0jIdZcLrMYvzPcuEyO3yCBe6cy/ba0g== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/property-provider" "^3.1.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/util-stream" "^3.0.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.598.0", "@aws-sdk/credential-provider-ini@^3.535.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.598.0.tgz#fd0ba8ab5c3701e05567d1c6f7752cfd9f4ba111" + integrity sha512-/ppcIVUbRwDIwJDoYfp90X3+AuJo2mvE52Y1t2VSrvUovYn6N4v95/vXj6LS8CNDhz2jvEJYmu+0cTMHdhI6eA== + dependencies: + "@aws-sdk/credential-provider-env" "3.598.0" + "@aws-sdk/credential-provider-http" "3.598.0" + "@aws-sdk/credential-provider-process" "3.598.0" + "@aws-sdk/credential-provider-sso" "3.598.0" + "@aws-sdk/credential-provider-web-identity" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/credential-provider-imds" "^3.1.1" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.598.0.tgz#b24173cf9ae33718c6273c9bac996791c73d9359" + integrity sha512-sXTlqL5I/awlF9Dg2MQ17SfrEaABVnsj2mf4jF5qQrIRhfbvQOIYdEqdy8Rn1AWlJMz/N450SGzc0XJ5owxxqw== + dependencies: + "@aws-sdk/credential-provider-env" "3.598.0" + "@aws-sdk/credential-provider-http" "3.598.0" + "@aws-sdk/credential-provider-ini" "3.598.0" + "@aws-sdk/credential-provider-process" "3.598.0" + "@aws-sdk/credential-provider-sso" "3.598.0" + "@aws-sdk/credential-provider-web-identity" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/credential-provider-imds" "^3.1.1" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.598.0.tgz#f48ff6f964cd6726499b207f45bfecda4be922ce" + integrity sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.598.0.tgz#52781e2b60b1f61752829c44a5e0b9fedd0694d6" + integrity sha512-5InwUmrAuqQdOOgxTccRayMMkSmekdLk6s+az9tmikq0QFAHUCtofI+/fllMXSR9iL6JbGYi1940+EUmS4pHJA== + dependencies: + "@aws-sdk/client-sso" "3.598.0" + "@aws-sdk/token-providers" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.598.0.tgz#d737e9c2b7c4460b8e31a55b4979bf4d88913900" + integrity sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/credential-providers@^3.535.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.598.0.tgz#411d9dad5b3087fe01679b900bddf166f3cea0be" + integrity sha512-IFZwH3F2rA2WbpYFUxOeu/M3/9p4+oRbKVLDZlaaDtwwuZ9VHEbnkUm20zOgSXeVExa3qgYhJvg7H5JrqxP97A== + dependencies: + "@aws-sdk/client-cognito-identity" "3.598.0" + "@aws-sdk/client-sso" "3.598.0" + "@aws-sdk/client-sts" "3.598.0" + "@aws-sdk/credential-provider-cognito-identity" "3.598.0" + "@aws-sdk/credential-provider-env" "3.598.0" + "@aws-sdk/credential-provider-http" "3.598.0" + "@aws-sdk/credential-provider-ini" "3.598.0" + "@aws-sdk/credential-provider-node" "3.598.0" + "@aws-sdk/credential-provider-process" "3.598.0" + "@aws-sdk/credential-provider-sso" "3.598.0" + "@aws-sdk/credential-provider-web-identity" "3.598.0" + "@aws-sdk/types" "3.598.0" + "@smithy/credential-provider-imds" "^3.1.1" + "@smithy/property-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.598.0.tgz#0a7c4d5a95657bea2d7c4e29b9a8b379952d09b1" + integrity sha512-WiaG059YBQwQraNejLIi0gMNkX7dfPZ8hDIhvMr5aVPRbaHH8AYF3iNSsXYCHvA2Cfa1O9haYXsuMF9flXnCmA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.598.0.tgz#0c0692d2f4f9007c915734ab319db377ca9a3b1b" + integrity sha512-bxBjf/VYiu3zfu8SYM2S9dQQc3tz5uBAOcPz/Bt8DyyK3GgOpjhschH/2XuUErsoUO1gDJqZSdGOmuHGZQn00Q== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.598.0.tgz#94015d41f8174bd41298fd13f8fb0a8c4576d7c8" + integrity sha512-vjT9BeFY9FeN0f8hm2l6F53tI0N5bUq6RcDkQXKNabXBnQxKptJRad6oP2X5y3FoVfBLOuDkQgiC2940GIPxtQ== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.598.0.tgz#6fa26849d256434ca4884c42c1c4755aa2f1556e" + integrity sha512-4tjESlHG5B5MdjUaLK7tQs/miUtHbb6deauQx8ryqSBYOhfHVgb1ZnzvQR0bTrhpqUg0WlybSkDaZAICf9xctg== + dependencies: + "@aws-sdk/types" "3.598.0" + "@aws-sdk/util-endpoints" "3.598.0" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.598.0.tgz#fd8fd6b7bc11b5f81def4db0db9e835d40a8f86e" + integrity sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.1" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.598.0.tgz#49a94c14ce2e392bb0e84b69986c33ecfad5b804" + integrity sha512-TKY1EVdHVBnZqpyxyTHdpZpa1tUpb6nxVeRNn1zWG8QB5MvH4ALLd/jR+gtmWDNQbIG4cVuBOZFVL8hIYicKTA== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.598.0", "@aws-sdk/types@^3.222.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.598.0.tgz#b840d2446dee19a2a4731e6166f2327915d846db" + integrity sha512-742uRl6z7u0LFmZwDrFP6r1wlZcgVPw+/TilluDJmCAR8BgRw3IR+743kUXKBGd8QZDRW2n6v/PYsi/AWCDDMQ== + dependencies: + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.598.0.tgz#7f78d68524babac7fdacf381590470353d45b959" + integrity sha512-Qo9UoiVVZxcOEdiOMZg3xb1mzkTxrhd4qSlg5QQrfWPJVx/QOg+Iy0NtGxPtHtVZNHZxohYwDwV/tfsnDSE2gQ== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + "@smithy/util-endpoints" "^2.0.2" + tslib "^2.6.2" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.568.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz#2acc4b2236af0d7494f7e517401ba6b3c4af11ff" + integrity sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-browser@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.598.0.tgz#5039d0335f8a06af5be73c960df85009dda59090" + integrity sha512-36Sxo6F+ykElaL1mWzWjlg+1epMpSe8obwhCN1yGE7Js9ywy5U6k6l+A3q3YM9YRbm740sNxncbwLklMvuhTKw== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/types" "^3.1.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.598.0": + version "3.598.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.598.0.tgz#f9bdf1b7cc3a40787c379f7c2ff028de2612c177" + integrity sha512-oyWGcOlfTdzkC6SVplyr0AGh54IMrDxbhg5RxJ5P+V4BKfcDoDcZV9xenUk9NsOi9MuUjxMumb9UJGkDhM1m0A== + dependencies: + "@aws-sdk/types" "3.598.0" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + "@babel/cli@^7.21.0": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.22.5.tgz#eb323bd69f50297792c2b7c205a97306a305d703" @@ -1383,7 +2060,7 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.19.4", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.19.4", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.23.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== @@ -2297,10 +2974,10 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cypress/react@^8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@cypress/react/-/react-8.0.0.tgz#9ed7a04284d149e65ad7ae9dc35aa2a20c2c4e57" - integrity sha512-3fnW1ow+GZVCdVHikSoYBWMZCKpaRIJe76vA7a1qS7MYXSeX/xs+VgIIrZmnM1fnc23w5nHtWh4bjGCyTfWyXA== +"@cypress/react@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@cypress/react/-/react-8.0.2.tgz#ae6651f61b2182f4485a21300f320c3efa3cb9ce" + integrity sha512-7TgXXEeJ/GnGiIQhO8mAfkyychyMv5hNyISV3ti/vceriTI0uGtbjwRqLQhuVgOSHLtboUZUIoRlR6BkgIdVVg== "@cypress/request@^3.0.0": version "3.0.1" @@ -2334,33 +3011,77 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@datadog/browser-core@4.47.0": - version "4.47.0" - resolved "https://registry.yarnpkg.com/@datadog/browser-core/-/browser-core-4.47.0.tgz#cc454c05f22839da4d3487b6c4b3c9e1b56e3059" - integrity sha512-C3qm4kiT8OoK09UnAed2HTY9ecDaz0n7Qm0m4WwC+lpwOR97oduWdggbvgJgLGdJLleQjqEFHyuB8BEvEQ66BQ== - -"@datadog/browser-rum-core@4.47.0": - version "4.47.0" - resolved "https://registry.yarnpkg.com/@datadog/browser-rum-core/-/browser-rum-core-4.47.0.tgz#7b7e84487ae49a992d705f3bee81525516bdde99" - integrity sha512-6nOnFPZJ0cYkWV4w7lbtCxVGLiquxw68D1qvwXbMtxZ1q+zroLhPY+lpk7Hd6XN7OT7xmTP2wbTnr0DL5VGwig== - dependencies: - "@datadog/browser-core" "4.47.0" - -"@datadog/browser-rum@^4.47.0": - version "4.47.0" - resolved "https://registry.yarnpkg.com/@datadog/browser-rum/-/browser-rum-4.47.0.tgz#a75542d4f56a433f281b6066babf2608988ee4f6" - integrity sha512-+CK8Z7w0fZnCN1oK7S3TQq9LfDmpXDnYxzmHw+11INHHdFhWqmUojpKKi+7+XLMaTOvU83yYBfOBFz2DSWvwew== - dependencies: - "@datadog/browser-core" "4.47.0" - "@datadog/browser-rum-core" "4.47.0" - "@datadog/browser-worker" "4.47.0" - -"@datadog/browser-worker@4.47.0": - version "4.47.0" - resolved "https://registry.yarnpkg.com/@datadog/browser-worker/-/browser-worker-4.47.0.tgz#9a55cd10961eff8490f14b6629e6d1fd2ca0fea5" - integrity sha512-7/jiPXiGYStd40zsQl0U6DBkkoKhFPuWgl5R/k4sKaMdZ3YXwhL3M+js7S7MIGsrNvpoZygEQml+McVYZ2Vmyg== - dependencies: - "@datadog/browser-core" "4.47.0" +"@datadog/browser-core@5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@datadog/browser-core/-/browser-core-5.14.0.tgz#86ea04e264d3a2af655059576e9a523a2cbf8125" + integrity sha512-sr02NfURpidS+FW9JaIDwqG8JfeqNy2GjPhzxZ7q3IITktX0wNxEq+IhwJDfB+2G/2iT9t7WgFBshx/e3Rb0Ow== + +"@datadog/browser-rum-core@5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@datadog/browser-rum-core/-/browser-rum-core-5.14.0.tgz#599fd4f21c4269f28ebe1ccd6efb9ac89d842c67" + integrity sha512-DwpHwU+7LhuDwUKnOuQczM/QlsgCZofQyPOTEih2Rj9yrVpf6Z1lNQg9TCPNqGLAKs+Q1HqP1fJYa+tBCmgbhw== + dependencies: + "@datadog/browser-core" "5.14.0" + +"@datadog/browser-rum@^5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@datadog/browser-rum/-/browser-rum-5.14.0.tgz#a6fbd5729c9e26104832f8eb774b33b8efdde55d" + integrity sha512-IijqDr1zDWJdNcbasjOMoriXDSf4ILbtt9DJF6+UMidQ32CNoCr524IK0d+9Qoea1uhEDIxIsA5lDN+v8zb6sg== + dependencies: + "@datadog/browser-core" "5.14.0" + "@datadog/browser-rum-core" "5.14.0" + +"@datadog/datadog-ci@^2.37.0": + version "2.37.0" + resolved "https://registry.yarnpkg.com/@datadog/datadog-ci/-/datadog-ci-2.37.0.tgz#8454730a0604e5a22920a655aed37e48277dd8fc" + integrity sha512-FkaWw1m7R3wd847ZUOVpB5bk9YWPfonGfGbCR19Ay9HnNddw5t7DqUbXq4WqWNhZnIYVHivFB2XyZWTAwOervw== + dependencies: + "@aws-sdk/client-cloudwatch-logs" "^3.537.0" + "@aws-sdk/client-iam" "^3.535.0" + "@aws-sdk/client-lambda" "^3.536.0" + "@aws-sdk/client-sfn" "^3.535.0" + "@aws-sdk/core" "^3.535.0" + "@aws-sdk/credential-provider-ini" "^3.535.0" + "@aws-sdk/credential-providers" "^3.535.0" + "@google-cloud/logging" "^11.0.0" + "@google-cloud/run" "^1.0.2" + "@smithy/property-provider" "^2.0.12" + "@smithy/util-retry" "^2.0.4" + "@types/datadog-metrics" "0.6.1" + "@types/retry" "0.12.0" + ajv "^8.12.0" + ajv-formats "^2.1.1" + async-retry "1.3.1" + axios "^1.6.8" + chalk "3.0.0" + clipanion "^3.2.1" + datadog-metrics "0.9.3" + deep-extend "0.6.0" + deep-object-diff "^1.1.9" + fast-xml-parser "^4.2.5" + form-data "4.0.0" + fuzzy "^0.1.3" + glob "7.1.4" + google-auth-library "^8.9.0" + inquirer "^8.2.5" + inquirer-checkbox-plus-prompt "^1.4.2" + js-yaml "3.13.1" + jszip "^3.10.1" + ora "5.4.1" + proxy-agent "^6.4.0" + rimraf "^3.0.2" + semver "^7.5.3" + simple-git "3.16.0" + ssh2 "^1.15.0" + ssh2-streams "0.4.10" + sshpk "1.16.1" + terminal-link "2.1.1" + tiny-async-pool "^2.1.0" + typanion "^3.14.0" + uuid "^9.0.0" + ws "7.4.6" + xml2js "0.5.0" + yamux-js "0.1.2" "@emotion/babel-plugin@^11.11.0": version "11.11.0" @@ -2810,6 +3531,11 @@ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.1.tgz#fdb1ec4952b689f5f7aa0bffe46180bb35490032" integrity sha512-GkWzv+L6d2bI5f/Vk6ikJ9xtl7dfXtoRu3YGE6nq0p/FFqA1ebMOAWg3XgRyb0I6LYyYkiAo+3/KrwuBp8xG7A== +"@fortawesome/fontawesome-common-types@6.5.2": + version "6.5.2" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.2.tgz#eaf2f5699f73cef198454ebc0c414e3688898179" + integrity sha512-gBxPg3aVO6J0kpfHNILc+NMhXnqHumFxOmjYCFfOiLZfwhnnfhtsdA2hfJlDnj+8PjAs6kKQPenOTKj3Rf7zHw== + "@fortawesome/fontawesome-svg-core@^6.4.2": version "6.4.2" resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz#37f4507d5ec645c8b50df6db14eced32a6f9be09" @@ -2831,12 +3557,12 @@ dependencies: "@fortawesome/fontawesome-common-types" "6.5.1" -"@fortawesome/free-solid-svg-icons@^6.4.2": - version "6.4.2" - resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.2.tgz#33a02c4cb6aa28abea7bc082a9626b7922099df4" - integrity sha512-sYwXurXUEQS32fZz9hVCUUv/xu49PEJEyUOsA51l6PU/qVgfbTb2glsTEaJngVVT8VqBATRIdh7XVgV1JF1LkA== +"@fortawesome/free-solid-svg-icons@^6.5.2": + version "6.5.2" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.2.tgz#9b40b077b27400a5e9fcbf2d15b986c7be69e9ca" + integrity sha512-QWFZYXFE7O1Gr1dTIp+D6UcFUF0qElOnZptpi7PBUMylJh+vFmIedVe1Ir6RM1t2tEQLLSV1k7bR4o92M+uqlw== dependencies: - "@fortawesome/fontawesome-common-types" "6.4.2" + "@fortawesome/fontawesome-common-types" "6.5.2" "@fortawesome/react-fontawesome@^0.2.0": version "0.2.0" @@ -2845,6 +3571,85 @@ dependencies: prop-types "^15.8.1" +"@google-cloud/common@^5.0.0": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-5.0.2.tgz#423ad94b125d44263cbed2b5eb1ce1d4d53dc038" + integrity sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA== + dependencies: + "@google-cloud/projectify" "^4.0.0" + "@google-cloud/promisify" "^4.0.0" + arrify "^2.0.1" + duplexify "^4.1.1" + extend "^3.0.2" + google-auth-library "^9.0.0" + html-entities "^2.5.2" + retry-request "^7.0.0" + teeny-request "^9.0.0" + +"@google-cloud/logging@^11.0.0": + version "11.1.0" + resolved "https://registry.yarnpkg.com/@google-cloud/logging/-/logging-11.1.0.tgz#79e1f05a27a596d154ab475b167b2d98e29e1457" + integrity sha512-S3Zsd+HZxIdZgDZByJ+2GaSQ8rA5OLfdZoZ9Ys1iSZ4HRIhO9ZxlXbmGZgGK9JJ2GaXp7Rux4K4LpkqoYPKnEg== + dependencies: + "@google-cloud/common" "^5.0.0" + "@google-cloud/paginator" "^5.0.0" + "@google-cloud/projectify" "^4.0.0" + "@google-cloud/promisify" "^4.0.0" + arrify "^2.0.1" + dot-prop "^6.0.0" + eventid "^2.0.0" + extend "^3.0.2" + gcp-metadata "^6.0.0" + google-auth-library "^9.0.0" + google-gax "^4.0.3" + on-finished "^2.3.0" + pumpify "^2.0.1" + stream-events "^1.0.5" + uuid "^9.0.0" + +"@google-cloud/paginator@^5.0.0": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-5.0.2.tgz#86ad773266ce9f3b82955a8f75e22cd012ccc889" + integrity sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg== + dependencies: + arrify "^2.0.0" + extend "^3.0.2" + +"@google-cloud/projectify@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-4.0.0.tgz#d600e0433daf51b88c1fa95ac7f02e38e80a07be" + integrity sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA== + +"@google-cloud/promisify@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-4.0.0.tgz#a906e533ebdd0f754dca2509933334ce58b8c8b1" + integrity sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g== + +"@google-cloud/run@^1.0.2": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@google-cloud/run/-/run-1.3.0.tgz#4aa64b740ee30118b9c2c37fe776e304c12e7a04" + integrity sha512-Ke9XZuKbOcA8lDYJ6VqpC1cVg42CWJWBer2R6/ix2EvfX/akDgqQBQMhZ8JwXHc4RtwYy/SeRE838ggQO4TYKQ== + dependencies: + google-gax "^4.0.3" + +"@grpc/grpc-js@~1.10.3": + version "1.10.9" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.10.9.tgz#468cc1549a3fe37b760a16745fb7685d91f4f10c" + integrity sha512-5tcgUctCG0qoNyfChZifz2tJqbRbXVO9J7X6duFcOjY3HUNCxg5D0ZCK7EP9vIcZ0zRpLU9bWkyCqVCLZ46IbQ== + dependencies: + "@grpc/proto-loader" "^0.7.13" + "@js-sdsl/ordered-map" "^4.4.2" + +"@grpc/proto-loader@^0.7.13": + version "0.7.13" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.13.tgz#f6a44b2b7c9f7b609f5748c6eac2d420e37670cf" + integrity sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw== + dependencies: + lodash.camelcase "^4.3.0" + long "^5.0.0" + protobufjs "^7.2.5" + yargs "^17.7.2" + "@gulpjs/to-absolute-glob@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz#1fc2460d3953e1d9b9f2dfdb4bcc99da4710c021" @@ -3202,6 +4007,23 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@js-sdsl/ordered-map@^4.4.2": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c" + integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== + +"@kwsites/file-exists@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99" + integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw== + dependencies: + debug "^4.1.1" + +"@kwsites/promise-deferred@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919" + integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw== + "@messageformat/core@^3.2.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@messageformat/core/-/core-3.3.0.tgz#31edd52a5f7d017adad85c929809f07741dcfd3f" @@ -3289,7 +4111,7 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== -"@prettier/eslint@npm:prettier-eslint@^16.1.0", prettier-eslint@^16.1.2: +"@prettier/eslint@npm:prettier-eslint@^16.1.0": version "16.1.2" resolved "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-16.1.2.tgz#86364fea13dd063f3df715b922678dd8a0fd4be1" integrity sha512-mGFGZQbAh11FSnwW3H1zngzQYR2QMmHO8vdfgnAuzOFhnDeUZHYtwpqQvOMOMT0k818Dr1X+J4a/sVE0r34RKQ== @@ -3307,6 +4129,59 @@ typescript "^5.2.2" vue-eslint-parser "^9.1.0" +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + "@react-aria/ssr@^3.5.0": version "3.6.0" resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.6.0.tgz#e5d52bd1686ff229f68f806cf94ee29dd9f54fb7" @@ -3380,10 +4255,10 @@ dependencies: dequal "^2.0.2" -"@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== +"@restart/ui@^1.6.8": + version "1.6.9" + resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.6.9.tgz#05ec905a56486fa39b62f29c09b3917e57acd62f" + integrity sha512-mUbygUsJcRurjZCt1f77gg4DpheD1D+Sc7J3JjAkysUj7t8m4EBJVOqWC9788Qtbc69cJ+HlJc6jBguKwS8Mcw== dependencies: "@babel/runtime" "^7.21.0" "@popperjs/core" "^2.11.6" @@ -3403,10 +4278,10 @@ estree-walker "^2.0.1" picomatch "^2.2.2" -"@rollup/pluginutils@^5.0.2": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.3.tgz#183126d69aeb1cfa23401d5a71cb4b8c16c4a4e0" - integrity sha512-hfllNN4a80rwNQ9QCxhxuHCGHMAvabXqxNdaChUSSadMre7t4iEUI6fFAhBOn/eIYTgYVhBv7vCLsAJ4u3lf3g== +"@rollup/pluginutils@^5.0.5": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" + integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== dependencies: "@types/estree" "^1.0.0" estree-walker "^2.0.2" @@ -3453,86 +4328,562 @@ dependencies: "@sinonjs/commons" "^3.0.0" -"@svgr/babel-plugin-add-jsx-attribute@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-7.0.0.tgz#80856c1b7a3b7422d232f6e079f0beb90c4a13e9" - integrity sha512-khWbXesWIP9v8HuKCl2NU2HNAyqpSQ/vkIl36Nbn4HIwEYSRWL0H7Gs6idJdha2DkpFDWlsqMELvoCE8lfFY6Q== +"@smithy/abort-controller@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.0.1.tgz#bb8debe1c23ca62a61b33a9ee2918f5a79d81928" + integrity sha512-Jb7jg4E+C+uvrUQi+h9kbILY6ts6fglKZzseMCHlH9ayq+1f5QdpYf8MV/xppuiN6DAMJAmwGz53GwP3213dmA== + dependencies: + "@smithy/types" "^3.1.0" + tslib "^2.6.2" -"@svgr/babel-plugin-remove-jsx-attribute@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-7.0.0.tgz#91da77a009dc38e8d30da45d9b62ef8736f2d90a" - integrity sha512-iiZaIvb3H/c7d3TH2HBeK91uI2rMhZNwnsIrvd7ZwGLkFw6mmunOCoVnjdYua662MqGFxlN9xTq4fv9hgR4VXQ== +"@smithy/config-resolver@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.2.tgz#ad19331d48d9a6e67bdd43a0099e1d8af1b82a82" + integrity sha512-wUyG6ezpp2sWAvfqmSYTROwFUmJqKV78GLf55WODrosBcT0BAMd9bOLO4HRhynWBgAobPml2cF9ZOdgCe00r+g== + dependencies: + "@smithy/node-config-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.1" + tslib "^2.6.2" -"@svgr/babel-plugin-remove-jsx-empty-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-7.0.0.tgz#5154ff1213509e36ab315974c8c2fd48dafb827b" - integrity sha512-sQQmyo+qegBx8DfFc04PFmIO1FP1MHI1/QEpzcIcclo5OAISsOJPW76ZIs0bDyO/DBSJEa/tDa1W26pVtt0FRw== +"@smithy/core@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.2.1.tgz#92ed71eb96ef16d5ac8b23dbdf913bcb225ab875" + integrity sha512-R8Pzrr2v2oGUoj4CTZtKPr87lVtBsz7IUBGhSwS1kc6Cj0yPwNdYbkzhFsxhoDE9+BPl09VN/6rFsW9GJzWnBA== + dependencies: + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-retry" "^3.0.4" + "@smithy/middleware-serde" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/util-middleware" "^3.0.1" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.1.tgz#8b2b3c9e7e67fd9e3e436a5e1db6652ab339af7b" + integrity sha512-htndP0LwHdE3R3Nam9ZyVWhwPYOmD4xCL79kqvNxy8u/bv0huuy574CSiRY4cvEICgimv8jlVfLeZ7zZqbnB2g== + dependencies: + "@smithy/node-config-provider" "^3.1.1" + "@smithy/property-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + tslib "^2.6.2" -"@svgr/babel-plugin-replace-jsx-attribute-value@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-7.0.0.tgz#7e72f44ee57fdbcb02fb0d4a7629466c5242725e" - integrity sha512-i6MaAqIZXDOJeikJuzocByBf8zO+meLwfQ/qMHIjCcvpnfvWf82PFvredEZElErB5glQFJa2KVKk8N2xV6tRRA== +"@smithy/eventstream-codec@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.0.tgz#74138287be7e1edd6a72400bb5181f5e1a7b44dd" + integrity sha512-XFDl70ZY+FabSnTX3oQGGYvdbEaC8vPEFkCEOoBkumqaZIwR1WjjJCDu2VMXlHbKWKshefWXdT0NYteL5v6uFw== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^3.1.0" + "@smithy/util-hex-encoding" "^3.0.0" + tslib "^2.6.2" -"@svgr/babel-plugin-svg-dynamic-title@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-7.0.0.tgz#8caf0449c678ea29be756b89960b2b16c9f33f00" - integrity sha512-BoVSh6ge3SLLpKC0pmmN9DFlqgFy4NxNgdZNLPNJWBUU7TQpDWeBuyVuDW88iXydb5Cv0ReC+ffa5h3VrKfk1w== +"@smithy/eventstream-serde-browser@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.2.tgz#342fbdbdf99f8fb7c247024716c5236bffae043e" + integrity sha512-6147vdedQGaWn3Nt4P1KV0LuV8IH4len1SAeycyko0p8oRLWFyYyx0L8JHGclePDSphkjxZqBHtyIfyupCaTGg== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.2" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" -"@svgr/babel-plugin-svg-em-dimensions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-7.0.0.tgz#4db6b5af6d29e93db236b1a013fa953754071d41" - integrity sha512-tNDcBa+hYn0gO+GkP/AuNKdVtMufVhU9fdzu+vUQsR18RIJ9RWe7h/pSBY338RO08wArntwbDk5WhQBmhf2PaA== +"@smithy/eventstream-serde-config-resolver@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.1.tgz#74e9cb3992edc03319ffa05eb6008aacaaca4f71" + integrity sha512-6+B8P+5Q1mll4u7IoI7mpmYOSW3/c2r3WQoYLdqOjbIKMixJFGmN79ZjJiNMy4X2GZ4We9kQ6LfnFuczSlhcyw== + dependencies: + "@smithy/types" "^3.1.0" + tslib "^2.6.2" -"@svgr/babel-plugin-transform-react-native-svg@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-7.0.0.tgz#236995e58b5e36ff06365d5310509ce5391aeec9" - integrity sha512-qw54u8ljCJYL2KtBOjI5z7Nzg8LnSvQOP5hPKj77H4VQL4+HdKbAT5pnkkZLmHKYwzsIHSYKXxHouD8zZamCFQ== +"@smithy/eventstream-serde-node@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.2.tgz#fff9e92983c97f07174c1bbcf7f1af47fc478a6e" + integrity sha512-DLtmGAfqxZAql8rB+HqyPlUne22u3EEVj+hxlUjgXk0hXt+SfLGK0ljzRFmiWQ3qGpHu1NdJpJA9e5JE/dJxFw== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.2" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" -"@svgr/babel-plugin-transform-svg-component@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-7.0.0.tgz#a9b62730acf10d22a2aa57e0f701c0ecbc270430" - integrity sha512-CcFECkDj98daOg9jE3Bh3uyD9kzevCAnZ+UtzG6+BQG/jOQ2OA3jHnX6iG4G1MCJkUQFnUvEv33NvQfqrb/F3A== +"@smithy/eventstream-serde-universal@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.2.tgz#d1704c14b0a691d0d8b4f68def68adaa20bb96d8" + integrity sha512-d3SgAIQ/s4EbU8HAHJ8m2MMJPAL30nqJktyVgvqZWNznA8PJl61gJw5gj/yjIt/Fvs3d4fU8FmPPAhdp2yr/7A== + dependencies: + "@smithy/eventstream-codec" "^3.1.0" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" -"@svgr/babel-preset@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-7.0.0.tgz#55aaca4cec2ff6515a571715b6b6fa98675b66d9" - integrity sha512-EX/NHeFa30j5UjldQGVQikuuQNHUdGmbh9kEpBKofGUtF0GUPJ4T4rhoYiqDAOmBOxojyot36JIFiDUHUK1ilQ== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^7.0.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^7.0.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^7.0.0" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^7.0.0" - "@svgr/babel-plugin-svg-dynamic-title" "^7.0.0" - "@svgr/babel-plugin-svg-em-dimensions" "^7.0.0" - "@svgr/babel-plugin-transform-react-native-svg" "^7.0.0" - "@svgr/babel-plugin-transform-svg-component" "^7.0.0" - -"@svgr/core@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-7.0.0.tgz#def863d2670c682615583c80b408e83c095c2233" - integrity sha512-ztAoxkaKhRVloa3XydohgQQCb0/8x9T63yXovpmHzKMkHO6pkjdsIAWKOS4bE95P/2quVh1NtjSKlMRNzSBffw== +"@smithy/fetch-http-handler@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.0.2.tgz#eff4056e819b3591d1c5d472ee58c2981886920a" + integrity sha512-0nW6tLK0b7EqSsfKvnOmZCgJqnodBAnvqcrlC5dotKfklLedPTRGsQamSVbVDWyuU/QGg+YbZDJUQ0CUufJXZQ== + dependencies: + "@smithy/protocol-http" "^4.0.1" + "@smithy/querystring-builder" "^3.0.1" + "@smithy/types" "^3.1.0" + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + +"@smithy/hash-node@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.1.tgz#52924bcbd6a02c7f7e2d9c332f59d5adc09688a3" + integrity sha512-w2ncjgk2EYO2+WhAsSQA8owzoOSY7IL1qVytlwpnL1pFGWTjIoIh5nROkEKXY51unB63bMGZqDiVoXaFbyKDlg== + dependencies: + "@smithy/types" "^3.1.0" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.1.tgz#921787acfbe136af7ded46ae6f4b3d81c9b7e05e" + integrity sha512-RSNF/32BKygXKKMyS7koyuAq1rcdW5p5c4EFa77QenBFze9As+JiRnV9OWBh2cB/ejGZalEZjvIrMLHwJl7aGA== + dependencies: + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@smithy/is-array-buffer@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" + integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== + dependencies: + tslib "^2.6.2" + +"@smithy/is-array-buffer@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz#9a95c2d46b8768946a9eec7f935feaddcffa5e7a" + integrity sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ== + dependencies: + tslib "^2.6.2" + +"@smithy/middleware-content-length@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.1.tgz#90bce78dfd0db978df7920ae58e420ce9ed2f79a" + integrity sha512-6QdK/VbrCfXD5/QolE2W/ok6VqxD+SM28Ds8iSlEHXZwv4buLsvWyvoEEy0322K/g5uFgPzBmZjGqesTmPL+yQ== + dependencies: + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.2.tgz#93bb575a25bb0bd5d1d18cd77157ccb2ba15112a" + integrity sha512-gWEaGYB3Bei17Oiy/F2IlUPpBazNXImytoOdJ1xbrUOaJKAOiUhx8/4FOnYLLJHdAwa9PlvJ2ULda2f/Dnwi9w== + dependencies: + "@smithy/middleware-serde" "^3.0.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + "@smithy/url-parser" "^3.0.1" + "@smithy/util-middleware" "^3.0.1" + tslib "^2.6.2" + +"@smithy/middleware-retry@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.4.tgz#4f1a23c218fe279659c3d88ec1c18bf19938eba6" + integrity sha512-Tu+FggbLNF5G9L6Wi8o32Mg4bhlBInWlhhaFKyytGRnkfxGopxFVXJQn7sjZdFYJyTz6RZZa06tnlvavUgtoVg== + dependencies: + "@smithy/node-config-provider" "^3.1.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/service-error-classification" "^3.0.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-retry" "^3.0.1" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.1.tgz#566ec46ee84873108c1cea26b3f3bd2899a73249" + integrity sha512-ak6H/ZRN05r5+SR0/IUc5zOSyh2qp3HReg1KkrnaSLXmncy9lwOjNqybX4L4x55/e5mtVDn1uf/gQ6bw5neJPw== + dependencies: + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@smithy/middleware-stack@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.1.tgz#9418f1295efda318c181bf3bca65173a75d133e5" + integrity sha512-fS5uT//y1SlBdkzIvgmWQ9FufwMXrHSSbuR25ygMy1CRDIZkcBMoF4oTMYNfR9kBlVBcVzlv7joFdNrFuQirPA== + dependencies: + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@smithy/node-config-provider@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.1.tgz#a361ab228d2229b03cc2fbdfd304055c38127614" + integrity sha512-z5G7+ysL4yUtMghUd2zrLkecu0mTfnYlt5dR76g/HsFqf7evFazwiZP1ag2EJenGxNBDwDM5g8nm11NPogiUVA== + dependencies: + "@smithy/property-provider" "^3.1.1" + "@smithy/shared-ini-file-loader" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@smithy/node-http-handler@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.0.1.tgz#40e1ebe00aeb628a46a3a12b14ad6cabb69b576e" + integrity sha512-hlBI6MuREA4o1wBMEt+QNhUzoDtFFvwR6ecufimlx9D79jPybE/r8kNorphXOi91PgSO9S2fxRjcKCLk7Jw8zA== + dependencies: + "@smithy/abort-controller" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/querystring-builder" "^3.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@smithy/property-provider@^2.0.12": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.2.0.tgz#37e3525a3fa3e11749f86a4f89f0fd7765a6edb0" + integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/property-provider@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.1.tgz#4849b69b83ac97e68e80d2dc0c2b98ce5950dffe" + integrity sha512-YknOMZcQkB5on+MU0DvbToCmT2YPtTETMXW0D3+/Iln7ezT+Zm1GMHhCW1dOH/X/+LkkQD9aXEoCX/B10s4Xdw== + dependencies: + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@smithy/protocol-http@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.0.1.tgz#7b57080565816f229d2391726f537e13371c7e38" + integrity sha512-eBhm9zwcFPEazc654c0BEWtxYAzrw+OhoSf5pkwKzfftWKXRoqEhwOE2Pvn30v0iAdo7Mfsfb6pi1NnZlGCMpg== + dependencies: + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@smithy/querystring-builder@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.1.tgz#8fb20e1d13154661612954c5ba448e0875be6118" + integrity sha512-vKitpnG/2KOMVlx3x1S3FkBH075EROG3wcrcDaNerQNh8yuqnSL23btCD2UyX4i4lpPzNW6VFdxbn2Z25b/g5Q== + dependencies: + "@smithy/types" "^3.1.0" + "@smithy/util-uri-escape" "^3.0.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.1.tgz#68589196fedf280aad2c0a69a2a016f78b2137cf" + integrity sha512-Qt8DMC05lVS8NcQx94lfVbZSX+2Ym7032b/JR8AlboAa/D669kPzqb35dkjkvAG6+NWmUchef3ENtrD6F+5n8Q== + dependencies: + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@smithy/service-error-classification@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz#0568a977cc0db36299d8703a5d8609c1f600c005" + integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== + dependencies: + "@smithy/types" "^2.12.0" + +"@smithy/service-error-classification@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.1.tgz#23db475d3cef726e8bf3435229e6e04e4de92430" + integrity sha512-ubFUvIePjDCyIzZ+pLETqNC6KXJ/fc6g+/baqel7Zf6kJI/kZKgjwkCI7zbUhoUuOZ/4eA/87YasVu40b/B4bA== + dependencies: + "@smithy/types" "^3.1.0" + +"@smithy/shared-ini-file-loader@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.1.tgz#752ecd8962a660ded75d25341a48feb94f145a6f" + integrity sha512-nD6tXIX2126/P9e3wqRY1bm9dTtPZwRDyjVOd18G28o+1UOG+kOVgUwujE795HslSuPlEgqzsH5sgNP1hDjj9g== + dependencies: + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@smithy/signature-v4@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-3.1.0.tgz#cc819568c4fcbadce107901680a96e662bccc86a" + integrity sha512-m0/6LW3IQ3/JBcdhqjpkpABPTPhcejqeAn0U877zxBdNLiWAnG2WmCe5MfkUyVuvpFTPQnQwCo/0ZBR4uF5kxg== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/types" "^3.1.0" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-middleware" "^3.0.1" + "@smithy/util-uri-escape" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.1.2.tgz#1c27ab4910bbfd6c0bc04ddd8412494e7a7daba7" + integrity sha512-f3eQpczBOFUtdT/ptw2WpUKu1qH1K7xrssrSiHYtd9TuLXkvFqb88l9mz9FHeUVNSUxSnkW1anJnw6rLwUKzQQ== + dependencies: + "@smithy/middleware-endpoint" "^3.0.2" + "@smithy/middleware-stack" "^3.0.1" + "@smithy/protocol-http" "^4.0.1" + "@smithy/types" "^3.1.0" + "@smithy/util-stream" "^3.0.2" + tslib "^2.6.2" + +"@smithy/types@^2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" + integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== + dependencies: + tslib "^2.6.2" + +"@smithy/types@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.1.0.tgz#e2eb2e2130026a8a0631b2605c17df1975aa99d6" + integrity sha512-qi4SeCVOUPjhSSZrxxB/mB8DrmuSFUcJnD9KXjuP+7C3LV/KFV4kpuUSH3OHDZgQB9TEH/1sO/Fq/5HyaK9MPw== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.1.tgz#5451fc7034e9eda112696d1a9508746a7f8b0521" + integrity sha512-G140IlNFlzYWVCedC4E2d6NycM1dCUbe5CnsGW1hmGt4hYKiGOw0v7lVru9WAn5T2w09QEjl4fOESWjGmCvVmg== + dependencies: + "@smithy/querystring-parser" "^3.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@smithy/util-base64@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-3.0.0.tgz#f7a9a82adf34e27a72d0719395713edf0e493017" + integrity sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ== + dependencies: + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz#86ec2f6256310b4845a2f064e2f571c1ca164ded" + integrity sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz#99a291bae40d8932166907fe981d6a1f54298a6d" + integrity sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA== + dependencies: + tslib "^2.6.2" + +"@smithy/util-buffer-from@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" + integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== + dependencies: + "@smithy/is-array-buffer" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-buffer-from@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz#559fc1c86138a89b2edaefc1e6677780c24594e3" + integrity sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-config-provider@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz#62c6b73b22a430e84888a8f8da4b6029dd5b8efe" + integrity sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.4.tgz#4392db3d96aa08ae161bb987ecfedc094d84b88d" + integrity sha512-sXtin3Mue3A3xo4+XkozpgPptgmRwvNPOqTvb3ANGTCzzoQgAPBNjpE+aXCINaeSMXwHmv7E2oEn2vWdID+SAQ== + dependencies: + "@smithy/property-provider" "^3.1.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.4.tgz#794b8bb3facb5f6581af8d02fcf1b42b34c103e5" + integrity sha512-CUF6TyxLh3CgBRVYgZNOPDfzHQjeQr0vyALR6/DkQkOm7rNfGEzW1BRFi88C73pndmfvoiIT7ochuT76OPz9Dw== + dependencies: + "@smithy/config-resolver" "^3.0.2" + "@smithy/credential-provider-imds" "^3.1.1" + "@smithy/node-config-provider" "^3.1.1" + "@smithy/property-provider" "^3.1.1" + "@smithy/smithy-client" "^3.1.2" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@smithy/util-endpoints@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.0.2.tgz#f995cca553569af43bef82f59d63b4969516df95" + integrity sha512-4zFOcBFQvifd2LSD4a1dKvfIWWwh4sWNtS3oZ7mpob/qPPmJseqKB148iT+hWCDsG//TmI+8vjYPgZdvnkYlTg== + dependencies: + "@smithy/node-config-provider" "^3.1.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@smithy/util-hex-encoding@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz#32938b33d5bf2a15796cd3f178a55b4155c535e6" + integrity sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-middleware@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.1.tgz#3e0eabaf936e62651a0b9a7c7c3bbe43d3971c91" + integrity sha512-WRODCQtUsO7vIvfrdxS8RFPeLKcewYtaCglZsBsedIKSUGIIvMlZT5oh+pCe72I+1L+OjnZuqRNpN2LKhWA4KQ== + dependencies: + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@smithy/util-retry@^2.0.4": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.2.0.tgz#e8e019537ab47ba6b2e87e723ec51ee223422d85" + integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== + dependencies: + "@smithy/service-error-classification" "^2.1.5" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@smithy/util-retry@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.1.tgz#24037ff87a314a1ac99f80da43f579ae2352fe18" + integrity sha512-5lRtYm+8fNFEUTdqZXg5M4ppVp40rMIJfR1TpbHAhKQgPIDpWT+iYMaqgnwEbtpi9U1smyUOPv5Sg+M1neOBgw== + dependencies: + "@smithy/service-error-classification" "^3.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@smithy/util-stream@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.0.2.tgz#ed1377bfe824d8acfc105ab2d17ec4f376382cb2" + integrity sha512-n5Obp5AnlI6qHo8sbupwrcpBe6vFp4qkl0SRNuExKPNrH3ABAMG2ZszRTIUIv2b4AsFrCO+qiy4uH1Q3z1dxTA== + dependencies: + "@smithy/fetch-http-handler" "^3.0.2" + "@smithy/node-http-handler" "^3.0.1" + "@smithy/types" "^3.1.0" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54" + integrity sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg== + dependencies: + tslib "^2.6.2" + +"@smithy/util-utf8@^2.0.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" + integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-utf8@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-3.0.0.tgz#1a6a823d47cbec1fd6933e5fc87df975286d9d6a" + integrity sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA== + dependencies: + "@smithy/util-buffer-from" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-waiter@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.0.1.tgz#62d8ff58374032aa8c7e573b1ca4234407c605bd" + integrity sha512-wwnrVQdjQxvWGOAiLmqlEhENGCcDIN+XJ/+usPOgSZObAslrCXgKlkX7rNVwIWW2RhPguTKthvF+4AoO0Z6KpA== + dependencies: + "@smithy/abort-controller" "^3.0.1" + "@smithy/types" "^3.1.0" + tslib "^2.6.2" + +"@svgr/babel-plugin-add-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" + integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== + +"@svgr/babel-plugin-remove-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== + +"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" + integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== + +"@svgr/babel-plugin-svg-dynamic-title@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" + integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== + +"@svgr/babel-plugin-svg-em-dimensions@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" + integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== + +"@svgr/babel-plugin-transform-react-native-svg@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" + integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== + +"@svgr/babel-plugin-transform-svg-component@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" + integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== + +"@svgr/babel-preset@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" + integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" + "@svgr/babel-plugin-transform-svg-component" "8.0.0" + +"@svgr/core@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" + integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== dependencies: "@babel/core" "^7.21.3" - "@svgr/babel-preset" "^7.0.0" + "@svgr/babel-preset" "8.1.0" camelcase "^6.2.0" cosmiconfig "^8.1.3" + snake-case "^3.0.4" -"@svgr/hast-util-to-babel-ast@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-7.0.0.tgz#d457dfbe74ebc1e5a6daf97ded49e9576a3a00cf" - integrity sha512-42Ej9sDDEmsJKjrfQ1PHmiDiHagh/u9AHO9QWbeNx4KmD9yS5d1XHmXUNINfUcykAU+4431Cn+k6Vn5mWBYimQ== +"@svgr/hast-util-to-babel-ast@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" + integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== dependencies: "@babel/types" "^7.21.3" entities "^4.4.0" -"@svgr/plugin-jsx@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-7.0.0.tgz#b9e0c7d05bc890d70163ac0490ba8c41f1afab90" - integrity sha512-SWlTpPQmBUtLKxXWgpv8syzqIU8XgFRvyhfkam2So8b3BE0OS0HPe5UfmlJ2KIC+a7dpuuYovPR2WAQuSyMoPw== +"@svgr/plugin-jsx@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" + integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== dependencies: "@babel/core" "^7.21.3" - "@svgr/babel-preset" "^7.0.0" - "@svgr/hast-util-to-babel-ast" "^7.0.0" + "@svgr/babel-preset" "8.1.0" + "@svgr/hast-util-to-babel-ast" "8.0.0" svg-parser "^2.0.4" "@swc/helpers@^0.4.14": @@ -3597,6 +4948,11 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@tootallnate/quickjs-emscripten@^0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" + integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== + "@types/aria-query@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" @@ -3635,6 +4991,16 @@ dependencies: "@babel/types" "^7.20.7" +"@types/caseless@*": + version "0.12.5" + resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.5.tgz#db9468cb1b1b5a925b8f34822f1669df0c5472f5" + integrity sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg== + +"@types/datadog-metrics@0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@types/datadog-metrics/-/datadog-metrics-0.6.1.tgz#9957ad75fe3a4742c87b94273e94c40228c8dd4c" + integrity sha512-p6zVpfmNcXwtcXjgpz7do/fKyfndGhU5sGJVtb5Gn5PvLDiQUAgD0mI/itf/99sBi9DRxeyhFQ9dQF6OxxQNbA== + "@types/eslint@^8.4.5": version "8.44.2" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.2.tgz#0d21c505f98a89b8dd4d37fa162b09da6089199a" @@ -3668,14 +5034,6 @@ dependencies: "@types/node" "*" -"@types/hoist-non-react-statics@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" - integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" @@ -3748,15 +5106,20 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.194.tgz#b71eb6f7a0ff11bff59fc987134a093029258a76" integrity sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g== +"@types/long@^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== + "@types/minimatch@^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== -"@types/node@*", "@types/node@^20.10.8": - version "20.10.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.8.tgz#f1e223cbde9e25696661d167a5b93a9b2a5d57c7" - integrity sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA== +"@types/node@*", "@types/node@>=13.7.0": + version "20.14.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.2.tgz#a5f4d2bcb4b6a87bffcaa717718c5a0f208f4a18" + integrity sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q== dependencies: undici-types "~5.26.4" @@ -3767,6 +5130,13 @@ dependencies: undici-types "~5.26.4" +"@types/node@^20.10.8": + version "20.10.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.8.tgz#f1e223cbde9e25696661d167a5b93a9b2a5d57c7" + integrity sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA== + dependencies: + undici-types "~5.26.4" + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -3800,6 +5170,21 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/request@^2.48.8": + version "2.48.12" + resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.12.tgz#0f590f615a10f87da18e9790ac94c29ec4c5ef30" + integrity sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw== + dependencies: + "@types/caseless" "*" + "@types/node" "*" + "@types/tough-cookie" "*" + form-data "^2.5.0" + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + "@types/scheduler@*": version "0.16.3" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" @@ -3841,9 +5226,9 @@ integrity sha512-Lja2xYuuf2B3knEsga8ShbOdsfNOtzT73GyJmZyY7eGl2+ajOqrs8yM5ze0fsSoYwvA6bw7/Qr7OZ7PEEmYwWg== "@types/tough-cookie@*": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" - integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" + integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== "@types/use-sync-external-store@^0.0.3": version "0.0.3" @@ -4065,6 +5450,13 @@ abab@^2.0.6: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + acorn-globals@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" @@ -4105,6 +5497,13 @@ agent-base@6: dependencies: debug "4" +agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== + dependencies: + debug "^4.3.4" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -4113,6 +5512,13 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -4123,6 +5529,16 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.0, ajv@^8.12.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.16.0.tgz#22e2a92b94f005f7e0f9c9d39652ef0b8f6f0cb4" + integrity sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw== + dependencies: + fast-deep-equal "^3.1.3" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.4.1" + ansi-colors@^4.1.1: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" @@ -4321,12 +5737,12 @@ arraybuffer.prototype.slice@^1.0.2: is-array-buffer "^3.0.2" is-shared-array-buffer "^1.0.2" -arrify@^2.0.1: +arrify@^2.0.0, arrify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -asn1@~0.2.3: +asn1@^0.2.6, asn1@~0.2.0, asn1@~0.2.3: version "0.2.6" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== @@ -4343,11 +5759,25 @@ ast-types-flow@^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.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" + astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +async-retry@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.1.tgz#139f31f8ddce50c0870b0ba558a6079684aaed55" + integrity sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA== + dependencies: + retry "0.12.0" + async@^3.2.0, async@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" @@ -4399,6 +5829,15 @@ axios@^1.6.1, axios@^1.6.7: form-data "^4.0.0" proxy-from-env "^1.1.0" +axios@^1.6.8: + version "1.7.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" + integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axobject-query@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" @@ -4568,7 +6007,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.3.1: +base64-js@^1.3.0, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -4594,18 +6033,37 @@ bash-path@^1.0.1: arr-union "^3.1.0" is-windows "^1.0.1" -bcrypt-pbkdf@^1.0.0: +basic-ftp@^5.0.2: + version "5.0.5" + resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0" + integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg== + +bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" +bignumber.js@^9.0.0: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + bl@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273" @@ -4645,6 +6103,11 @@ bottleneck@^2.19.5: resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== +bowser@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -4736,12 +6199,17 @@ buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@^5.6.0: +buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -4757,6 +6225,11 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" +buildcheck@~0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.6.tgz#89aa6e417cfd1e2196e3f8fe915eb709d2fe4238" + integrity sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A== + cachedir@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" @@ -4836,7 +6309,15 @@ chakra-react-select@^4.7.0: dependencies: react-select "5.7.4" -chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: +chalk@3.0.0, chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -4864,14 +6345,6 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" @@ -4882,6 +6355,11 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + check-more-types@^2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" @@ -4954,6 +6432,11 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + cli-table3@~0.6.1: version "0.6.3" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" @@ -4971,6 +6454,18 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clipanion@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/clipanion/-/clipanion-3.2.1.tgz#2887db4cb232e80ba57cf19347a4e3a1c4a74133" + integrity sha512-dYFdjLb7y1ajfxQopN05mylEpK9ZX0sO1/RfMXdfmwjlIsPkbh4p7A682x++zFPLDCo1x3p82dtljHf5cW2LKA== + dependencies: + typanion "^3.8.0" + cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -4985,6 +6480,11 @@ clone-stats@^1.0.0: resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" integrity sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag== +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + clone@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" @@ -5171,6 +6671,14 @@ cosmiconfig@^8.1.3: parse-json "^5.0.0" path-type "^4.0.0" +cpu-features@~0.0.9: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.10.tgz#9aae536db2710c7254d7ed67cb3cbc7d29ad79c5" + integrity sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA== + dependencies: + buildcheck "~0.0.6" + nan "^2.19.0" + create-jest@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" @@ -5351,6 +6859,11 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +data-uri-to-buffer@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" + integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== + data-urls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" @@ -5360,6 +6873,14 @@ data-urls@^3.0.2: whatwg-mimetype "^3.0.0" whatwg-url "^11.0.0" +datadog-metrics@0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/datadog-metrics/-/datadog-metrics-0.9.3.tgz#e62d92b9619129805802d82111c8bcc4439fc859" + integrity sha512-BVsBX2t+4yA3tHs7DnB5H01cHVNiGJ/bHA8y6JppJDyXG7s2DLm6JaozPGpgsgVGd42Is1CHRG/yMDQpt877Xg== + dependencies: + debug "3.1.0" + dogapi "2.8.4" + date-fns@^2.29.3, date-fns@^2.30.0: version "2.30.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" @@ -5377,10 +6898,17 @@ de-indent@^1.0.2: resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.1, debug@^4.3.4: + version "4.3.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" + integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== dependencies: ms "2.1.2" @@ -5398,6 +6926,13 @@ debug@^3.1.0, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.1.0, debug@^4.3.1, debug@^4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + decimal.js@^10.4.2: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" @@ -5432,16 +6967,33 @@ deep-equal@^2.0.5: which-collection "^1.0.1" which-typed-array "^1.1.9" +deep-extend@0.6.0, deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +deep-object-diff@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.9.tgz#6df7ef035ad6a0caa44479c536ed7b02570f4595" + integrity sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA== + deepmerge@^4.2.2: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + 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" @@ -5468,6 +7020,15 @@ define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +degenerator@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" + integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== + dependencies: + ast-types "^0.13.4" + escodegen "^2.1.0" + esprima "^4.0.1" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -5533,6 +7094,17 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dogapi@2.8.4: + version "2.8.4" + resolved "https://registry.yarnpkg.com/dogapi/-/dogapi-2.8.4.tgz#ada64f20c6acdea206b9fd9e70df0c96241b6621" + integrity sha512-065fsvu5dB0o4+ENtLjZILvXMClDNH/yA9H6L8nsdcNiz9l0Hzpn7aQaCOPYXxqyzq4CRPOdwkFXUjDOXfRGbg== + dependencies: + extend "^3.0.2" + json-bigint "^1.0.0" + lodash "^4.17.21" + minimist "^1.2.5" + rc "^1.2.8" + dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: version "0.5.16" resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" @@ -5583,11 +7155,36 @@ domutils@^3.0.1: domelementtype "^2.3.0" domhandler "^5.0.3" +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== + dependencies: + is-obj "^2.0.0" + dotenv@^16.4.4: version "16.4.4" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.4.tgz#a26e7bb95ebd36272ebb56edb80b826aecf224c1" integrity sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg== +duplexify@^4.0.0, duplexify@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f" + integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.2" + each-parallel-async@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/each-parallel-async/-/each-parallel-async-1.0.0.tgz#91783e190000c7dd588336b2d468ebaf71980f7b" @@ -5606,6 +7203,18 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + electron-to-chromium@^1.4.431: version "1.4.461" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.461.tgz#6b14af66042732bf883ab63a4d82cac8f35eb252" @@ -5636,7 +7245,7 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -end-of-stream@^1.1.0: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -5874,9 +7483,9 @@ esbuild@^0.19.0: "@esbuild/win32-x64" "0.19.2" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" @@ -5893,7 +7502,7 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escodegen@^2.0.0: +escodegen@^2.0.0, escodegen@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== @@ -6343,11 +7952,23 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter2@6.4.7: version "6.4.7" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== +eventid@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/eventid/-/eventid-2.0.1.tgz#574e860149457a79a2efe788c459f0c3062d02ec" + integrity sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw== + dependencies: + uuid "^8.0.0" + execa@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" @@ -6408,11 +8029,20 @@ extend-shallow@^2.0.1: dependencies: is-extendable "^0.1.0" -extend@~3.0.2: +extend@^3.0.2, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + extract-zip@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" @@ -6470,6 +8100,25 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-text-encoding@^1.0.0: + version "1.0.6" + resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz#0aa25f7f638222e3396d72bf936afcf1d42d6867" + integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== + +fast-xml-parser@4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" + integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== + dependencies: + strnum "^1.0.5" + +fast-xml-parser@^4.2.5: + version "4.4.0" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz#341cc98de71e9ba9e651a67f41f1752d1441a501" + integrity sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg== + dependencies: + strnum "^1.0.5" + fastq@^1.13.0, fastq@^1.6.0: version "1.15.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" @@ -6491,7 +8140,7 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -figures@^3.2.0: +figures@^3.0.0, figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== @@ -6613,7 +8262,7 @@ focus-lock@^0.11.6: dependencies: tslib "^2.0.3" -follow-redirects@^1.15.4: +follow-redirects@^1.15.4, follow-redirects@^1.15.6: version "1.15.6" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== @@ -6643,7 +8292,7 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== -form-data@^4.0.0: +form-data@4.0.0, form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== @@ -6652,6 +8301,15 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -6686,6 +8344,15 @@ fs-extra@^11.1.0, fs-extra@^11.1.1: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^8.0.1, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -6795,6 +8462,48 @@ fuse.js@^6.6.2: resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-6.6.2.tgz#fe463fed4b98c0226ac3da2856a415576dc9a111" integrity sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA== +fuzzy@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/fuzzy/-/fuzzy-0.1.3.tgz#4c76ec2ff0ac1a36a9dccf9a00df8623078d4ed8" + integrity sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w== + +gaxios@^5.0.0, gaxios@^5.0.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-5.1.3.tgz#f7fa92da0fe197c846441e5ead2573d4979e9013" + integrity sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA== + dependencies: + extend "^3.0.2" + https-proxy-agent "^5.0.0" + is-stream "^2.0.0" + node-fetch "^2.6.9" + +gaxios@^6.0.0, gaxios@^6.1.1: + version "6.6.0" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-6.6.0.tgz#af8242fff0bbb82a682840d5feaa91b6a1c58be4" + integrity sha512-bpOZVQV5gthH/jVCSuYuokRo2bTKOcuBiVWpjmTn6C5Agl5zclGfTljuGsQZxwwDBkli+YhZhP4TdlqTnhOezQ== + dependencies: + extend "^3.0.2" + https-proxy-agent "^7.0.1" + is-stream "^2.0.0" + node-fetch "^2.6.9" + uuid "^9.0.1" + +gcp-metadata@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-5.3.0.tgz#6f45eb473d0cb47d15001476b48b663744d25408" + integrity sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w== + dependencies: + gaxios "^5.0.0" + json-bigint "^1.0.0" + +gcp-metadata@^6.0.0, gcp-metadata@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-6.1.0.tgz#9b0dd2b2445258e7597f2024332d20611cbd6b8c" + integrity sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg== + dependencies: + gaxios "^6.0.0" + json-bigint "^1.0.0" + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -6877,6 +8586,16 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +get-uri@^6.0.1: + version "6.0.3" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.3.tgz#0d26697bc13cf91092e519aa63aa60ee5b6f385a" + integrity sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw== + dependencies: + basic-ftp "^5.0.2" + data-uri-to-buffer "^6.0.2" + debug "^4.3.4" + fs-extra "^11.2.0" + getos@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" @@ -6932,6 +8651,18 @@ glob-stream@^8.0.0: normalize-path "^3.0.0" streamx "^2.12.5" +glob@7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^10.3.10: version "10.3.10" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" @@ -7004,6 +8735,58 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +google-auth-library@^8.9.0: + version "8.9.0" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-8.9.0.tgz#15a271eb2ec35d43b81deb72211bd61b1ef14dd0" + integrity sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg== + dependencies: + arrify "^2.0.0" + base64-js "^1.3.0" + ecdsa-sig-formatter "^1.0.11" + fast-text-encoding "^1.0.0" + gaxios "^5.0.0" + gcp-metadata "^5.3.0" + gtoken "^6.1.0" + jws "^4.0.0" + lru-cache "^6.0.0" + +google-auth-library@^9.0.0, google-auth-library@^9.3.0: + version "9.11.0" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-9.11.0.tgz#bd6da364bcde4e0cc4ed70a0e0df5112b6a671dd" + integrity sha512-epX3ww/mNnhl6tL45EQ/oixsY8JLEgUFoT4A5E/5iAR4esld9Kqv6IJGk7EmGuOgDvaarwF95hU2+v7Irql9lw== + dependencies: + base64-js "^1.3.0" + ecdsa-sig-formatter "^1.0.11" + gaxios "^6.1.1" + gcp-metadata "^6.1.0" + gtoken "^7.0.0" + jws "^4.0.0" + +google-gax@^4.0.3: + version "4.3.6" + resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-4.3.6.tgz#aed8cb1ffc8072615c7ec0cf557ade7343136413" + integrity sha512-z3MR+pE6WqU+tnKtkJl4c723EYY7Il4fcSNgEbehzUJpcNWkca9AyoC2pdBWmEa0cda21VRpUBb4s6VSATiUKg== + dependencies: + "@grpc/grpc-js" "~1.10.3" + "@grpc/proto-loader" "^0.7.13" + "@types/long" "^4.0.0" + abort-controller "^3.0.0" + duplexify "^4.0.0" + google-auth-library "^9.3.0" + node-fetch "^2.6.1" + object-hash "^3.0.0" + proto3-json-serializer "^2.0.0" + protobufjs "7.3.0" + retry-request "^7.0.0" + uuid "^9.0.1" + +google-p12-pem@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-4.0.1.tgz#82841798253c65b7dc2a4e5fe9df141db670172a" + integrity sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ== + dependencies: + node-forge "^1.3.1" + gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -7026,6 +8809,23 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +gtoken@^6.1.0: + version "6.1.2" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-6.1.2.tgz#aeb7bdb019ff4c3ba3ac100bbe7b6e74dce0e8bc" + integrity sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ== + dependencies: + gaxios "^5.0.1" + google-p12-pem "^4.0.0" + jws "^4.0.0" + +gtoken@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-7.1.0.tgz#d61b4ebd10132222817f7222b1e6064bd463fc26" + integrity sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw== + dependencies: + gaxios "^6.0.0" + jws "^4.0.0" + gulp-sort@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/gulp-sort/-/gulp-sort-2.0.0.tgz#c6762a2f1f0de0a3fc595a21599d3fac8dba1aca" @@ -7118,7 +8918,7 @@ heimdalljs@^0.2.6: dependencies: rsvp "~3.2.1" -hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^3.3.1, 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" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -7132,6 +8932,11 @@ html-encoding-sniffer@^3.0.0: dependencies: whatwg-encoding "^2.0.0" +html-entities@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" + integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== + html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -7168,6 +8973,14 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" +http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http-signature@~1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" @@ -7177,7 +8990,7 @@ http-signature@~1.3.6: jsprim "^2.0.2" sshpk "^1.14.1" -https-proxy-agent@^5.0.1: +https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -7185,6 +8998,14 @@ https-proxy-agent@^5.0.1: agent-base "6" debug "4" +https-proxy-agent@^7.0.1, https-proxy-agent@^7.0.2, https-proxy-agent@^7.0.3: + version "7.0.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" + integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== + dependencies: + agent-base "^7.0.2" + debug "4" + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -7239,6 +9060,13 @@ iconv-lite@0.6.3, iconv-lite@^0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + identity-obj-proxy@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" @@ -7261,6 +9089,11 @@ ignore@^5.2.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + immer@^10.0.2: version "10.0.2" resolved "https://registry.yarnpkg.com/immer/-/immer-10.0.2.tgz#11636c5b77acf529e059582d76faf338beb56141" @@ -7315,6 +9148,43 @@ ini@2.0.0: resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inquirer-checkbox-plus-prompt@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/inquirer-checkbox-plus-prompt/-/inquirer-checkbox-plus-prompt-1.4.2.tgz#5a5bb42a3f4bca2f6f4e582d163733eb59f4b195" + integrity sha512-W8/NL9x5A81Oq9ZfbYW5c1LuwtAhc/oB/u9YZZejna0pqrajj27XhnUHygJV0Vn5TvcDy1VJcD2Ld9kTk40dvg== + dependencies: + chalk "4.1.2" + cli-cursor "^3.1.0" + figures "^3.0.0" + lodash "^4.17.5" + rxjs "^6.6.7" + +inquirer@^8.2.5: + version "8.2.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" + integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^6.0.1" + internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" @@ -7331,6 +9201,14 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" @@ -7457,6 +9335,11 @@ is-installed-globally@~0.4.0: global-dirs "^3.0.0" is-path-inside "^3.0.2" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-map@^2.0.1, is-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" @@ -7484,6 +9367,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-obj@^2.0.0: + version "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.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" @@ -8147,6 +10035,14 @@ js-sdsl@^4.1.4: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -8162,6 +10058,11 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -8209,6 +10110,13 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" @@ -8219,6 +10127,11 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-schema@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" @@ -8287,6 +10200,33 @@ jsprim@^2.0.2: object.assign "^4.1.4" object.values "^1.1.6" +jszip@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + +jwa@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" + integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" + integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== + dependencies: + jwa "^2.0.0" + safe-buffer "^5.0.1" + kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -8332,6 +10272,13 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + lilconfig@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.0.tgz#aabf03fd46934d0566d75b4b64ce41a2cdea1167" @@ -8392,6 +10339,11 @@ lodash-es@^4.17.21: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -8432,12 +10384,12 @@ lodash.once@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== -lodash@4.17.21, lodash@^4, lodash@^4.17.15, lodash@^4.17.21: +lodash@4.17.21, lodash@^4, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.5: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^4.0.0: +log-symbols@^4.0.0, log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -8468,6 +10420,11 @@ loglevel@^1.4.1: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4" integrity sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg== +long@^5.0.0: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -8475,6 +10432,13 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -8497,6 +10461,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.14.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + "lru-cache@^9.1.1 || ^10.0.0": version "10.0.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.3.tgz#b40014d7d2d16d94130b87297a04a1f24874ae7c" @@ -8618,7 +10587,7 @@ minimatch@^9.0.1: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -8665,6 +10634,16 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nan@^2.18.0, nan@^2.19.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.20.0.tgz#08c5ea813dd54ed16e5bd6505bf42af4f7838ca3" + integrity sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw== + nanoid@^3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" @@ -8680,6 +10659,11 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +netmask@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" + integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== + nmtree@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/nmtree/-/nmtree-1.0.6.tgz#953e057ad545e9e627f1275bd25fea4e92c1cf63" @@ -8687,6 +10671,14 @@ nmtree@^1.0.6: dependencies: commander "^2.11.0" +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + node-fetch@2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" @@ -8694,6 +10686,18 @@ node-fetch@2.6.7: dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.1, node-fetch@^2.6.9: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -8745,6 +10749,11 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + object-inspect@^1.12.3, object-inspect@^1.9.0: version "1.12.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" @@ -8823,6 +10832,13 @@ object.values@^1.1.6, object.values@^1.1.7: define-properties "^1.2.0" es-abstract "^1.22.1" +on-finished@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -8849,6 +10865,26 @@ optionator@^0.9.1, optionator@^0.9.3: prelude-ls "^1.2.1" type-check "^0.4.0" +ora@5.4.1, ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + ospath@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" @@ -8908,6 +10944,33 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +pac-proxy-agent@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz#6b9ddc002ec3ff0ba5fdf4a8a21d363bcc612d75" + integrity sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A== + dependencies: + "@tootallnate/quickjs-emscripten" "^0.23.0" + agent-base "^7.0.2" + debug "^4.3.4" + get-uri "^6.0.1" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.2" + pac-resolver "^7.0.0" + socks-proxy-agent "^8.0.2" + +pac-resolver@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6" + integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg== + dependencies: + degenerator "^5.0.0" + netmask "^2.0.2" + +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -9106,6 +11169,24 @@ prettier-eslint-cli@^8.0.1: rxjs "^7.8.1" yargs "^17.7.2" +prettier-eslint@^16.1.2: + version "16.1.2" + resolved "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-16.1.2.tgz#86364fea13dd063f3df715b922678dd8a0fd4be1" + integrity sha512-mGFGZQbAh11FSnwW3H1zngzQYR2QMmHO8vdfgnAuzOFhnDeUZHYtwpqQvOMOMT0k818Dr1X+J4a/sVE0r34RKQ== + dependencies: + "@typescript-eslint/parser" "^6.7.5" + common-tags "^1.4.0" + dlv "^1.1.0" + eslint "^8.7.0" + indent-string "^4.0.0" + lodash.merge "^4.6.0" + loglevel-colored-level-prefix "^1.0.0" + prettier "^3.0.1" + pretty-format "^29.7.0" + require-relative "^0.8.7" + typescript "^5.2.2" + vue-eslint-parser "^9.1.0" + prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" @@ -9188,6 +11269,63 @@ prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +proto3-json-serializer@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz#5b705203b4d58f3880596c95fad64902617529dd" + integrity sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ== + dependencies: + protobufjs "^7.2.5" + +protobufjs@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.3.0.tgz#a32ec0422c039798c41a0700306a6e305b9cb32c" + integrity sha512-YWD03n3shzV9ImZRX3ccbjqLxj7NokGN0V/ESiBV5xWqrommYHYiihuIyavq03pWSGqlyvYUFmfoMKd+1rPA/g== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + +protobufjs@^7.2.5: + version "7.3.2" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.3.2.tgz#60f3b7624968868f6f739430cfbc8c9370e26df4" + integrity sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + +proxy-agent@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.4.0.tgz#b4e2dd51dee2b377748aef8d45604c2d7608652d" + integrity sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ== + dependencies: + agent-base "^7.0.2" + debug "^4.3.4" + http-proxy-agent "^7.0.1" + https-proxy-agent "^7.0.3" + lru-cache "^7.14.1" + pac-proxy-agent "^7.0.1" + proxy-from-env "^1.1.0" + socks-proxy-agent "^8.0.2" + proxy-from-env@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" @@ -9216,7 +11354,21 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0, punycode@^2.1.1: +pumpify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-2.0.1.tgz#abfc7b5a621307c728b551decbbefb51f0e4aa1e" + integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw== + dependencies: + duplexify "^4.1.1" + inherits "^2.0.3" + pump "^3.0.0" + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +punycode@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== @@ -9262,14 +11414,24 @@ quick-temp@^0.1.8: rimraf "^2.5.4" underscore.string "~3.3.4" -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== +rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-bootstrap@^2.10.2: + version "2.10.2" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.10.2.tgz#3b609eb0170e31b3d9ace297d3a016c202a42642" + integrity sha512-UvB7mRqQjivdZNxJNEA2yOQRB7L9N43nBnKc33K47+cH90/ujmnMwatTCwQLu83gLhrzAl8fsa6Lqig/KLghaA== dependencies: "@babel/runtime" "^7.22.5" "@restart/hooks" "^0.4.9" - "@restart/ui" "^1.6.6" + "@restart/ui" "^1.6.8" "@types/react-transition-group" "^4.4.6" classnames "^2.3.2" dom-helpers "^5.2.1" @@ -9340,6 +11502,13 @@ react-error-boundary@^3.1.0: dependencies: "@babel/runtime" "^7.12.5" +react-error-boundary@^4.0.13: + version "4.0.13" + resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-4.0.13.tgz#80386b7b27b1131c5fbb7368b8c0d983354c7947" + integrity sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ== + dependencies: + "@babel/runtime" "^7.12.5" + react-fast-compare@3.2.1, react-fast-compare@^3.0.1: version "3.2.1" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.1.tgz#53933d9e14f364281d6cba24bfed7a4afb808b5f" @@ -9365,10 +11534,10 @@ react-i18next@^13.2.0: "@babel/runtime" "^7.22.5" html-parse-stringify "^3.0.1" -react-icons@^4.9.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.10.1.tgz#3f3b5eec1f63c1796f6a26174a1091ca6437a500" - integrity sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw== +react-icons@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.2.1.tgz#28c2040917b2a2eda639b0f797bff1888e018e4a" + integrity sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw== react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0: version "16.13.1" @@ -9410,16 +11579,12 @@ react-popper@^2.3.0: react-fast-compare "^3.0.1" warning "^4.0.2" -react-redux@^8.1.2: - version "8.1.2" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.1.2.tgz#9076bbc6b60f746659ad6d51cb05de9c5e1e9188" - integrity sha512-xJKYI189VwfsFc4CJvHqHlDrzyFTY/3vZACbE+rr/zQ34Xx1wQfB4OTOSeOSNrF6BDVe8OOdxIrAnMGXA3ggfw== +react-redux@^9.1.2: + version "9.1.2" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.1.2.tgz#deba38c64c3403e9abd0c3fbeab69ffd9d8a7e4b" + integrity sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w== dependencies: - "@babel/runtime" "^7.12.1" - "@types/hoist-non-react-statics" "^3.3.1" "@types/use-sync-external-store" "^0.0.3" - hoist-non-react-statics "^3.3.2" - react-is "^18.0.0" use-sync-external-store "^1.0.0" react-refresh@^0.14.0: @@ -9515,7 +11680,7 @@ react@^18: dependencies: loose-envify "^1.1.0" -readable-stream@^3.4.0: +readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -9682,6 +11847,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + require-relative@^0.8.7: version "0.8.7" resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" @@ -9756,6 +11926,20 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +retry-request@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-7.0.2.tgz#60bf48cfb424ec01b03fca6665dee91d06dd95f3" + integrity sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w== + dependencies: + "@types/request" "^2.48.8" + extend "^3.0.2" + teeny-request "^9.0.0" + +retry@0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -9804,6 +11988,11 @@ rsvp@~3.2.1: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.2.1.tgz#07cb4a5df25add9e826ebc67dcc9fd89db27d84a" integrity sha512-Rf4YVNYpKjZ6ASAmibcwTNciQ5Co5Ztq6iZPEykHpkoflnD/K5ryE/rHehFsTm4NJj8nKDhbi3eKBWGogmNnkg== +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -9811,7 +12000,14 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.5.1, rxjs@^7.8.1: +rxjs@^6.6.7: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@^7.5.1, rxjs@^7.5.5, rxjs@^7.8.1: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== @@ -9852,20 +12048,25 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass@^1.66.1: - version "1.66.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.66.1.tgz#04b51c4671e4650aa393740e66a4e58b44d055b1" - integrity sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA== +sass@^1.77.5: + version "1.77.5" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.5.tgz#5f9009820297521356e962c0bed13ee36710edfe" + integrity sha512-oDfX1mukIlxacPdQqNb6mV2tVCrnE+P3nVYioy72V5tlk56CPNcO4TCuFcaCRKKfJ1M3lH95CleRS+dVKL2qMg== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" +sax@>=0.6.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" + integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== + saxes@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" @@ -9890,13 +12091,18 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.3.6, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: +semver@^7.3.5, semver@^7.3.6, semver@^7.3.7, 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" +semver@^7.5.3: + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== + 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" @@ -9916,6 +12122,11 @@ set-function-name@^2.0.0, set-function-name@^2.0.1: functions-have-names "^1.2.3" has-property-descriptors "^1.0.0" +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + shallowequal@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" @@ -9964,6 +12175,15 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +simple-git@3.16.0: + version "3.16.0" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.16.0.tgz#421773e24680f5716999cc4a1d60127b4b6a9dec" + integrity sha512-zuWYsOLEhbJRWVxpjdiXl6eyAyGo/KzVW+KFhhw9MqEEJttcq+32jTWSGyxTdf9e/YCohxRE+9xpWFj9FdiJNw== + dependencies: + "@kwsites/file-exists" "^1.1.1" + "@kwsites/promise-deferred" "^1.1.1" + debug "^4.3.4" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -9997,6 +12217,36 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +socks-proxy-agent@^8.0.2: + version "8.0.3" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz#6b2da3d77364fde6292e810b496cb70440b9b89d" + integrity sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A== + dependencies: + agent-base "^7.1.1" + debug "^4.3.4" + socks "^2.7.1" + +socks@^2.7.1: + version "2.8.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" + integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + sort-keys@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-5.0.0.tgz#5d775f8ae93ecc29bc7312bbf3acac4e36e3c446" @@ -10037,11 +12287,51 @@ sprintf-js@^1.1.1: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== +ssh2-streams@0.4.10: + version "0.4.10" + resolved "https://registry.yarnpkg.com/ssh2-streams/-/ssh2-streams-0.4.10.tgz#48ef7e8a0e39d8f2921c30521d56dacb31d23a34" + integrity sha512-8pnlMjvnIZJvmTzUIIA5nT4jr2ZWNNVHwyXfMGdRJbug9TpI3kd99ffglgfSWqujVv/0gxwMsDn9j9RVst8yhQ== + dependencies: + asn1 "~0.2.0" + bcrypt-pbkdf "^1.0.2" + streamsearch "~0.1.2" + +ssh2@^1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.15.0.tgz#2f998455036a7f89e0df5847efb5421748d9871b" + integrity sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw== + dependencies: + asn1 "^0.2.6" + bcrypt-pbkdf "^1.0.2" + optionalDependencies: + cpu-features "~0.0.9" + nan "^2.18.0" + +sshpk@1.16.1: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + sshpk@^1.14.1: version "1.17.0" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" @@ -10078,6 +12368,23 @@ stream-composer@^1.0.2: dependencies: streamx "^2.13.2" +stream-events@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" + integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== + dependencies: + stubs "^3.0.0" + +stream-shift@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" + integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== + +streamsearch@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + integrity sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA== + streamx@^2.12.0, streamx@^2.13.2, streamx@^2.14.0: version "2.15.2" resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.2.tgz#680eacebdc9c43ede7362c2e6695b34dd413c741" @@ -10107,7 +12414,16 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -10219,7 +12535,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -10233,6 +12549,13 @@ strip-ansi@^3.0.0: dependencies: ansi-regex "^2.0.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -10267,6 +12590,11 @@ strip-json-comments@^3.1.0, strip-json-comments@^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== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + strip-outer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" @@ -10274,6 +12602,16 @@ strip-outer@^1.0.1: dependencies: escape-string-regexp "^1.0.2" +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + +stubs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" + integrity sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw== + styled-components@^6.0.4: version "6.0.7" resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-6.0.7.tgz#1cf4a5e6b6181b29f941934df54af19b7ef05ab0" @@ -10321,7 +12659,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -10335,6 +12673,14 @@ supports-color@^8.0.0, supports-color@^8.1.1: dependencies: has-flag "^4.0.0" +supports-hyperlinks@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -10375,6 +12721,17 @@ synp@^1.9.10: semver "^7.3.5" sort-object-keys "^1.1.3" +teeny-request@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-9.0.0.tgz#18140de2eb6595771b1b02203312dfad79a4716d" + integrity sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g== + dependencies: + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + node-fetch "^2.6.9" + stream-events "^1.0.5" + uuid "^9.0.0" + teex@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/teex/-/teex-1.0.1.tgz#b8fa7245ef8e8effa8078281946c85ab780a0b12" @@ -10382,6 +12739,14 @@ teex@^1.0.1: dependencies: streamx "^2.12.5" +terminal-link@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -10409,16 +12774,28 @@ through2@^2.0.1: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.8: +through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== +tiny-async-pool@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-async-pool/-/tiny-async-pool-2.1.0.tgz#3ec126568c18a7916912fb9fbecf812337ec6b84" + integrity sha512-ltAHPh/9k0STRQqaoUX52NH4ZQYAJz24ZAEwf1Zm+HYg3l9OXTWeqWKyYsHu40wF/F0rxd2N2bk5sLvX2qlSvg== + tiny-invariant@^1.0.6: version "1.3.1" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + tmp@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" @@ -10504,16 +12881,21 @@ tslib@2.4.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -tslib@^1.8.1: +tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.4.0, tslib@^2.5.0: version "2.6.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== +tslib@^2.0.1, tslib@^2.1.0, tslib@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -10533,6 +12915,11 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== +typanion@^3.14.0, typanion@^3.8.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/typanion/-/typanion-3.14.0.tgz#a766a91810ce8258033975733e836c43a2929b94" + integrity sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -10700,9 +13087,9 @@ universalify@^0.2.0: integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== untildify@^4.0.0: version "4.0.0" @@ -10725,7 +13112,7 @@ update-browserslist-db@^1.0.13: escalade "^3.1.1" picocolors "^1.0.0" -uri-js@^4.2.2: +uri-js@^4.2.2, uri-js@^4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== @@ -10775,11 +13162,16 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -uuid@^8.3.2: +uuid@^8.0.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uuid@^9.0.0, uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + v8-to-istanbul@^9.0.1: version "9.1.0" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" @@ -10873,19 +13265,19 @@ vite-plugin-eslint@^1.8.1: "@types/eslint" "^8.4.5" rollup "^2.77.2" -vite-plugin-svgr@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/vite-plugin-svgr/-/vite-plugin-svgr-3.2.0.tgz#920375aaf6635091c9ac8e467825f92d32544476" - integrity sha512-Uvq6niTvhqJU6ga78qLKBFJSDvxWhOnyfQSoKpDPMAGxJPo5S3+9hyjExE5YDj6Lpa4uaLkGc1cBgxXov+LjSw== +vite-plugin-svgr@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz#9f3bf5206b0ec510287e56d16f1915e729bb4e6b" + integrity sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA== dependencies: - "@rollup/pluginutils" "^5.0.2" - "@svgr/core" "^7.0.0" - "@svgr/plugin-jsx" "^7.0.0" + "@rollup/pluginutils" "^5.0.5" + "@svgr/core" "^8.1.0" + "@svgr/plugin-jsx" "^8.1.0" -vite@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.2.tgz#d6ea8610e099851dad8c7371599969e0f8b97e82" - integrity sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w== +vite@^4.5.3: + version "4.5.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.3.tgz#d88a4529ea58bae97294c7e2e6f0eab39a50fb1a" + integrity sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg== dependencies: esbuild "^0.18.10" postcss "^8.4.27" @@ -10961,6 +13353,13 @@ warning@^4.0.0, warning@^4.0.2, warning@^4.0.3: dependencies: loose-envify "^1.0.0" +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + web-vitals@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-3.5.2.tgz#5bb58461bbc173c3f00c2ddff8bfe6e680999ca9" @@ -11080,7 +13479,7 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -11089,7 +13488,7 @@ which@^2.0.1: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^6.2.0: +wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== @@ -11098,6 +13497,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -11120,6 +13528,11 @@ write-file-atomic@^4.0.2: imurmurhash "^0.1.4" signal-exit "^3.0.7" +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + ws@^8.11.0: version "8.13.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" @@ -11130,6 +13543,19 @@ xml-name-validator@^4.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== +xml2js@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" + integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" @@ -11165,6 +13591,11 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yamux-js@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yamux-js/-/yamux-js-0.1.2.tgz#a157e4922f8f0393725955c352b418f16259fd48" + integrity sha512-bhsPlPZ9xB4Dawyf6nkS58u4F3IvGCaybkEKGnneUeepcI7MPoG3Tt6SaKCU5x/kP2/2w20Qm/GqbpwAM16vYw== + yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"