diff --git a/.sentryclirc b/.sentryclirc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/labs.md b/docs/labs.md index 34332f7ec3..69ce263fab 100644 --- a/docs/labs.md +++ b/docs/labs.md @@ -130,6 +130,15 @@ Enables sending hidden read receipts as per [MSC2285](https://github.com/matrix- Adds a "Message layout" section under `Settings -> Appearance`, where the user can select their preferred message layout (e.g. IRC or Modern). Additionally, adds a new "Message bubbles" layout. -## Pseudonymous Analytics opt-in +## Pseudonymous Analytics opt-in (`feature_pseudonymous_analytics_opt_in`) Opts in to collection of pseudonymous analytics data via Posthog. See https://github.com/matrix-org/matrix-react-sdk/pull/6495 + +## Polls (`feature_polls`) [In Development] + +Polls are a way to gauge interest from your community about a certain topic with a simple voting mechanic +within the message timeline. Note that this feature is currently under active development and therefore is +entirely incomplete and may not work at all - it is not recommended for general use at this time. + +Bug reports, feature requests, etc are not currently accepted for this feature flag. A later stage of +development will provide opportunities for feedback. diff --git a/package.json b/package.json index aae063fd33..8697a4051d 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.3.tgz", "browser-request": "^0.3.3", "gfm.css": "^1.1.2", - "highlight.js": "^10.5.0", + "highlight.js": "^11.3.1", "jsrsasign": "^10.2.0", "katex": "^0.12.0", "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop", @@ -90,6 +90,7 @@ "@babel/runtime": "^7.12.5", "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3", "@principalstudio/html-webpack-inject-preload": "^1.2.7", + "@sentry/webpack-plugin": "^1.18.1", "@types/flux": "^3.1.9", "@types/jest": "^27.0.2", "@types/modernizr": "^3.5.3", @@ -99,7 +100,7 @@ "@types/sanitize-html": "^2.3.1", "@typescript-eslint/eslint-plugin": "^4.17.0", "@typescript-eslint/parser": "^4.17.0", - "allchange": "^1.0.3", + "allchange": "^1.0.4", "autoprefixer": "^9.8.6", "babel-jest": "^26.6.3", "babel-loader": "^8.2.2", diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index 521150648a..4f10fde823 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -16,6 +16,7 @@ limitations under the License. import "matrix-react-sdk/src/@types/global"; // load matrix-react-sdk's type extensions first import type { Renderer } from "react-dom"; +import type { logger } from "matrix-js-sdk/src/logger"; type ElectronChannel = "app_onAction" | @@ -36,6 +37,7 @@ type ElectronChannel = declare global { interface Window { mxSendRageshake: (text: string, withLogs?: boolean) => void; + matrixLogger: typeof logger; matrixChat: ReturnType; // electron-only diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json index 64b60b0753..415414b570 100644 --- a/src/i18n/strings/fi.json +++ b/src/i18n/strings/fi.json @@ -2,7 +2,7 @@ "Dismiss": "Hylkää", "Unknown device": "Tuntematon laite", "Welcome to Element": "Tervetuloa Element-sovellukseen", - "You need to be using HTTPS to place a screen-sharing call.": "Sinun täytyy käyttää HTTPS-yhteyttä, jotta voit jakaa ruudun puhelussa.", + "You need to be using HTTPS to place a screen-sharing call.": "Sinun täytyy käyttää HTTPS-yhteyttä, jotta voit jakaa näytön puhelussa.", "powered by Matrix": "moottorina Matrix", "Decentralised, encrypted chat & collaboration powered by [matrix]": "Hajautettua ja salattua viestintää Matrix-teknologialla", "Sign In": "Kirjaudu", @@ -32,5 +32,7 @@ "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Element-asetuksesi sisältävät epäkelpoa JSONia. Korjaa ongelma ja lataa sivu uudelleen.", "Powered by Matrix": "Moottorina Matrix", "Your browser can't run %(brand)s": "%(brand)s ei toimi selaimessasi", - "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s käyttää edistyneitä selaimen ominaisuuksia, joita nykyinen selaimesi ei tue." + "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s käyttää edistyneitä selaimen ominaisuuksia, joita nykyinen selaimesi ei tue.", + "Use %(brand)s on mobile": "Käytä %(brand)sia mobiilisti", + "Switch to space by number": "Vaihda avaruuteen käyttäen numeroa" } diff --git a/src/i18n/strings/id.json b/src/i18n/strings/id.json index cdfd278c17..cf77fefb77 100644 --- a/src/i18n/strings/id.json +++ b/src/i18n/strings/id.json @@ -8,7 +8,7 @@ "Your Element configuration contains invalid JSON. Please correct the problem and reload the page.": "Konfigurasi Element Anda mengandung JSON yang tidak valid. Mohon perbaiki masalahnya dan muat ulang halaman nya.", "Invalid configuration: no default server specified.": "Konfigurasi tidak valid: server default belum ditentukan.", "Missing indexeddb worker script!": "Tidak ada script worker indexeddb!", - "Explore rooms": "Jelajahi ruang", + "Explore rooms": "Jelajahi ruangan", "Create Account": "Buat Akun", "Switch to space by number": "Beralih ke ruang dengan nomor", "Go to your browser to complete Sign In": "Buka browser Anda untuk menyelesaikan Masuk", @@ -22,7 +22,7 @@ "Your browser can't run %(brand)s": "Browser Anda tidak bisa menjalankan %(brand)s", "Unsupported browser": "Browser tidak didukung", "Use %(brand)s on mobile": "Gunakan %(brand)s di ponsel", - "Powered by Matrix": "Didukung oleh Matrix", + "Powered by Matrix": "Diberdayakan oleh Matrix", "%(appName)s (%(browserName)s, %(osName)s)": "%(appName)s (%(browserName)s, %(osName)s)", "%(brand)s Desktop (%(platformName)s)": "%(brand)s Desktop (%(platformName)s)", "Previous/next recently visited room or community": "Ruangan atau komunitas yang baru saja dikunjungi sebelum/berikutnya", diff --git a/src/i18n/strings/kab.json b/src/i18n/strings/kab.json index 9a3ccd2ad8..9433ff73cf 100644 --- a/src/i18n/strings/kab.json +++ b/src/i18n/strings/kab.json @@ -32,5 +32,7 @@ "Open": "Ldi", "Your browser can't run %(brand)s": "Iminig-inek·inem ur isselkan ara %(brand)s", "%(brand)s uses advanced browser features which aren't supported by your current browser.": "%(brand)s isseqdac timahilin n yiminig leqqayen ur yessefrak ara yiminig-ik·im amiran.", - "Powered by Matrix": "Iteddu s lmendad n Matrix" + "Powered by Matrix": "Iteddu s lmendad n Matrix", + "Use %(brand)s on mobile": "Seqdec %(brand)s deg tiliɣri", + "Switch to space by number": "Ddu ɣer space s uṭṭun" } diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index b6fdd56ff7..62ab985cf6 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -9,7 +9,7 @@ "Create Account": "Создать учётную запись", "Explore rooms": "Список комнат", "Unexpected error preparing the app. See console for details.": "Неожиданная ошибка при подготовке приложения. Подробности см. в консоли.", - "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Неверная конфигурация: может указывать только один из следующих параметров: default_server_config, default_server_name или default_hs_url.", + "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Неверная конфигурация: можно указывать только один из следующих параметров: default_server_config, default_server_name или default_hs_url.", "Invalid configuration: no default server specified.": "Неверная конфигурация: сервер по умолчанию не указан.", "The message from the parser is: %(message)s": "Сообщение из парсера: %(message)s", "Invalid JSON": "Нерабочий JSON", diff --git a/src/vector/app.tsx b/src/vector/app.tsx index 35e20a0837..732976388e 100644 --- a/src/vector/app.tsx +++ b/src/vector/app.tsx @@ -31,6 +31,7 @@ import { AutoDiscovery } from "matrix-js-sdk/src/autodiscovery"; import * as Lifecycle from "matrix-react-sdk/src/Lifecycle"; import type MatrixChatType from "matrix-react-sdk/src/components/structures/MatrixChat"; import SdkConfig from "matrix-react-sdk/src/SdkConfig"; +import { logger } from "matrix-js-sdk/src/logger"; import { parseQs, parseQsFromFragment } from './url_utils'; import VectorBasePlatform from "./platform/VectorBasePlatform"; @@ -38,7 +39,9 @@ import { createClient } from "matrix-js-sdk/src/matrix"; let lastLocationHashSet: string = null; -console.log(`Application is running in ${process.env.NODE_ENV} mode`); +logger.log(`Application is running in ${process.env.NODE_ENV} mode`); + +window.matrixLogger = logger; // Parse the given window.location and return parameters that can be used when calling // MatrixChat.showScreen(screen, params) @@ -55,7 +58,7 @@ function getScreenFromLocation(location: Location) { function routeUrl(location: Location) { if (!window.matrixChat) return; - console.log("Routing URL ", location.href); + logger.log("Routing URL ", location.href); const s = getScreenFromLocation(location); (window.matrixChat as MatrixChatType).showScreen(s.screen, s.params); } @@ -71,7 +74,7 @@ function onHashChange(ev: HashChangeEvent) { // This will be called whenever the SDK changes screens, // so a web page can update the URL bar appropriately. function onNewScreen(screen: string, replaceLast = false) { - console.log("newscreen " + screen); + logger.log("newscreen " + screen); const hash = '#/' + screen; lastLocationHashSet = hash; @@ -133,7 +136,7 @@ function onTokenLoginCompleted() { url.searchParams.delete("loginToken"); - console.log(`Redirecting to ${url.href} to drop loginToken from queryparams`); + logger.log(`Redirecting to ${url.href} to drop loginToken from queryparams`); window.history.replaceState(null, "", url.href); } @@ -145,7 +148,7 @@ export async function loadApp(fragParams: {}) { const params = parseQs(window.location); const urlWithoutQuery = window.location.protocol + '//' + window.location.host + window.location.pathname; - console.log("Vector starting at " + urlWithoutQuery); + logger.log("Vector starting at " + urlWithoutQuery); (platform as VectorBasePlatform).startUpdater(); @@ -158,7 +161,7 @@ export async function loadApp(fragParams: {}) { const isReturningFromSso = !!params.loginToken; const autoRedirect = config['sso_immediate_redirect'] === true; if (!hasPossibleToken && !isReturningFromSso && autoRedirect) { - console.log("Bypassing app load to redirect to SSO"); + logger.log("Bypassing app load to redirect to SSO"); const tempCli = createClient({ baseUrl: config['validated_server_config'].hsUrl, idBaseUrl: config['validated_server_config'].isUrl, @@ -188,7 +191,7 @@ export async function loadApp(fragParams: {}) { async function verifyServerConfig() { let validatedConfig; try { - console.log("Verifying homeserver configuration"); + logger.log("Verifying homeserver configuration"); // Note: the query string may include is_url and hs_url - we only respect these in the // context of email validation. Because we don't respect them otherwise, we do not need @@ -219,8 +222,8 @@ async function verifyServerConfig() { } if (hsUrl) { - console.log("Config uses a default_hs_url - constructing a default_server_config using this information"); - console.warn( + logger.log("Config uses a default_hs_url - constructing a default_server_config using this information"); + logger.warn( "DEPRECATED CONFIG OPTION: In the future, default_hs_url will not be accepted. Please use " + "default_server_config instead.", ); @@ -239,13 +242,13 @@ async function verifyServerConfig() { let discoveryResult = null; if (wkConfig) { - console.log("Config uses a default_server_config - validating object"); + logger.log("Config uses a default_server_config - validating object"); discoveryResult = await AutoDiscovery.fromDiscoveryConfig(wkConfig); } if (serverName) { - console.log("Config uses a default_server_name - doing .well-known lookup"); - console.warn( + logger.log("Config uses a default_server_name - doing .well-known lookup"); + logger.warn( "DEPRECATED CONFIG OPTION: In the future, default_server_name will not be accepted. Please " + "use default_server_config instead.", ); @@ -256,10 +259,10 @@ async function verifyServerConfig() { } catch (e) { const { hsUrl, isUrl, userId } = await Lifecycle.getStoredSessionVars(); if (hsUrl && userId) { - console.error(e); - console.warn("A session was found - suppressing config error and using the session's homeserver"); + logger.error(e); + logger.warn("A session was found - suppressing config error and using the session's homeserver"); - console.log("Using pre-existing hsUrl and isUrl: ", { hsUrl, isUrl }); + logger.log("Using pre-existing hsUrl and isUrl: ", { hsUrl, isUrl }); validatedConfig = await AutoDiscoveryUtils.validateServerConfigWithStaticUrls(hsUrl, isUrl, true); } else { // the user is not logged in, so scream @@ -270,10 +273,10 @@ async function verifyServerConfig() { validatedConfig.isDefault = true; // Just in case we ever have to debug this - console.log("Using homeserver config:", validatedConfig); + logger.log("Using homeserver config:", validatedConfig); // Add the newly built config to the actual config for use by the app - console.log("Updating SdkConfig with validated discovery information"); + logger.log("Updating SdkConfig with validated discovery information"); SdkConfig.add({ "validated_server_config": validatedConfig }); return SdkConfig.get(); diff --git a/src/vector/index.ts b/src/vector/index.ts index e23fc4b35a..98e692606f 100644 --- a/src/vector/index.ts +++ b/src/vector/index.ts @@ -38,19 +38,21 @@ require('./localstorage-fix'); import { parseQsFromFragment } from "./url_utils"; import './modernizr'; +import { logger } from "matrix-js-sdk/src/logger"; + async function settled(...promises: Array>) { for (const prom of promises) { try { await prom; } catch (e) { - console.error(e); + logger.error(e); } } } function checkBrowserFeatures() { if (!window.Modernizr) { - console.error("Cannot check features - Modernizr global is missing."); + logger.error("Cannot check features - Modernizr global is missing."); return false; } @@ -77,14 +79,14 @@ function checkBrowserFeatures() { let featureComplete = true; for (let i = 0; i < featureList.length; i++) { if (window.Modernizr[featureList[i]] === undefined) { - console.error( + logger.error( "Looked for feature '%s' but Modernizr has no results for this. " + "Has it been configured correctly?", featureList[i], ); return false; } if (window.Modernizr[featureList[i]] === false) { - console.error("Browser missing feature: '%s'", featureList[i]); + logger.error("Browser missing feature: '%s'", featureList[i]); // toggle flag rather than return early so we log all missing features rather than just the first. featureComplete = false; } @@ -173,13 +175,13 @@ async function start() { // ########################## if (!acceptBrowser) { await new Promise(resolve => { - console.error("Browser is missing required features."); + logger.error("Browser is missing required features."); // take to a different landing page to AWOOOOOGA at the user showIncompatibleBrowser(() => { if (window.localStorage) { window.localStorage.setItem('mx_accepts_unsupported_browser', String(true)); } - console.log("User accepts the compatibility risks."); + logger.log("User accepts the compatibility risks."); resolve(); }); }); @@ -222,7 +224,7 @@ async function start() { // run on the components. await loadApp(fragparts.params); } catch (err) { - console.error(err); + logger.error(err); // Like the compatibility page, AWOOOOOGA at the user // This uses the default brand since the app config is unavailable. await showError(_t("Your Element is misconfigured"), [ @@ -232,7 +234,7 @@ async function start() { } start().catch(err => { - console.error(err); + logger.error(err); // show the static error in an iframe to not lose any context / console data // with some basic styling to make the iframe full page delete document.body.style.height; diff --git a/src/vector/init.tsx b/src/vector/init.tsx index 66389df8ab..bf30b6d8ac 100644 --- a/src/vector/init.tsx +++ b/src/vector/init.tsx @@ -35,17 +35,19 @@ import { setTheme } from "matrix-react-sdk/src/theme"; import { initRageshake, initRageshakeStore } from "./rageshakesetup"; +import { logger } from "matrix-js-sdk/src/logger"; + export const rageshakePromise = initRageshake(); export function preparePlatform() { if (window.electron) { - console.log("Using Electron platform"); + logger.log("Using Electron platform"); PlatformPeg.set(new ElectronPlatform()); } else if (window.matchMedia('(display-mode: standalone)').matches) { - console.log("Using PWA platform"); + logger.log("Using PWA platform"); PlatformPeg.set(new PWAPlatform()); } else { - console.log("Using Web platform"); + logger.log("Using Web platform"); PlatformPeg.set(new WebPlatform()); } } @@ -54,7 +56,7 @@ export function setupLogStorage() { if (SdkConfig.get().bug_report_endpoint_url) { return initRageshakeStore(); } - console.warn("No bug report endpoint set - logs will not be persisted"); + logger.warn("No bug report endpoint set - logs will not be persisted"); return Promise.resolve(); } @@ -82,9 +84,9 @@ export function loadOlm(): Promise { return Olm.init({ locateFile: () => olmWasmPath, }).then(() => { - console.log("Using WebAssembly Olm"); + logger.log("Using WebAssembly Olm"); }).catch((e) => { - console.log("Failed to load Olm: trying legacy version", e); + logger.log("Failed to load Olm: trying legacy version", e); return new Promise((resolve, reject) => { const s = document.createElement('script'); s.src = 'olm_legacy.js'; // XXX: This should be cache-busted too @@ -96,9 +98,9 @@ export function loadOlm(): Promise { // not 'Olm' which is still the failed wasm version. return window.Olm.init(); }).then(() => { - console.log("Using legacy Olm"); + logger.log("Using legacy Olm"); }).catch((e) => { - console.log("Both WebAssembly and asm.js Olm failed!", e); + logger.log("Both WebAssembly and asm.js Olm failed!", e); }); }); } @@ -118,14 +120,14 @@ export async function loadLanguage() { await languageHandler.setLanguage(langs); document.documentElement.setAttribute("lang", languageHandler.getCurrentLanguage()); } catch (e) { - console.error("Unable to set language", e); + logger.error("Unable to set language", e); } } export async function loadSkin() { // Ensure the skin is the very first thing to load for the react-sdk. We don't even want to reference // the SDK until we have to in imports. - console.log("Loading skin..."); + logger.log("Loading skin..."); // load these async so that its code is not executed immediately and we can catch any exceptions const [sdk, skin] = await Promise.all([ import( @@ -140,7 +142,7 @@ export async function loadSkin() { "../component-index"), ]); sdk.loadSkin(skin); - console.log("Skin loaded!"); + logger.log("Skin loaded!"); } export async function loadTheme() { diff --git a/src/vector/jitsi/index.ts b/src/vector/jitsi/index.ts index c6385cc478..763c96ef7c 100644 --- a/src/vector/jitsi/index.ts +++ b/src/vector/jitsi/index.ts @@ -26,6 +26,8 @@ import { } from "matrix-widget-api"; import { ElementWidgetActions } from "matrix-react-sdk/src/stores/widgets/ElementWidgetActions"; +import { logger } from "matrix-js-sdk/src/logger"; + const JITSI_OPENIDTOKEN_JWT_AUTH = 'openidtoken-jwt'; // Dev note: we use raw JS without many dependencies to reduce bundle size. @@ -94,7 +96,7 @@ let meetApi: any; // JitsiMeetExternalAPI ]); widgetApi.start(); } else { - console.warn("No parent URL or no widget ID - assuming no widget API is available"); + logger.warn("No parent URL or no widget ID - assuming no widget API is available"); } // Populate the Jitsi params now @@ -115,7 +117,7 @@ let meetApi: any; // JitsiMeetExternalAPI if (jitsiAuth === JITSI_OPENIDTOKEN_JWT_AUTH) { // Request credentials, give callback to continue when received openIdToken = await widgetApi.requestOpenIDConnectToken(); - console.log("Got OpenID Connect token"); + logger.log("Got OpenID Connect token"); } // TODO: register widgetApi listeners for PTT controls (https://github.com/vector-im/element-web/issues/12795) @@ -146,7 +148,7 @@ let meetApi: any; // JitsiMeetExternalAPI enableJoinButton(); // always enable the button } catch (e) { - console.error("Error setting up Jitsi widget", e); + logger.error("Error setting up Jitsi widget", e); document.getElementById("widgetActionContainer").innerText = "Failed to load Jitsi widget"; } })(); @@ -206,7 +208,7 @@ function joinConference() { // event handler bound in HTML if (jitsiAuth === JITSI_OPENIDTOKEN_JWT_AUTH) { if (!openIdToken?.access_token) { // eslint-disable-line camelcase // We've failing to get a token, don't try to init conference - console.warn('Expected to have an OpenID credential, cannot initialize widget.'); + logger.warn('Expected to have an OpenID credential, cannot initialize widget.'); document.getElementById("widgetActionContainer").innerText = "Failed to load Jitsi widget"; return; } @@ -221,7 +223,7 @@ function joinConference() { // event handler bound in HTML widgetApi.setAlwaysOnScreen(true); } - console.warn( + logger.warn( "[Jitsi Widget] The next few errors about failing to parse URL parameters are fine if " + "they mention 'external_api' or 'jitsi' in the stack. They're just Jitsi Meet trying to parse " + "our fragment values and not recognizing the options.", diff --git a/src/vector/mobile_guide/index.ts b/src/vector/mobile_guide/index.ts index f27d414f0a..1eecf1dc76 100644 --- a/src/vector/mobile_guide/index.ts +++ b/src/vector/mobile_guide/index.ts @@ -1,5 +1,7 @@ import { getVectorConfig } from '../getconfig'; +import { logger } from "matrix-js-sdk/src/logger"; + function onBackToElementClick(): void { // Cookie should expire in 4 hours document.cookie = 'element_mobile_redirect_to_guide=false;path=/;max-age=14400'; @@ -76,7 +78,7 @@ async function initPage(): Promise { } } } catch (e) { - console.error(e); + logger.error(e); return renderConfigError("Unable to fetch homeserver configuration"); } } diff --git a/src/vector/platform/ElectronPlatform.tsx b/src/vector/platform/ElectronPlatform.tsx index 4fcbbce398..b8f229db30 100644 --- a/src/vector/platform/ElectronPlatform.tsx +++ b/src/vector/platform/ElectronPlatform.tsx @@ -55,6 +55,8 @@ import { IMatrixProfile, IEventWithRoomId as IMatrixEvent, IResultRoomEvents } f import VectorBasePlatform from './VectorBasePlatform'; +import { logger } from "matrix-js-sdk/src/logger"; + const electron = window.electron; const isMac = navigator.platform.toUpperCase().includes('MAC'); @@ -124,12 +126,12 @@ class SeshatIndexManager extends BaseEventIndexManager { private onIpcReply = (ev: {}, payload: IPCPayload) => { if (payload.id === undefined) { - console.warn("Ignoring IPC reply with no ID"); + logger.warn("Ignoring IPC reply with no ID"); return; } if (this.pendingIpcCalls[payload.id] === undefined) { - console.warn("Unknown IPC payload ID: " + payload.id); + logger.warn("Unknown IPC payload ID: " + payload.id); return; } @@ -245,7 +247,7 @@ export default class ElectronPlatform extends VectorBasePlatform { // try to flush the rageshake logs to indexeddb before quit. electron.on('before-quit', function() { - console.log('element-desktop closing'); + logger.log('element-desktop closing'); rageshake.flush(); }); @@ -489,10 +491,7 @@ export default class ElectronPlatform extends VectorBasePlatform { } reload() { - // we used to remote to the main process to get it to - // reload the webcontents, but in practice this is unnecessary: - // the normal way works fine. - window.location.reload(false); + window.location.reload(); } private async ipcCall(name: string, ...args: any[]): Promise { @@ -506,12 +505,12 @@ export default class ElectronPlatform extends VectorBasePlatform { private onIpcReply = (ev, payload) => { if (payload.id === undefined) { - console.warn("Ignoring IPC reply with no ID"); + logger.warn("Ignoring IPC reply with no ID"); return; } if (this.pendingIpcCalls[payload.id] === undefined) { - console.warn("Unknown IPC payload ID: " + payload.id); + logger.warn("Unknown IPC payload ID: " + payload.id); return; } @@ -534,8 +533,8 @@ export default class ElectronPlatform extends VectorBasePlatform { setSpellCheckLanguages(preferredLangs: string[]) { this.ipcCall('setSpellCheckLanguages', preferredLangs).catch(error => { - console.log("Failed to send setSpellCheckLanguages IPC to Electron"); - console.error(error); + logger.log("Failed to send setSpellCheckLanguages IPC to Electron"); + logger.error(error); }); } diff --git a/src/vector/platform/PWAPlatform.ts b/src/vector/platform/PWAPlatform.ts index cca3a8e7da..9ba3eaade0 100644 --- a/src/vector/platform/PWAPlatform.ts +++ b/src/vector/platform/PWAPlatform.ts @@ -16,6 +16,8 @@ limitations under the License. import WebPlatform from "./WebPlatform"; +import { logger } from "matrix-js-sdk/src/logger"; + export default class PWAPlatform extends WebPlatform { setNotificationCount(count: number) { if (!navigator.setAppBadge) return super.setNotificationCount(count); @@ -23,7 +25,7 @@ export default class PWAPlatform extends WebPlatform { this.notificationCount = count; navigator.setAppBadge(count).catch(e => { - console.error("Failed to update PWA app badge", e); + logger.error("Failed to update PWA app badge", e); }); } } diff --git a/src/vector/platform/WebPlatform.ts b/src/vector/platform/WebPlatform.ts index 33359f4292..bb2a52f243 100644 --- a/src/vector/platform/WebPlatform.ts +++ b/src/vector/platform/WebPlatform.ts @@ -28,6 +28,8 @@ import { CheckUpdatesPayload } from 'matrix-react-sdk/src/dispatcher/payloads/Ch import UAParser from 'ua-parser-js'; +import { logger } from "matrix-js-sdk/src/logger"; + const POKE_RATE_MS = 10 * 60 * 1000; // 10 min export default class WebPlatform extends VectorBasePlatform { @@ -159,7 +161,7 @@ export default class WebPlatform extends VectorBasePlatform { return { status: UpdateCheckStatus.NotAvailable }; }, (err) => { - console.error("Failed to poll for update", err); + logger.error("Failed to poll for update", err); return { status: UpdateCheckStatus.Error, detail: err.message || err.status ? err.status.toString() : 'Unknown Error', @@ -178,7 +180,7 @@ export default class WebPlatform extends VectorBasePlatform { } installUpdate() { - window.location.reload(true); + window.location.reload(); } getDefaultDeviceDisplayName(): string { @@ -212,8 +214,6 @@ export default class WebPlatform extends VectorBasePlatform { } reload() { - // forceReload=false since we don't really need new HTML/JS files - // we just need to restart the JS runtime. - window.location.reload(false); + window.location.reload(); } } diff --git a/src/vector/rageshakesetup.ts b/src/vector/rageshakesetup.ts index 02161331f7..8f90182de4 100644 --- a/src/vector/rageshakesetup.ts +++ b/src/vector/rageshakesetup.ts @@ -30,23 +30,25 @@ import * as rageshake from "matrix-react-sdk/src/rageshake/rageshake"; import SdkConfig from "matrix-react-sdk/src/SdkConfig"; import sendBugReport from "matrix-react-sdk/src/rageshake/submit-rageshake"; +import { logger } from "matrix-js-sdk/src/logger"; + export function initRageshake() { // we manually check persistence for rageshakes ourselves const prom = rageshake.init(/*setUpPersistence=*/false); prom.then(() => { - console.log("Initialised rageshake."); - console.log("To fix line numbers in Chrome: " + + logger.log("Initialised rageshake."); + logger.log("To fix line numbers in Chrome: " + "Meatball menu → Settings → Ignore list → Add /rageshake\\.js$"); window.addEventListener('beforeunload', (e) => { - console.log('element-web closing'); + logger.log('element-web closing'); // try to flush the logs to indexeddb rageshake.flush(); }); rageshake.cleanup(); }, (err) => { - console.error("Failed to initialise rageshake: " + err); + logger.error("Failed to initialise rageshake: " + err); }); return prom; } @@ -58,22 +60,22 @@ export function initRageshakeStore() { window.mxSendRageshake = function(text: string, withLogs?: boolean) { const url = SdkConfig.get().bug_report_endpoint_url; if (!url) { - console.error("Cannot send a rageshake - no bug_report_endpoint_url configured"); + logger.error("Cannot send a rageshake - no bug_report_endpoint_url configured"); return; } if (withLogs === undefined) withLogs = true; if (!text || !text.trim()) { - console.error("Cannot send a rageshake without a message - please tell us what went wrong"); + logger.error("Cannot send a rageshake without a message - please tell us what went wrong"); return; } sendBugReport(url, { userText: text, sendLogs: withLogs, - progressCallback: console.log.bind(console), + progressCallback: logger.log.bind(console), }).then(() => { - console.log("Bug report sent!"); + logger.log("Bug report sent!"); }, (err) => { - console.error(err); + logger.error(err); }); }; diff --git a/webpack.config.js b/webpack.config.js index 444dfcb2ee..c26dc1032c 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -9,6 +9,7 @@ const TerserPlugin = require('terser-webpack-plugin'); const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const HtmlWebpackInjectPreload = require('@principalstudio/html-webpack-inject-preload'); const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); +const SentryCliPlugin = require("@sentry/webpack-plugin"); dotenv.config(); let ogImageUrl = process.env.RIOT_OG_IMAGE_URL; @@ -528,6 +529,12 @@ module.exports = (env, argv) => { }), useHMR && new ReactRefreshWebpackPlugin(fullPageErrors ? undefined : { overlay: { entry: false } }), + // upload to sentry if sentry env is present + process.env.SENTRY_DSN && + new SentryCliPlugin({ + release: process.env.RELEASE, + include: "./webapp", + }), ].filter(Boolean), output: { diff --git a/yarn.lock b/yarn.lock index 0198715199..f00df1450e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -38,7 +38,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== -"@babel/core@>=7.9.0", "@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.7.5": +"@babel/core@>=7.9.0", "@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.7.5": version "7.15.8" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.8.tgz#195b9f2bffe995d2c6c159e72fe525b4114e8c10" integrity sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og== @@ -291,7 +291,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.15.4", "@babel/parser@^7.15.8": +"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.15.4", "@babel/parser@^7.15.8": version "7.15.8" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016" integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA== @@ -1308,6 +1308,7 @@ "@matrix-org/olm@https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.3.tgz": version "3.2.3" + uid cc332fdd25c08ef0e40f4d33fc3f822a0f98b6f4 resolved "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.3.tgz#cc332fdd25c08ef0e40f4d33fc3f822a0f98b6f4" "@mrmlnc/readdir-enhanced@^2.2.1": @@ -1472,6 +1473,18 @@ "@sentry/utils" "6.13.3" tslib "^1.9.3" +"@sentry/cli@^1.68.0": + version "1.69.1" + resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.69.1.tgz#0a6de12346c0f2347d610835a18ff554f2d65adc" + integrity sha512-HxO7vjqSvWfc9L5A/ib3UB1mXKFNiORY9BXwtYTo38jv4ROrKDFz36IzHsD6nPFuv8+6iDVyNlEujK/n9NvRyw== + dependencies: + https-proxy-agent "^5.0.0" + mkdirp "^0.5.5" + node-fetch "^2.6.0" + npmlog "^4.1.2" + progress "^2.0.3" + proxy-from-env "^1.1.0" + "@sentry/core@6.13.3": version "6.13.3" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.13.3.tgz#5cbbb995128e793ebebcbf1d3b7514e0e5e8b221" @@ -1525,6 +1538,13 @@ "@sentry/types" "6.13.3" tslib "^1.9.3" +"@sentry/webpack-plugin@^1.18.1": + version "1.18.1" + resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-1.18.1.tgz#0fa24297043305057111d85a7154d4b8b24d43a6" + integrity sha512-maEnHC0nxRnVgAz0qvKvhTGy+SxneR8MFjpgNMvh9CyAB6GEM9VQI1hzxTcAd7Qk90qGW8W4eUmB+ZX8nMrM1w== + dependencies: + "@sentry/cli" "^1.68.0" + "@sinonjs/commons@^1.7.0": version "1.8.3" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" @@ -1701,14 +1721,14 @@ integrity sha512-jhMOZSS0UGYTS9pqvt6q3wtT3uvOSve5piTEmTMx3zzTuBLvSIMxSIBIc3d5lajVD5h4xc41AMZD2M5orN3PxA== "@types/node@*": - version "16.10.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.3.tgz#7a8f2838603ea314d1d22bb3171d899e15c57bd5" - integrity sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ== + version "16.11.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.1.tgz#2e50a649a50fc403433a14f829eface1a3443e97" + integrity sha512-PYGcJHL9mwl1Ek3PLiYgyEKtwTMmkMw4vbiyz/ps3pfdRYLVv+SN7qHVAImrjdAXxgluDEw6Ph4lyv+m9UpRmA== "@types/node@^14.14.22": - version "14.17.21" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.21.tgz#6359d8cf73481e312a43886fa50afc70ce5592c6" - integrity sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA== + version "14.17.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.27.tgz#5054610d37bb5f6e21342d0e6d24c494231f3b85" + integrity sha512-94+Ahf9IcaDuJTle/2b+wzvjmutxXAEXU6O81JHblYXUg2BDG+dnBy7VxIPHKAyEEDHzCMQydTJuWvrE+Aanzw== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -2166,10 +2186,10 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" -allchange@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/allchange/-/allchange-1.0.3.tgz#f8814ddfbcfe39a01bf4570778ee7e6d9ff0ebb3" - integrity sha512-UZkfz5SkNEMFQFLr8vZcXHaph2EbJxmkVNF5Nt6D9RIa5pmAar7oAMfNdda714jg7IQijvaFty5PYazXLgd5WA== +allchange@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/allchange/-/allchange-1.0.4.tgz#c540d9344e7e5bf4187be823ad5d858bed365d82" + integrity sha512-9V2PPRj2UtkqFIx1DFPS5ubadTpu59fMrIteA3JUVpv6UrVCFeFRELWrOwUBHlQmsG4ud82ru34k8yJ3VKeqHg== dependencies: "@actions/core" "^1.4.0" "@actions/github" "^5.0.0" @@ -2212,11 +2232,16 @@ ansi-html@0.0.7, ansi-html@^0.0.7: resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= -ansi-regex@^2.0.0, ansi-regex@^2.1.1: +ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" @@ -2275,11 +2300,19 @@ anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.1.1: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +are-we-there-yet@~1.1.2: + version "1.1.7" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -2513,14 +2546,14 @@ babel-plugin-dynamic-import-node@^2.3.3: object.assign "^4.1.0" babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" + istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" babel-plugin-jest-hoist@^26.6.2: @@ -2850,15 +2883,15 @@ browserify-zlib@^0.2.0: pako "~1.0.5" browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.17.3, browserslist@^4.6.4: - version "4.17.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.3.tgz#2844cd6eebe14d12384b0122d217550160d2d624" - integrity sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ== + version "4.17.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.4.tgz#72e2508af2a403aec0a49847ef31bd823c57ead4" + integrity sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ== dependencies: - caniuse-lite "^1.0.30001264" - electron-to-chromium "^1.3.857" + caniuse-lite "^1.0.30001265" + electron-to-chromium "^1.3.867" escalade "^3.1.1" - node-releases "^1.1.77" - picocolors "^0.2.1" + node-releases "^2.0.0" + picocolors "^1.0.0" bs58@^4.0.1: version "4.0.1" @@ -3078,10 +3111,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001264: - version "1.0.30001265" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz#0613c9e6c922e422792e6fcefdf9a3afeee4f8c3" - integrity sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001265: + version "1.0.30001269" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001269.tgz#3a71bee03df627364418f9fd31adfc7aa1cc2d56" + integrity sha512-UOy8okEVs48MyHYgV+RdW1Oiudl1H6KolybD6ZquD0VcrPSgj25omXO1S7rDydjpqaISCwA8Pyx+jUQKZwWO5w== capture-exit@^2.0.0: version "2.0.0" @@ -3281,15 +3314,14 @@ clean-stack@^2.0.0: integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.0.tgz#11ecfb58a79278cf6035a60c54e338f9d837897c" - integrity sha512-a0VZ8LeraW0jTuCkuAGMNufareGHhyZU9z8OGsW0gXd1hZGi1SRuNRXdbGkraBBKnhyUhyebFWnRbp+dIn0f0A== + version "2.0.1" + resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.1.tgz#93e3491308691f1e46beb78b63d0fb2585e42ba6" + integrity sha512-eBbxZF6fqPUNnf7CLAFOersUnyYzv83tHFLSlts+OAHsNendaqv2tHCq+/MO+b3Y+9JeoUlIvobyxG/Z8GNeOg== dependencies: - ansi-regex "^2.1.1" d "^1.0.1" - es5-ext "^0.10.51" + es5-ext "^0.10.53" es6-iterator "^2.0.3" - memoizee "^0.4.14" + memoizee "^0.4.15" timers-ext "^0.1.7" cliui@^5.0.0: @@ -3349,6 +3381,11 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -3499,6 +3536,11 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -3551,9 +3593,9 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-compat@^3.16.0, core-js-compat@^3.16.2: - version "3.18.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.2.tgz#e40c266fbd613948dd8d2d2156345da8ac03c142" - integrity sha512-25VJYCJtGjZwLguj7d66oiHfmnVw3TMOZ0zV8DyMJp/aeQ3OjR519iOOeck08HMyVVRAqXxafc2Hl+5QstJrsQ== + version "3.18.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.3.tgz#e0e7e87abc55efb547e7fa19169e45fa9df27a67" + integrity sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw== dependencies: browserslist "^4.17.3" semver "7.0.0" @@ -4085,6 +4127,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -4129,9 +4176,9 @@ detect-node@^2.0.4: integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== diff-dom@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/diff-dom/-/diff-dom-4.2.2.tgz#49a121fe1614675b4f28ed50df9547bb0c3c1d52" - integrity sha512-qO0WsnnMF6Wc5MEm0j4LkwvJWs4Mpkj6pyXWMtcjGJPHWDNcnQY8ijYoSrsZuArBmlHLN9Dqr4de/3ZlbjpRVw== + version "4.2.3" + resolved "https://registry.yarnpkg.com/diff-dom/-/diff-dom-4.2.3.tgz#c6234b49c1b49e41601d2f08dbb26cd57842de45" + integrity sha512-8OZPIbTWVhkQVlUlsb+VuMEMpTpKKhO5FTwds2bYVIaBiPNJCG1YW5qXUyLWMux5gC2UGyYXjtX05SPivnGMCw== diff-match-patch@^1.0.5: version "1.0.5" @@ -4351,10 +4398,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.857: - version "1.3.866" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.866.tgz#d446338f5ad6948b27a50739760e7b0b5cc5032f" - integrity sha512-iYze6TpDXWxk+sfcpUUdTs6Pv/3kG45Pnjer2DxEeFw0N08bZeNLuz97s2lMgy8yObon48o0WHY2Bkg3xuAPOA== +electron-to-chromium@^1.3.867: + version "1.3.872" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.872.tgz#2311a82f344d828bab6904818adc4afb57b35369" + integrity sha512-qG96atLFY0agKyEETiBFNhpRLSXGSXOBuhXWpbkYqrLKKASpRyRBUtfkn0ZjIf/yXfA7FA4nScVOMpXSHFlUCQ== elliptic@^6.5.3: version "6.5.4" @@ -4519,7 +4566,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.51, es5-ext@^0.10.53, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: version "0.10.53" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== @@ -5447,6 +5494,20 @@ functions-have-names@^1.2.2: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.2.tgz#98d93991c39da9361f8e50b337c4f6e41f120e21" integrity sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA== +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.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" @@ -5742,6 +5803,11 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -5807,10 +5873,10 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== -highlight.js@^10.5.0: - version "10.7.3" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== +highlight.js@^11.3.1: + version "11.3.1" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.3.1.tgz#813078ef3aa519c61700f84fe9047231c5dc3291" + integrity sha512-PUhCRnPjLtiLHZAQ5A/Dt5F8cWZeMyj9KRsACsWT+OD6OP0x6dp5OmT5jdx0JgEyPxPZZIPQpRN2TciUT7occw== hmac-drbg@^1.0.1: version "1.0.1" @@ -6374,9 +6440,9 @@ is-color-stop@^1.0.0: rgba-regex "^1.0.0" is-core-module@^2.2.0, is-core-module@^2.5.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.7.0.tgz#3c0ef7d31b4acfc574f80c58409d568a836848e3" - integrity sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ== + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== dependencies: has "^1.0.3" @@ -6502,6 +6568,13 @@ is-finalizationregistry@^1.0.1: dependencies: call-bind "^1.0.2" +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -6812,11 +6885,11 @@ isstream@~0.1.2: integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= istanbul-lib-coverage@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.2.tgz#36786d4d82aad2ea5911007e255e2da6b5f80d86" - integrity sha512-o5+eTUYzCJ11/+JhW5/FUCdfsdoYVdQ/8I/OveE2XsjehYn5DdeSnNQAbjYaO8gQ6hvGTN6GM6ddQqpTVG5j8g== + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: +istanbul-lib-instrument@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== @@ -6826,6 +6899,17 @@ istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: istanbul-lib-coverage "^3.0.0" semver "^6.3.0" +istanbul-lib-instrument@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.0.4.tgz#e976f2aa66ebc6737f236d3ab05b76e36f885c80" + integrity sha512-W6jJF9rLGEISGoCyXRqa/JCGQGmmxPO10TMu7izaUTynxvBvTjqzAIIGCK9USBmIbQAaSWD6XJPrM9Pv5INknw== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" @@ -6845,9 +6929,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.4.tgz#5c38ce8136edf484c0fcfbf7514aafb0363ed1db" - integrity sha512-bFjUnc95rHjdCR63WMHUS7yfJJh8T9IPSWavvR02hhjVwezWALZ5axF9EqjmwZHpXqkzbgAMP8DmAtiyNxrdrQ== + version "3.0.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.5.tgz#a2580107e71279ea6d661ddede929ffc6d693384" + integrity sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -6915,14 +6999,14 @@ jest-diff@^26.6.2: pretty-format "^26.6.2" jest-diff@^27.0.0: - version "27.2.5" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.2.5.tgz#908f7a6aca5653824516ad30e0a9fd9767e53623" - integrity sha512-7gfwwyYkeslOOVQY4tVq5TaQa92mWfC9COsVYMNVYyJTOYAqbIkoD3twi5A+h+tAPtAelRxkqY6/xu+jwTr0dA== + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.3.1.tgz#d2775fea15411f5f5aeda2a5e02c2f36440f6d55" + integrity sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ== dependencies: chalk "^4.0.0" diff-sequences "^27.0.6" - jest-get-type "^27.0.6" - pretty-format "^27.2.5" + jest-get-type "^27.3.1" + pretty-format "^27.3.1" jest-docblock@^26.0.0: version "26.0.0" @@ -6982,10 +7066,10 @@ jest-get-type@^26.3.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-get-type@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" - integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg== +jest-get-type@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.3.1.tgz#a8a2b0a12b50169773099eee60a0e6dd11423eff" + integrity sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg== jest-haste-map@^26.6.2: version "26.6.2" @@ -7771,9 +7855,9 @@ mathml-tag-names@^2.1.3: resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== -matrix-js-sdk@14.0.1, "matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop": +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop": version "14.0.1" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/e7b41fadd0d6eda7423a369c99ec7b94afd48d5d" + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/94ff0ea4cd9dfd37400b079c8da08b8ecd0f7c6f" dependencies: "@babel/runtime" "^7.12.5" another-json "^0.2.0" @@ -7796,7 +7880,7 @@ matrix-mock-request@^1.2.3: "matrix-react-sdk@github:matrix-org/matrix-react-sdk#develop": version "3.32.1" - resolved "https://codeload.github.com/matrix-org/matrix-react-sdk/tar.gz/9439df90822cbfe4a45d21745ebdd536cd51d9a2" + resolved "https://codeload.github.com/matrix-org/matrix-react-sdk/tar.gz/d743e3d1d6ec03241360a49c8532319ca898eceb" dependencies: "@babel/runtime" "^7.12.5" "@sentry/browser" "^6.11.0" @@ -7820,14 +7904,14 @@ matrix-mock-request@^1.2.3: focus-visible "^5.2.0" gfm.css "^1.1.2" glob-to-regexp "^0.4.1" - highlight.js "^10.5.0" + highlight.js "^11.3.1" html-entities "^1.4.0" is-ip "^3.1.0" jszip "^3.7.0" katex "^0.12.0" linkifyjs "^2.1.9" lodash "^4.17.20" - matrix-js-sdk "14.0.1" + matrix-js-sdk "github:matrix-org/matrix-js-sdk#develop" matrix-widget-api "^0.1.0-beta.16" minimist "^1.2.5" opus-recorder "^8.0.3" @@ -7935,7 +8019,7 @@ memoize-one@^5.1.1: resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== -memoizee@^0.4.14: +memoizee@^0.4.15: version "0.4.15" resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72" integrity sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ== @@ -8266,9 +8350,9 @@ nan@^2.12.1: integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== nanoid@^3.1.28: - version "3.1.29" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.29.tgz#214fb2d7a33e1a5bef4757b779dfaeb6a4e5aeb4" - integrity sha512-dW2pUSGZ8ZnCFIlBIA31SV8huOGCHb6OwzVCc7A69rb/a+SgPBwfmLvK5TKQ3INPbRkcI8a/Owo0XbiTNH19wg== + version "3.1.30" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" + integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== nanomatch@^1.2.9: version "1.2.13" @@ -8340,7 +8424,7 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -node-fetch@^2.6.1: +node-fetch@^2.6.0, node-fetch@^2.6.1: version "2.6.5" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.5.tgz#42735537d7f080a7e5f78b6c549b7146be1742fd" integrity sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ== @@ -8403,10 +8487,10 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^1.1.77: - version "1.1.77" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" - integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== +node-releases@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.0.tgz#67dc74903100a7deb044037b8a2e5f453bb05400" + integrity sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA== normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" @@ -8479,6 +8563,16 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" +npmlog@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + nth-check@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -8498,6 +8592,11 @@ num2fraction@^1.2.2: resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" @@ -8697,9 +8796,9 @@ optionator@^0.9.1: word-wrap "^1.2.3" opus-recorder@^8.0.3: - version "8.0.4" - resolved "https://registry.yarnpkg.com/opus-recorder/-/opus-recorder-8.0.4.tgz#c4cdbb8bb94d17aa406934b58dcf9caab6c79b09" - integrity sha512-nWwLH5BySgNDHdpkOMV+igl9iyS99g60ap/0LycIgbSXykZvUpweuWCgAl3mTKSL0773yvKohlO5dOv5RQqG/Q== + version "8.0.5" + resolved "https://registry.yarnpkg.com/opus-recorder/-/opus-recorder-8.0.5.tgz#06d3e32e15da57ebc3f57e41b93033475fcb4e3e" + integrity sha512-tBRXc9Btds7i3bVfA7d5rekAlyOcfsivt5vSIXHxRV1Oa+s6iXFW8omZ0Lm3ABWotVcEyKt96iIIUcgbV07YOw== original@^1.0.0: version "1.0.2" @@ -8984,6 +9083,11 @@ picocolors@^0.2.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" @@ -9873,10 +9977,10 @@ pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^27.0.0, pretty-format@^27.2.5: - version "27.2.5" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.2.5.tgz#7cfe2a8e8f01a5b5b29296a0b70f4140df0830c5" - integrity sha512-+nYn2z9GgicO9JiqmY25Xtq8SYfZ/5VCpEU3pppHHNAhd1y+ZXxmNPd1evmNcAd6Hz4iBV2kf0UpGth5A/VJ7g== +pretty-format@^27.0.0, pretty-format@^27.3.1: + version "27.3.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.3.1.tgz#7e9486365ccdd4a502061fa761d3ab9ca1b78df5" + integrity sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA== dependencies: "@jest/types" "^27.2.5" ansi-regex "^5.0.1" @@ -9893,7 +9997,7 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@^2.0.0: +progress@^2.0.0, progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -9935,6 +10039,11 @@ proxy-addr@~2.0.5: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -10255,7 +10364,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -10699,9 +10808,9 @@ sane@^4.0.3: walker "~1.0.5" sanitize-html@^2.3.2: - version "2.5.1" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.5.1.tgz#f49998dc54c8180153940440d3a7294b09e4258a" - integrity sha512-hUITPitQk+eFNLtr4dEkaaiAJndG2YE87IOpcfBSL1XdklWgwcNDJdr9Ppe8QKL/C3jFt1xH/Mbj20e0GZQOfg== + version "2.5.2" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.5.2.tgz#fd7892340e7fc9afd5722200929258808c578784" + integrity sha512-sJ1rO2YixFIqs2kIcEUb6PTrCjvz8DMq1XqWWuy0kjgjrn58GNLK1DKSIRybFZDO1WNgsEgD+WiEzTEYS8xEug== dependencies: deepmerge "^4.2.2" escape-string-regexp "^4.0.0" @@ -10849,7 +10958,7 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -set-blocking@^2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -11306,6 +11415,23 @@ string-replace-loader@2: loader-utils "^1.2.3" schema-utils "^2.6.5" +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -11380,6 +11506,13 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -12589,6 +12722,13 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"