From de8e5347b971b1d19ecf3f9e89a00a1b82b79287 Mon Sep 17 00:00:00 2001 From: Gavin Reynolds Date: Wed, 11 Sep 2024 09:12:54 +0100 Subject: [PATCH 1/3] Clean up OAuth implementation Signed-off-by: Gavin Reynolds --- .github/workflows/cd-workflow.yml | 1 - README.md | 1 - src/App.jsx | 4 ++-- src/components/Auth/AuthComponent.jsx | 6 +++--- .../NavigationBar/NavigationBarComponent.jsx | 4 ++-- src/config/constants.js | 1 - src/redux/connection/sagas.js | 2 -- src/redux/incidents/sagas.js | 8 ++++++-- src/setupTests.js | 1 - src/util/auth.js | 19 ++++--------------- src/util/auth.test.js | 15 ++++----------- 11 files changed, 21 insertions(+), 41 deletions(-) diff --git a/.github/workflows/cd-workflow.yml b/.github/workflows/cd-workflow.yml index 72102772..a727218f 100644 --- a/.github/workflows/cd-workflow.yml +++ b/.github/workflows/cd-workflow.yml @@ -29,7 +29,6 @@ jobs: VITE_PD_ENV: ${{ secrets.PD_ENV }} VITE_PD_SUBDOMAIN_ALLOW_LIST: '*' VITE_PD_OAUTH_CLIENT_ID: ${{ secrets.PD_OAUTH_CLIENT_ID }} - VITE_PD_OAUTH_CLIENT_SECRET: ${{ secrets.PD_OAUTH_CLIENT_SECRET }} VITE_PD_REQUIRED_ABILITY: 'teams' VITE_DD_APPLICATION_ID: ${{ secrets.DD_APPLICATION_ID }} VITE_DD_CLIENT_TOKEN: ${{ secrets.DD_CLIENT_TOKEN }} diff --git a/README.md b/README.md index 12e6421a..59140064 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,6 @@ The following _optional_ parameters can be used in a `.env` file to override Pag | ----------- | ----------- | | `VITE_PD_ENV` | PagerDuty Live Environment Tag; defaults to `localhost-dev` if not set | | `VITE_PD_OAUTH_CLIENT_ID` | PagerDuty OAuth App client ID (created upon registering app) | -| `VITE_PD_OAUTH_CLIENT_SECRET` | PagerDuty OAuth App client secret (created upon registering app) | | `VITE_PD_USER_TOKEN` | PagerDuty [Personal API Token](https://support.pagerduty.com/docs/generating-api-keys#generating-a-personal-rest-api-key); this will override OAuth login workflow if set and should be used for integration tests| | `VITE_PD_SUBDOMAIN_ALLOW_LIST` | Comma separated list of allowed subdomains (e.g. `acme-prod,acme-dev`) | | `VITE_PD_REQUIRED_ABILITY` | PagerDuty account-level [ability](https://developer.pagerduty.com/api-reference/b3A6Mjc0ODEwMg-list-abilities) required to use application | diff --git a/src/App.jsx b/src/App.jsx index 3ee9c013..90b3d99b 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -77,7 +77,7 @@ import { } from 'src/redux/monitoring/actions'; import { - PD_USER_TOKEN, PD_OAUTH_CLIENT_ID, PD_OAUTH_CLIENT_SECRET, + PD_USER_TOKEN, PD_OAUTH_CLIENT_ID, } from 'src/config/constants'; import 'src/App.scss'; @@ -168,7 +168,7 @@ const App = () => { if (!PD_USER_TOKEN && (typeof token !== 'string' || !token.startsWith('pd'))) { return (
- +
); } diff --git a/src/components/Auth/AuthComponent.jsx b/src/components/Auth/AuthComponent.jsx index 3bebfb0f..7de3b728 100644 --- a/src/components/Auth/AuthComponent.jsx +++ b/src/components/Auth/AuthComponent.jsx @@ -37,7 +37,7 @@ const AuthComponent = (props) => { redirectURL, } = props; const { - clientId, clientSecret, + clientId, } = props; if (!redirectURL) { @@ -52,7 +52,7 @@ const AuthComponent = (props) => { const savedButtons = savedButtonsStr ? JSON.parse(savedButtonsStr) : []; const buttonParams = savedButtons ? `?button=${savedButtons.join('&button=')}` : ''; - exchangeCodeForToken(clientId, clientSecret, redirectURL, codeVerifier, code).then((data) => { + exchangeCodeForToken(clientId, redirectURL, codeVerifier, code).then((data) => { const { access_token: newAccessToken, refresh_token: newRefreshToken, @@ -77,7 +77,7 @@ const AuthComponent = (props) => { } else { sessionStorage.removeItem('pd_buttons'); } - getAuthURL(clientId, clientSecret, redirectURL, codeVerifier).then((url) => { + getAuthURL(clientId, redirectURL, codeVerifier).then((url) => { const subdomainParams = subdomain ? `&subdomain=${subdomain}&service_region=${region}` : ''; setAuthURL(`${url}${subdomainParams}`); }); diff --git a/src/components/NavigationBar/NavigationBarComponent.jsx b/src/components/NavigationBar/NavigationBarComponent.jsx index f539f6bc..f6dc7679 100644 --- a/src/components/NavigationBar/NavigationBarComponent.jsx +++ b/src/components/NavigationBar/NavigationBarComponent.jsx @@ -32,7 +32,7 @@ import { } from '@chakra-ui/icons'; import { - PD_OAUTH_CLIENT_ID, PD_OAUTH_CLIENT_SECRET, + PD_OAUTH_CLIENT_ID, } from 'src/config/constants'; import { @@ -203,7 +203,7 @@ const NavigationBarComponent = () => { onClick={() => { const token = sessionStorage.getItem('pd_access_token'); if (token) { - revokeToken(token, PD_OAUTH_CLIENT_ID, PD_OAUTH_CLIENT_SECRET); + revokeToken(token, PD_OAUTH_CLIENT_ID); } userAcceptDisclaimer(); userUnauthorize(); diff --git a/src/config/constants.js b/src/config/constants.js index 1764e19a..f63c12b6 100644 --- a/src/config/constants.js +++ b/src/config/constants.js @@ -7,7 +7,6 @@ export const PD_ENV = import.meta.env.VITE_PD_ENV || 'localhost-dev'; // Authentication export const PD_OAUTH_CLIENT_ID = import.meta.env.VITE_PD_OAUTH_CLIENT_ID || null; -export const PD_OAUTH_CLIENT_SECRET = import.meta.env.VITE_PD_OAUTH_CLIENT_SECRET || null; export const PD_SUBDOMAIN_ALLOW_LIST = import.meta.env.VITE_PD_SUBDOMAIN_ALLOW_LIST || '*'; export const PD_USER_TOKEN = import.meta.env.VITE_PD_USER_TOKEN || null; export const PD_REQUIRED_ABILITY = import.meta.env.VITE_PD_REQUIRED_ABILITY || null; diff --git a/src/redux/connection/sagas.js b/src/redux/connection/sagas.js index cd3a3726..59f9a45c 100644 --- a/src/redux/connection/sagas.js +++ b/src/redux/connection/sagas.js @@ -19,7 +19,6 @@ import { import { PD_OAUTH_CLIENT_ID, - PD_OAUTH_CLIENT_SECRET, PD_REQUIRED_ABILITY, DEBUG_DISABLE_POLLING, } from 'src/config/constants'; @@ -238,7 +237,6 @@ export function* refreshOauthImpl() { const formData = { grant_type: 'refresh_token', client_id: PD_OAUTH_CLIENT_ID, - client_secret: PD_OAUTH_CLIENT_SECRET, refresh_token: refreshToken, }; diff --git a/src/redux/incidents/sagas.js b/src/redux/incidents/sagas.js index 3c492ee4..25e4fd0e 100644 --- a/src/redux/incidents/sagas.js +++ b/src/redux/incidents/sagas.js @@ -131,13 +131,17 @@ export function* getIncidentsImpl() { } // The incident list API may return duplicate incidents under some circumstances, so as a precaution we'll dedupe the list by incident.id // Also log a RUM error if we find any duplicates - const duplicateIncidents = incidents.filter((incident, index, self) => self.findIndex((t) => t.id === incident.id) !== index); + const duplicateIncidents = incidents.filter( + (incident, index, self) => self.findIndex((t) => t.id === incident.id) !== index, + ); const numDuplicateIncidents = duplicateIncidents.length; if (numDuplicateIncidents > 0) { // eslint-disable-next-line no-console console.error('Duplicate incidents found', numDuplicateIncidents); RealUserMonitoring.trackError(new Error('Duplicate incidents found'), numDuplicateIncidents); - incidents = incidents.filter((incident, index, self) => self.findIndex((t) => t.id === incident.id) === index); + incidents = incidents.filter( + (incident, index, self) => self.findIndex((t) => t.id === incident.id) === index, + ); } return incidents; diff --git a/src/setupTests.js b/src/setupTests.js index fd330302..b66a521b 100644 --- a/src/setupTests.js +++ b/src/setupTests.js @@ -14,7 +14,6 @@ const { jest.mock('src/config/constants', () => ({ VITE_PD_ENV: 'localhost-dev', PD_OAUTH_CLIENT_ID: null, - PD_OAUTH_CLIENT_SECRET: null, PD_SUBDOMAIN_ALLOW_LIST: null, PD_USER_TOKEN: null, PD_REQUIRED_ABILITY: null, diff --git a/src/util/auth.js b/src/util/auth.js index 782276ba..28c4f3ce 100644 --- a/src/util/auth.js +++ b/src/util/auth.js @@ -70,14 +70,13 @@ export const createCodeVerifier = () => { return base64Unicode(generatedCode.buffer); }; -export const getAuthURL = async (clientId, clientSecret, redirectURL, codeVerifier) => { +export const getAuthURL = async (clientId, redirectURL, codeVerifier) => { const challengeBuffer = await digestVerifier(codeVerifier); // base64 encode the challenge const challenge = base64Unicode(challengeBuffer); // build authUrl const authUrl = 'https://identity.pagerduty.com/oauth/authorize?' + `client_id=${clientId}&` - + `client_secret=${clientSecret}&` + `redirect_uri=${redirectURL}&` + 'response_type=code&' + `code_challenge=${encodeURI(challenge)}&` @@ -85,13 +84,7 @@ export const getAuthURL = async (clientId, clientSecret, redirectURL, codeVerifi return authUrl; }; -export const exchangeCodeForToken = async ( - clientId, - clientSecret, - redirectURL, - codeVerifier, - code, -) => { +export const exchangeCodeForToken = async (clientId, redirectURL, codeVerifier, code) => { const postData = async (url, data) => { const formData = new URLSearchParams(data); // Convert data to URL-encoded form data const response = await fetch(url, { @@ -111,7 +104,6 @@ export const exchangeCodeForToken = async ( code, redirect_uri: redirectURL, client_id: clientId, - client_secret: clientSecret, code_verifier: codeVerifier, }; @@ -120,11 +112,8 @@ export const exchangeCodeForToken = async ( }; // eslint-disable-next-line no-unused-vars -export const revokeToken = async (token, clientId, clientSecret) => { - const revokeUrl = 'https://identity.pagerduty.com/oauth/revoke?' - + `token=${token}` - + `&client_id=${clientId}` - + `&client_secret=${clientSecret}`; +export const revokeToken = async (token, clientId) => { + const revokeUrl = `https://identity.pagerduty.com/oauth/revoke?token=${token}&client_id=${clientId}`; await fetch(revokeUrl, { method: 'POST', headers: { diff --git a/src/util/auth.test.js b/src/util/auth.test.js index 022cba78..7ebf509a 100644 --- a/src/util/auth.test.js +++ b/src/util/auth.test.js @@ -6,7 +6,7 @@ import { } from '@faker-js/faker'; import { - PD_OAUTH_CLIENT_ID, PD_OAUTH_CLIENT_SECRET, + PD_OAUTH_CLIENT_ID, } from 'src/config/constants'; import { @@ -21,7 +21,6 @@ const unmockedFetch = global.fetch; describe('Authentication Helper Suite', () => { const clientId = PD_OAUTH_CLIENT_ID; - const clientSecret = PD_OAUTH_CLIENT_SECRET; const redirectURL = 'http://127.0.0.1:3000/'; const code = 'SOME_REDIRECT_CODE'; const mockAccessToken = faker.string.alphanumeric(); @@ -71,21 +70,15 @@ describe('Authentication Helper Suite', () => { it('Get valid auth URL', async () => { const codeChallenge = encodeURI(base64Unicode(hash)); - authURL = await getAuthURL(clientId, clientSecret, redirectURL, codeVerifier); + authURL = await getAuthURL(clientId, redirectURL, codeVerifier); expect(authURL).toEqual( // eslint-disable-next-line max-len - `https://identity.pagerduty.com/oauth/authorize?client_id=${clientId}&client_secret=${clientSecret}&redirect_uri=${redirectURL}&response_type=code&code_challenge=${codeChallenge}&code_challenge_method=S256`, + `https://identity.pagerduty.com/oauth/authorize?client_id=${clientId}&redirect_uri=${redirectURL}&response_type=code&code_challenge=${codeChallenge}&code_challenge_method=S256`, ); }); it('Retrieve auth token from code', async () => { - const token = await exchangeCodeForToken( - clientId, - clientSecret, - redirectURL, - codeVerifier, - code, - ); + const token = await exchangeCodeForToken(clientId, redirectURL, codeVerifier, code); expect(token.access_token).toEqual(mockAccessToken); }); }); From 6db17cfd9fe5d6e0c7cd1e7f0a9e13417dcd8849 Mon Sep 17 00:00:00 2001 From: Gavin Reynolds Date: Wed, 11 Sep 2024 10:28:24 +0100 Subject: [PATCH 2/3] Add Deprecation notice Signed-off-by: Gavin Reynolds --- README.md | 4 ++ src/App.jsx | 2 + src/App.scss | 4 ++ .../DeprecationAlert/DeprecationAlert.jsx | 57 +++++++++++++++++++ src/locales/de/translation.json | 2 + src/locales/en/translation.json | 2 + src/locales/es/translation.json | 2 + src/locales/fr/translation.json | 2 + src/locales/id/translation.json | 2 + src/locales/ja/translation.json | 2 + src/locales/pt-br/translation.json | 2 + src/locales/pt/translation.json | 2 + 12 files changed, 83 insertions(+) create mode 100644 src/components/DeprecationAlert/DeprecationAlert.jsx diff --git a/README.md b/README.md index 59140064..dec0f2a4 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,10 @@ This repository hosts the source code for PagerDuty Live, an open-source, single **Live URL: https://pagerduty.github.io/pd-live-react/** +## :heavy_exclamation_mark: Deprecation + +**This project has been replaced by [Operations Console](https://support.pagerduty.com/main/docs/operations-console), which is supported product from PagerDuty. Please plan to migrate to Operations Console instead.** + ## :warning: Disclaimer **This project is not officially supported by PagerDuty and therefore no issues can be reported to or resolved by PagerDuty Support. diff --git a/src/App.jsx b/src/App.jsx index 90b3d99b..86e7848a 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -24,6 +24,7 @@ import { import moment from 'moment/min/moment-with-locales'; +import DeprecationAlertComponent from 'src/components/DeprecationAlert/DeprecationAlert'; import CatastropheModal from 'src/components/CatastropheModal/CatastropheModal'; import AuthComponent from 'src/components/Auth/AuthComponent'; import UnauthorizedModalComponent from 'src/components/UnauthorizedModal/UnauthorizedModalComponent'; @@ -202,6 +203,7 @@ const App = () => { > + diff --git a/src/App.scss b/src/App.scss index e34281ee..e2863880 100644 --- a/src/App.scss +++ b/src/App.scss @@ -124,3 +124,7 @@ body.dark-mode div.react-select__option--is-focused { color: $pd-brand-white !important; } +a.external-link { + text-decoration: underline; +} + diff --git a/src/components/DeprecationAlert/DeprecationAlert.jsx b/src/components/DeprecationAlert/DeprecationAlert.jsx new file mode 100644 index 00000000..308b7178 --- /dev/null +++ b/src/components/DeprecationAlert/DeprecationAlert.jsx @@ -0,0 +1,57 @@ +import React from 'react'; + +import { + useDisclosure, + Alert, + AlertIcon, + AlertTitle, + AlertDescription, + Box, + CloseButton, +} from '@chakra-ui/react'; + +import { + useTranslation, Trans, +} from 'react-i18next'; + +const DeprecationAlertComponent = () => { + const { + isOpen: isVisible, onClose, + } = useDisclosure({ defaultIsOpen: true }); + const { + t, + } = useTranslation(); + + return isVisible ? ( + + + + {t('PD Live is deprecated')} + + + Deprecation Notice + + Operations Console + + + + + + + ) : ( + '' + ); +}; + +export default DeprecationAlertComponent; diff --git a/src/locales/de/translation.json b/src/locales/de/translation.json index c5b78064..f24ffcd0 100644 --- a/src/locales/de/translation.json +++ b/src/locales/de/translation.json @@ -58,6 +58,7 @@ "Debugging Actions": "Debugging-Aktionen", "Decline": "Ablehnen", "Default Since Date Lookback": "Standard seit Datumsrückblick", + "Deprecation": "<1>Operations Console ist die neue und verbesserte Version von PD Live und ein unterstütztes Produkt von PagerDuty. Bitte planen Sie, anstelle von PD Live zu Operations Console zu migrieren.", "Description": "Beschreibung", "Detailed Status": "Detaillierter Status", "Disclaimer & License": "Haftungsausschluss & Lizenz", @@ -151,6 +152,7 @@ "OK": "OK", "on": "ein", "Open Incidents": "Offene Vorfälle", + "PD Live is deprecated": "PD Live ist veraltet", "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", diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index d50cde08..fc97b052 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -58,6 +58,7 @@ "Debugging Actions": "Debugging Actions", "Decline": "Decline", "Default Since Date Lookback": "Default Since Date Lookback", + "Deprecation": "<1>Operations Console is the new and improved version of PD Live, and is supported product from PagerDuty. Please plan to migrate to Operations Console instead.", "Description": "Description", "Detailed Status": "Detailed Status", "Disclaimer & License": "Disclaimer & License", @@ -151,6 +152,7 @@ "OK": "OK", "on": "on", "Open Incidents": "Open Incidents", + "PD Live is deprecated": "PD Live is deprecated", "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", diff --git a/src/locales/es/translation.json b/src/locales/es/translation.json index 4b11e30d..3ce46576 100644 --- a/src/locales/es/translation.json +++ b/src/locales/es/translation.json @@ -58,6 +58,7 @@ "Debugging Actions": "Acciones de depuración", "Decline": "Rechazar", "Default Since Date Lookback": "Vista previa de fecha de inicio predeterminada", + "Deprecation": "<1>Operations Console es la versión nueva y mejorada de PD Live, y es un producto compatible de PagerDuty. Por favor, planee migrar a Operations Console en su lugar.", "Description": "Descripción", "Detailed Status": "Estado detallado", "Disclaimer & License": "Aviso legal y licencia", @@ -153,6 +154,7 @@ "OK": "OK", "on": "en", "Open Incidents": "Incidentes abiertos", + "PD Live is deprecated": "PD Live está obsoleto", "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", diff --git a/src/locales/fr/translation.json b/src/locales/fr/translation.json index f5c81485..78aed28f 100644 --- a/src/locales/fr/translation.json +++ b/src/locales/fr/translation.json @@ -58,6 +58,7 @@ "Debugging Actions": "Actions de débogage", "Decline": "Décliner", "Default Since Date Lookback": "Défaut depuis la date de recherche", + "Deprecation": "<1>Operations Console est la nouvelle version améliorée de PD Live, et est un produit pris en charge par PagerDuty. Veuillez prévoir de migrer vers Operations Console à la place.", "Description": "Description", "Detailed Status": "Statut détaillé", "Disclaimer & License": "Clause de non-responsabilité et licence (en anglais)", @@ -153,6 +154,7 @@ "OK": "OK", "on": "sur", "Open Incidents": "Incidents ouverts", + "PD Live is deprecated": "PD Live est obsolète", "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", diff --git a/src/locales/id/translation.json b/src/locales/id/translation.json index 8bea4c5c..cd634b11 100644 --- a/src/locales/id/translation.json +++ b/src/locales/id/translation.json @@ -58,6 +58,7 @@ "Debugging Actions": "Tindakan Debugging", "Decline": "Tolak", "Default Since Date Lookback": "Periode tampilan default", + "Deprecation": "<1>Operations Console adalah versi baru dan ditingkatkan dari PD Live, dan merupakan produk yang didukung oleh PagerDuty. Silakan rencanakan untuk bermigrasi ke Operations Console sebagai gantinya.", "Description": "Deskripsi", "Detailed Status": "Status Detail", "Disclaimer & License": "Sanggahan & Lisensi", @@ -149,6 +150,7 @@ "OK": "OK", "on": "on", "Open Incidents": "Insiden yang Dibuka", + "PD Live is deprecated": "PD Live sudah tidak digunakan lagi", "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", diff --git a/src/locales/ja/translation.json b/src/locales/ja/translation.json index 5cd7ce1e..33c01c9e 100644 --- a/src/locales/ja/translation.json +++ b/src/locales/ja/translation.json @@ -58,6 +58,7 @@ "Debugging Actions": "デバッグアクション", "Decline": "拒否", "Default Since Date Lookback": "デフォルト表示期間", + "Deprecation": "<1>Operations Console はPD Liveの新しいバージョンであり、PagerDutyからサポートされている製品です。代わりにOperations Consoleに移行する予定です。", "Description": "説明", "Detailed Status": "詳細ステータス", "Disclaimer & License": "免責事項・ライセンス", @@ -149,6 +150,7 @@ "OK": "OK", "on": "。対象:", "Open Incidents": "オープンインシデント", + "PD Live is deprecated": "PD Liveは非推奨です", "Please contact the associated site owner for access": "アクセスするには、サイトオーナーにお問い合わせください", "Polling": "ポーリング中", "Presets file is for a different subdomain": "プリセットファイルは別のサブドメイン用です", diff --git a/src/locales/pt-br/translation.json b/src/locales/pt-br/translation.json index 623086bc..e3a02fd2 100644 --- a/src/locales/pt-br/translation.json +++ b/src/locales/pt-br/translation.json @@ -58,6 +58,7 @@ "Debugging Actions": "Ações de Depuração", "Decline": "Recusar", "Default Since Date Lookback": "Retrospectiva a partir de Data Predefinida", + "Deprecation": "<1>Operations Console é a nova e melhorada versão do PD Live, e é um produto suportado pela PagerDuty. Por favor, planeje migrar para o Operations Console em vez disso.", "Description": "Descrição", "Detailed Status": "Estado Detalhado", "Disclaimer & License": "Aviso Legal & Licença", @@ -153,6 +154,7 @@ "OK": "OK", "on": "em", "Open Incidents": "Incidentes Abertos", + "PD Live is deprecated": "PD Live está obsoleto", "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", diff --git a/src/locales/pt/translation.json b/src/locales/pt/translation.json index 78b71c27..2de68794 100644 --- a/src/locales/pt/translation.json +++ b/src/locales/pt/translation.json @@ -58,6 +58,7 @@ "Debugging Actions": "Ações de Depuração", "Decline": "Recusar", "Default Since Date Lookback": "Retrospetiva a partir de Data Predefinida", + "Deprecation": "<1>Operations Console é a nova e melhorada versão do PD Live, e é um produto suportado pela PagerDuty. Por favor, planeie migrar para o Operations Console em vez disso.", "Description": "Descrição", "Detailed Status": "Estado Detalhado", "Disclaimer & License": "Aviso Legal & Licença", @@ -153,6 +154,7 @@ "OK": "OK", "on": "em", "Open Incidents": "Incidentes Abertos", + "PD Live is deprecated": "PD Live está obsoleto", "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", From 338cfdaf7116b643025b995668a60de1ffc0b842 Mon Sep 17 00:00:00 2001 From: Gavin Reynolds Date: Wed, 11 Sep 2024 11:10:01 +0100 Subject: [PATCH 3/3] Publishing release v0.14.0-beta.0 Signed-off-by: Gavin Reynolds --- package.json | 2 +- src/config/version.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e99e0492..79e02828 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pd-live-react", "homepage": "https://pagerduty.github.io/pd-live-react", - "version": "0.13.2-beta.0", + "version": "0.14.0-beta.0", "private": true, "dependencies": { "@chakra-ui/icons": "^2.1.1", diff --git a/src/config/version.js b/src/config/version.js index a2e84652..b9d225ea 100644 --- a/src/config/version.js +++ b/src/config/version.js @@ -1,2 +1,2 @@ // Generated by genversion. -export const version = '0.13.2-beta.0'; +export const version = '0.14.0-beta.0';