app kind of start background side

This commit is contained in:
Audric Ackermann 2022-03-31 10:22:13 +11:00
parent 6e8e8eaa9a
commit 2dfd09a7b1
34 changed files with 638 additions and 273 deletions

2
.nvmrc
View File

@ -1 +1 @@
14.16.0
16.13.0

View File

@ -7,16 +7,15 @@ const toConcatForApp = [
'node_modules/jquery/dist/jquery.js',
'node_modules/bytebuffer/dist/bytebuffer.min.js',
'node_modules/long/dist/long.js',
'components/protobuf/**/*.js',
'node_modules/mustache/mustache.js',
'node_modules/underscore/underscore-min.js',
'node_modules/backbone/backbone.js',
];
const toConcatForComponentTextsecure = [
'node_modules/long/dist/long.js',
'components/protobuf/**/*.js',
];
// const toConcatForComponentTextsecure = [
// 'node_modules/long/dist/long.js',
// 'components/protobuf/**/*.js',
// ];
module.exports = grunt => {
const components = [];
@ -25,11 +24,11 @@ module.exports = grunt => {
components.push(toConcatForApp[i]);
}
const libtextsecurecomponents = [];
// eslint-disable-next-line guard-for-in, no-restricted-syntax
for (const i in toConcatForComponentTextsecure) {
libtextsecurecomponents.push(toConcatForComponentTextsecure[i]);
}
// const libtextsecurecomponents = [];
// // eslint-disable-next-line guard-for-in, no-restricted-syntax
// for (const i in toConcatForComponentTextsecure) {
// libtextsecurecomponents.push(toConcatForComponentTextsecure[i]);
// }
const utilWorkerComponents = [
'node_modules/bytebuffer/dist/bytebuffer.js',
@ -54,16 +53,16 @@ module.exports = grunt => {
src: utilWorkerComponents,
dest: 'js/util_worker.js',
},
libtextsecurecomponents: {
src: libtextsecurecomponents,
dest: 'libtextsecure/components.js',
},
// libtextsecurecomponents: {
// src: libtextsecurecomponents,
// dest: 'libtextsecure/components.js',
// },
libtextsecure: {
options: {
banner: ';(function() {\n',
footer: '})();\n',
},
src: ['libtextsecure/errors.js', 'libtextsecure/libsignal-protocol.js'],
src: ['libtextsecure/libsignal-protocol.js'],
dest: 'js/libtextsecure.js',
},
},

View File

@ -12,9 +12,9 @@
"type": "git",
"url": "https://github.com/oxen-io/session-desktop.git"
},
"main": "main.js",
"main": "dist/electron_main.js",
"scripts": {
"postinstall": "electron-builder install-app-deps && rimraf node_modules/dtrace-provider",
"postinstall": "yarn patch-package && yarn electron-builder install-app-deps",
"start-prod": "cross-env NODE_ENV=production NODE_APP_INSTANCE=devprod$MULTI electron .",
"grunt": "yarn clean-transpile && grunt",
"generate": "yarn grunt --force",
@ -41,19 +41,19 @@
"sedtoAppImage": "sed -i 's/\"target\": \\[\"deb\", \"rpm\", \"freebsd\"\\]/\"target\": \"AppImage\"/g' package.json",
"sedtoDeb": "sed -i 's/\"target\": \"AppImage\"/\"target\": \\[\"deb\", \"rpm\", \"freebsd\"\\]/g' package.json",
"build:webpack": "webpack --config ./webpack.config.js",
"start:webpack": "yarn build && electron ./dist/electron.js"
"start:webpack": "yarn build && electron ./dist/electron_main.js"
},
"dependencies": {
"@reduxjs/toolkit": "^1.4.0",
"abort-controller": "3.0.0",
"auto-bind": "^4.0.0",
"backbone": "1.3.3",
"better-sqlite3": "https://github.com/signalapp/better-sqlite3#ad0db5dd09c0ea4007b1c46bd4f7273827803347",
"better-sqlite3": "https://github.com/signalapp/better-sqlite3#4f66ee7b85477016dd0b2c3d2f13dcb60abd452e",
"blob-util": "2.0.2",
"blueimp-canvas-to-blob": "^3.29.0",
"blueimp-load-image": "5.14.0",
"buffer-crc32": "0.2.13",
"bunyan": "1.8.12",
"bunyan": "^1.8.15",
"bytebuffer": "^5.0.1",
"classnames": "2.2.5",
"color": "^3.1.2",
@ -116,7 +116,7 @@
"devDependencies": {
"@playwright/test": "^1.16.3",
"@types/backbone": "^1.4.2",
"@types/better-sqlite3": "5.4.1",
"@types/better-sqlite3": "7.4.0",
"@types/blueimp-load-image": "5.14.4",
"@types/buffer-crc32": "^0.2.0",
"@types/bunyan": "^1.8.8",
@ -159,7 +159,7 @@
"chai-as-promised": "^7.1.1",
"chai-bytes": "^0.1.2",
"cross-env": "^6.0.3",
"electron": "^13.6.2",
"electron": "^17.1.2",
"electron-builder": "22.8.0",
"electron-notarize": "^0.2.0",
"eslint": "4.14.0",
@ -179,13 +179,17 @@
"html-webpack-plugin": "^5.5.0",
"mocha": "4.1.0",
"mocha-testcheck": "1.0.0-rc.0",
"node-bindings-loader": "^1.5.0",
"node-gyp": "3.8.0",
"node-loader": "^2.0.0",
"node-sass-import-once": "1.2.0",
"patch-package": "^6.4.7",
"playwright": "^1.16.3",
"postinstall-prepare": "^1.0.1",
"prettier": "1.19.0",
"run-script-os": "^1.1.6",
"sinon": "9.0.2",
"terser-webpack-plugin": "^5.3.1",
"ts-loader": "^9.2.8",
"ts-mock-imports": "^1.3.0",
"tslint": "5.19.0",
@ -196,7 +200,7 @@
"webpack-cli": "^4.9.2"
},
"engines": {
"node": "^14.16.0"
"node": "16.13.0"
},
"build": {
"appId": "com.loki-project.messenger-desktop",

View File

@ -0,0 +1,14 @@
diff --git a/node_modules/bunyan/lib/bunyan.js b/node_modules/bunyan/lib/bunyan.js
index f988560..11af013 100644
--- a/node_modules/bunyan/lib/bunyan.js
+++ b/node_modules/bunyan/lib/bunyan.js
@@ -76,7 +76,8 @@ if (runtimeEnv === 'browser') {
os = require('os');
fs = require('fs');
try {
- dtrace = require('dtrace-provider' + '');
+ throw new Error('dtrace-provider is not available')
+ // dtrace = require('dtrace-provider' + '');
} catch (e) {
dtrace = null;
}

View File

@ -0,0 +1,13 @@
diff --git a/node_modules/bytebuffer/dist/bytebuffer-node.js b/node_modules/bytebuffer/dist/bytebuffer-node.js
index 93a7c46..11fed8c 100644
--- a/node_modules/bytebuffer/dist/bytebuffer-node.js
+++ b/node_modules/bytebuffer/dist/bytebuffer-node.js
@@ -26,7 +26,7 @@ module.exports = (function() {
var buffer = require("buffer"),
Buffer = buffer["Buffer"],
Long = require("long"),
- memcpy = null; try { memcpy = require("memcpy"); } catch (e) {}
+ memcpy = null; // try { memcpy = require("memcpy"); } catch (e) {}
/**
* Constructs a new ByteBuffer.

View File

@ -0,0 +1,13 @@
diff --git a/node_modules/component-classes/index.js b/node_modules/component-classes/index.js
index eb9d292..752ebf2 100644
--- a/node_modules/component-classes/index.js
+++ b/node_modules/component-classes/index.js
@@ -3,7 +3,7 @@
*/
try {
- var index = require('indexof');
+ // var index = require('indexof');
} catch (err) {
var index = require('component-indexof');
}

162
patches/config+1.28.1.patch Normal file
View File

@ -0,0 +1,162 @@
index a7651ef..9f29cc7 100644
--- a/node_modules/config/lib/config.js
+++ b/node_modules/config/lib/config.js
@@ -870,59 +870,8 @@ util.parseFile = function(fullFilename) {
}
}
- if (extension === 'js') {
- // Use the built-in parser for .js files
- configObject = require(fullFilename);
- }
- else if (extension === 'ts') {
- require('ts-node').register({
- lazy: true,
- compilerOptions: {
- allowJs: true,
- }
- });
-
- // Because of ES6 modules usage, `default` is treated as named export (like any other)
- // Therefore config is a value of `default` key.
- configObject = require(fullFilename).default;
- }
- else if (extension === 'coffee') {
- // .coffee files can be loaded with either coffee-script or iced-coffee-script.
- // Prefer iced-coffee-script, if it exists.
- // Lazy load the appropriate extension
- if (!Coffee) {
- Coffee = {};
-
- // The following enables iced-coffee-script on .coffee files, if iced-coffee-script is available.
- // This is commented as per a decision on a pull request.
- //try {
- // Coffee = require("iced-coffee-script");
- //}
- //catch (e) {
- // Coffee = require("coffee-script");
- //}
-
- Coffee = require("coffee-script");
-
- // coffee-script >= 1.7.0 requires explicit registration for require() to work
- if (Coffee.register) {
- Coffee.register();
- }
- }
- // Use the built-in parser for .coffee files with coffee-script
- configObject = require(fullFilename);
- }
- else if (extension === 'iced') {
- Iced = require("iced-coffee-script");
-
- // coffee-script >= 1.7.0 requires explicit registration for require() to work
- if (Iced.register) {
- Iced.register();
- }
- }
- else {
configObject = util.parseString(fileContent, extension);
- }
+
}
catch (e3) {
if (gitCryptTestRegex.test(fileContent)) {
@@ -974,36 +923,7 @@ util.parseString = function (content, format) {
var configObject = null;
// Parse the file based on extension
- if (format === 'yaml' || format === 'yml') {
- if (!Yaml && !VisionmediaYaml) {
- // Lazy loading
- try {
- // Try to load the better js-yaml module
- Yaml = require('js-yaml');
- }
- catch (e) {
- try {
- // If it doesn't exist, load the fallback visionmedia yaml module.
- VisionmediaYaml = require('yaml');
- }
- catch (e) { }
- }
- }
-
- if (Yaml) {
- configObject = Yaml.load(content);
- }
- else if (VisionmediaYaml) {
- // The yaml library doesn't like strings that have newlines but don't
- // end in a newline: https://github.com/visionmedia/js-yaml/issues/issue/13
- content += '\n';
- configObject = VisionmediaYaml.eval(util.stripYamlComments(content));
- }
- else {
- console.error("No YAML parser loaded. Suggest adding js-yaml dependency to your package.json file.")
- }
- }
- else if (format === 'json') {
+ if (format === 'json') {
try {
configObject = JSON.parse(content);
}
@@ -1021,59 +941,6 @@ util.parseString = function (content, format) {
configObject = JSON5.parse(content);
}
}
- else if (format === 'json5') {
-
- if (!JSON5) {
- JSON5 = require('json5');
- }
-
- configObject = JSON5.parse(content);
-
- } else if (format === 'hjson') {
-
- if (!HJSON) {
- HJSON = require('hjson');
- }
-
- configObject = HJSON.parse(content);
-
- } else if (format === 'toml') {
-
- if(!TOML) {
- TOML = require('toml');
- }
-
- configObject = TOML.parse(content);
- }
- else if (format === 'cson') {
- if (!CSON) {
- CSON = require('cson');
- }
- // Allow comments in CSON files
- if (typeof CSON.parseSync === 'function') {
- configObject = CSON.parseSync(util.stripComments(content));
- } else {
- configObject = CSON.parse(util.stripComments(content));
- }
- }
- else if (format === 'properties') {
- if (!PPARSER) {
- PPARSER = require('properties');
- }
- configObject = PPARSER.parse(content, { namespaces: true, variables: true, sections: true });
- } else if (format === 'xml') {
-
- if (!XML) {
- XML = require('x2js');
- }
-
- var x2js = new XML();
- configObject = x2js.xml2js(content);
- var rootKeys = Object.keys(configObject);
- if(rootKeys.length == 1) {
- configObject = configObject[rootKeys[0]];
- }
- }
return configObject;
};

View File

@ -5,7 +5,10 @@ import pify from 'pify';
import { default as glob } from 'glob';
import fse from 'fs-extra';
import { isArrayBuffer, isString, map } from 'lodash';
import { decryptAttachmentBuffer, encryptAttachmentBuffer } from '../../ts/types/Attachment';
import {
decryptAttachmentBuffer,
encryptAttachmentBuffer,
} from '../node/local_attachments_encrypter';
const PATH = 'attachments.noindex';

View File

@ -1,6 +1,6 @@
import React from 'react';
import { missingCaseError, PasswordUtil } from '../../util';
import { missingCaseError } from '../../util';
import { ToastUtils } from '../../session/utils';
import { getPasswordHash } from '../../data/data';
import { SpacerLG, SpacerSM } from '../basic/Text';
@ -9,6 +9,7 @@ import { sessionPassword } from '../../state/ducks/modalDialog';
import { LocalizerKeys } from '../../types/LocalizerKeys';
import { SessionButton, SessionButtonColor } from '../basic/SessionButton';
import { SessionWrapperModal } from '../SessionWrapperModal';
import { matchesHash, validatePassword } from '../../util/passwordUtils';
export type PasswordAction = 'set' | 'change' | 'remove';
@ -118,7 +119,7 @@ export class SessionPasswordDialog extends React.Component<Props, State> {
public async validatePasswordHash(password: string | null) {
// Check if the password matches the hash we have stored
const hash = await getPasswordHash();
if (hash && !PasswordUtil.matchesHash(password, hash)) {
if (hash && !matchesHash(password, hash)) {
return false;
}
@ -146,7 +147,7 @@ export class SessionPasswordDialog extends React.Component<Props, State> {
*/
private validatePassword(firstPassword: string) {
// if user did not fill the first password field, we can't do anything
const errorFirstInput = PasswordUtil.validatePassword(firstPassword);
const errorFirstInput = validatePassword(firstPassword);
if (errorFirstInput !== null) {
this.setState({
error: errorFirstInput,

View File

@ -1,7 +1,7 @@
import React, { useEffect, useState } from 'react';
import { ToastUtils } from '../../session/utils';
import { PasswordUtil } from '../../util';
import { matchesHash } from '../../util/passwordUtils';
import { getPasswordHash } from '../../data/data';
import { QRCode } from 'react-qr-svg';
import { mn_decode } from '../../session/crypto/mnemonic';
@ -27,7 +27,7 @@ const Password = (props: PasswordProps) => {
const confirmPassword = () => {
const passwordValue = jQuery('#seed-input-password').val();
const isPasswordValid = PasswordUtil.matchesHash(passwordValue as string, passwordHash);
const isPasswordValid = matchesHash(passwordValue as string, passwordHash);
if (!passwordValue) {
setError('noGivenPassword');

View File

@ -12,7 +12,7 @@ import { SettingsCategoryAppearance } from './section/CategoryAppearance';
import { SessionButton, SessionButtonColor, SessionButtonType } from '../basic/SessionButton';
import { getPasswordHash } from '../../data/data';
import { LocalizerKeys } from '../../types/LocalizerKeys';
import { PasswordUtil } from '../../util';
import { matchesHash } from '../../util/passwordUtils';
export function getMediaPermissionsSettings() {
return window.getSettingValue('media-permissions');
@ -161,7 +161,7 @@ export class SessionSettingsView extends React.Component<SettingsViewProps, Stat
// Check if the password matches the hash we have stored
const hash = await getPasswordHash();
if (hash && !PasswordUtil.matchesHash(enteredPassword, hash)) {
if (hash && !matchesHash(enteredPassword, hash)) {
this.setState({
pwdLockError: window.i18n('invalidPassword'),
});

View File

@ -1,4 +1,4 @@
import { remote } from 'electron';
import { app } from 'electron';
import { useCallback, useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { isElectronWindowFocused } from '../session/utils/WindowUtils';
@ -26,11 +26,11 @@ export function useAppIsFocused() {
}, []);
useEffect(() => {
remote.app.on('browser-window-focus', onFocusCallback);
remote.app.on('browser-window-blur', onBlurCallback);
app.on('browser-window-focus', onFocusCallback);
app.on('browser-window-blur', onBlurCallback);
return () => {
remote.app.removeListener('browser-window-blur', onBlurCallback);
remote.app.removeListener('browser-window-focus', onFocusCallback);
app.removeListener('browser-window-blur', onBlurCallback);
app.removeListener('browser-window-focus', onFocusCallback);
};
});

View File

@ -19,9 +19,12 @@ import crypto from 'crypto';
import _ from 'lodash';
import pify from 'pify';
import { setup as setupSpellChecker } from '../node/spell_check';
import packageJson from '../../package.json';
import { setupGlobalErrorHandler } from '../node/global_errors';
import Logger from 'bunyan';
import { setup as setupSpellChecker } from '../node/spell_check'; // checked - only node
import { setupGlobalErrorHandler } from '../node/global_errors'; // checked - only node
import packageJson from '../../package.json'; // checked - only node
setupGlobalErrorHandler();
import electronLocalshortcut from 'electron-localshortcut';
@ -51,12 +54,12 @@ let readyForShutdown: boolean = false;
// Tray icon and related objects
let tray: any = null;
import { config } from '../node/config';
import { config } from '../node/config'; // checked - only node
// Very important to put before the single instance check, since it is based on the
// userData directory.
import { userConfig } from '../node/config/user_config';
import * as passwordUtil from '../util/passwordUtils';
import { userConfig } from '../node/config/user_config'; // checked - only node
import * as PasswordUtil from '../util/passwordUtils'; // checked - only node
const development = (config as any).environment === 'development';
const appInstance = config.util.getEnv('NODE_APP_INSTANCE') || 0;
@ -65,18 +68,17 @@ const appInstance = config.util.getEnv('NODE_APP_INSTANCE') || 0;
// data directory has been set.
import { initAttachmentsChannel } from '../node/attachment_channel';
import * as updater from '../updater/index';
import * as updater from '../updater/index'; // checked - only node
import { createTrayIcon } from '../node/tray_icon';
import { ephemeralConfig } from '../node/config/ephemeral_config';
import { getLogger, initializeLogger } from '../node/logging';
import { sqlNode } from '../node/sql';
import * as sqlChannels from '../node/sql_channel';
import { windowMarkShouldQuit, windowShouldQuit } from '../node/window_state';
import { createTemplate } from '../node/menu';
import { installFileHandler, installWebHandler } from '../node/protocol_filter';
import { installPermissionsHandler } from '../node/permissions';
import Logger from 'bunyan';
import { createTrayIcon } from '../node/tray_icon'; // checked - only node
import { ephemeralConfig } from '../node/config/ephemeral_config'; // checked - only node
import { getLogger, initializeLogger } from '../node/logging'; // checked - only node
import { sqlNode } from '../node/sql'; // checked - only node
import * as sqlChannels from '../node/sql_channel'; // checked - only node
import { windowMarkShouldQuit, windowShouldQuit } from '../node/window_state'; // checked - only node
import { createTemplate } from '../node/menu'; // checked - only node
import { installFileHandler, installWebHandler } from '../node/protocol_filter'; // checked - only node
import { installPermissionsHandler } from '../node/permissions'; // checked - only node
let appStartInitialSpellcheckSetting = true;
@ -244,6 +246,7 @@ function getStartInTray() {
// tslint:disable-next-line: max-func-body-length
async function createWindow() {
const { minWidth, minHeight, width, height } = getWindowSize();
windowConfig = windowConfig || {};
const picked = {
maximized: (windowConfig as any).maximized || false,
autoHideMenuBar: (windowConfig as any).autoHideMenuBar || false,
@ -364,7 +367,7 @@ async function createWindow() {
}
});
await mainWindow.loadURL(prepareURL([__dirname, 'background.html']));
await mainWindow.loadURL(prepareURL([__dirname, '../background.html']));
if ((process.env.NODE_APP_INSTANCE || '').startsWith('devprod')) {
// Open the DevTools.
@ -914,7 +917,7 @@ ipc.on('set-password', async (event, passPhrase, oldPhrase) => {
// Check if the hash we have stored matches the hash of the old passphrase.
const hash = sqlNode.getPasswordHash();
const hashMatches = oldPhrase && passwordUtil.matchesHash(oldPhrase, hash);
const hashMatches = oldPhrase && PasswordUtil.matchesHash(oldPhrase, hash);
if (hash && !hashMatches) {
const incorrectOldPassword = locale.messages.invalidOldPassword;
sendResponse(
@ -930,7 +933,7 @@ ipc.on('set-password', async (event, passPhrase, oldPhrase) => {
userConfig.set('dbHasPassword', false);
} else {
sqlNode.setSQLPassword(passPhrase);
const newHash = passwordUtil.generateHash(passPhrase);
const newHash = PasswordUtil.generateHash(passPhrase);
sqlNode.savePasswordHash(newHash);
userConfig.set('dbHasPassword', true);
}

View File

@ -3,7 +3,7 @@ import { MessageModel } from '../models/message';
import { isMacOS } from '../OS';
import { queueAllCached } from '../receiver/receiver';
import { getConversationController } from '../session/conversations';
import { AttachmentDownloads } from '../session/utils';
import { AttachmentDownloads, ToastUtils } from '../session/utils';
import { getOurPubKeyStrFromCache } from '../session/utils/User';
import { BlockedNumberController } from '../util';
import { ExpirationTimerOptions } from '../util/expiringMessages';
@ -166,7 +166,7 @@ Storage.onready(async () => {
window.Events.setThemeSetting(newThemeSetting);
try {
AttachmentDownloads.initAttachmentPaths();
await AttachmentDownloads.initAttachmentPaths();
await Promise.all([getConversationController().load(), BlockedNumberController.load()]);
} catch (error) {
@ -280,7 +280,7 @@ async function start() {
// if not undefined, we take the opposite
const newValue = currentValue !== undefined ? !currentValue : false;
window.Events.setSpellCheck(newValue);
window.libsession.Utils.ToastUtils.pushRestartNeeded();
ToastUtils.pushRestartNeeded();
};
window.toggleMediaPermissions = async () => {

View File

@ -1,19 +1,19 @@
import { ipcMain } from 'electron';
import rimraf from 'rimraf';
import * as Attachments from '../attachments/attachments';
import { deleteAll, ensureDirectory, getAllAttachments, getPath } from '../attachments/attachments';
// tslint:disable: no-console
import { sqlNode } from './sql';
import { sqlNode } from './sql'; // checked - only node
let initialized = false;
const ERASE_ATTACHMENTS_KEY = 'erase-attachments';
const CLEANUP_ORPHANED_ATTACHMENTS_KEY = 'cleanup-orphaned-attachments';
export async function cleanupOrphanedAttachments(userDataPath: string) {
const allAttachments = await Attachments.getAllAttachments(userDataPath);
async function cleanupOrphanedAttachments(userDataPath: string) {
const allAttachments = await getAllAttachments(userDataPath);
const orphanedAttachments = sqlNode.removeKnownAttachments(allAttachments); //sql.js
await Attachments.deleteAll({
await deleteAll({
userDataPath,
attachments: orphanedAttachments,
});
@ -26,9 +26,9 @@ export async function initAttachmentsChannel({ userDataPath }: { userDataPath: s
initialized = true;
console.log('Ensure attachments directory exists');
await Attachments.ensureDirectory(userDataPath);
await ensureDirectory(userDataPath);
const attachmentsDir = Attachments.getPath(userDataPath);
const attachmentsDir = getPath(userDataPath);
ipcMain.on(ERASE_ATTACHMENTS_KEY, event => {
try {

View File

@ -37,7 +37,7 @@ import c from 'config';
// Log resulting env vars in use by config
['NODE_ENV', 'NODE_APP_INSTANCE', 'NODE_CONFIG_DIR', 'NODE_CONFIG'].forEach(s => {
console.log(`${s} ${config.util.getEnv(s)}`);
console.log(`${s} ${c.util.getEnv(s)}`);
});
export const config = c;

View File

@ -1,7 +1,7 @@
import { app, clipboard, dialog } from 'electron';
import { redactAll } from '../util/privacy';
import { LocaleMessagesType } from './locale';
import { ConsoleCustom } from './logging';
import { redactAll } from '../util/privacy'; // checked - only node
import { LocaleMessagesType } from './locale'; // checked - only node
import { ConsoleCustom } from './logging'; // checked - only node
// tslint:disable: no-console
// We use hard-coded strings until we're able to update these strings from the locale.

View File

@ -0,0 +1,31 @@
import { isArrayBuffer } from 'lodash';
import { fromHexToArray } from '../session/utils/String';
import { sqlNode } from './sql';
export const encryptAttachmentBuffer = async (bufferIn: ArrayBuffer) => {
if (!isArrayBuffer(bufferIn)) {
throw new TypeError("'bufferIn' must be an array buffer");
}
const key = sqlNode.getItemById('local_attachment_encrypted_key')?.value as string | undefined;
if (!key) {
throw new TypeError(
"'encryptAttachmentBuffer' needs a key set in local_attachment_encrypted_key"
);
}
const encryptingKey = fromHexToArray(key);
return window.callWorker('encryptAttachmentBuffer', encryptingKey, bufferIn);
};
export const decryptAttachmentBuffer = async (bufferIn: ArrayBuffer): Promise<Uint8Array> => {
if (!isArrayBuffer(bufferIn)) {
throw new TypeError("'bufferIn' must be an array buffer");
}
const key = sqlNode.getItemById('local_attachment_encrypted_key')?.value as string;
if (!key) {
throw new TypeError(
"'decryptAttachmentBuffer' needs a key set in local_attachment_encrypted_key"
);
}
const encryptingKey = fromHexToArray(key);
return window.callWorker('decryptAttachmentBuffer', encryptingKey, bufferIn);
};

View File

@ -3,7 +3,7 @@
// tslint:disable: no-console
import { UserConfig } from './config/user_config';
import { session } from 'electron/main';
import { session } from 'electron';
const PERMISSIONS: Record<string, boolean> = {
// Allowed

View File

@ -1,7 +1,6 @@
import path from 'path';
import fs from 'fs';
import { Protocol } from 'electron';
import { ProtocolRequest } from 'electron/main';
import { Protocol, ProtocolRequest } from 'electron';
// tslint:disable: no-console
function eliminateAllAfterCharacter(str: string, character: string) {

View File

@ -1,7 +1,6 @@
// tslint:disable: no-console
import { Menu } from 'electron';
import { BrowserWindow } from 'electron/main';
import { BrowserWindow, Menu } from 'electron';
import { osLocaleSync } from 'os-locale';
export const setup = (browserWindow: BrowserWindow, messages: any) => {

View File

@ -16,15 +16,20 @@ import {
map,
uniq,
} from 'lodash';
import { redactAll } from '../util/privacy';
import { LocaleMessagesType } from './locale';
import { PubKey } from '../session/types';
import { StorageItem } from './storage_item';
import { redactAll } from '../util/privacy'; // checked - only node
import { LocaleMessagesType } from './locale'; // checked - only node
import { PubKey } from '../session/types/PubKey'; // checked - only node
import { StorageItem } from './storage_item'; // checked - only node
// tslint:disable: no-console
// tslint:disable: non-literal-fs-path
// tslint:disable: one-variable-per-declaration
// tslint:disable: quotemark
const openDbOptions = {
verbose: undefined,
nativeBinding: './node_modules/better-sqlite3/build/Release/better_sqlite3.node',
};
const CONVERSATIONS_TABLE = 'conversations';
const MESSAGES_TABLE = 'messages';
const MESSAGES_FTS_TABLE = 'messages_fts';
@ -134,7 +139,7 @@ function openAndMigrateDatabase(filePath: string, key: string) {
// First, we try to open the database without any cipher changes
try {
db = new BetterSqlite3.default(filePath, { verbose: undefined });
db = new BetterSqlite3.default(filePath, openDbOptions);
keyDatabase(db, key);
switchToWAL(db);
@ -154,7 +159,7 @@ function openAndMigrateDatabase(filePath: string, key: string) {
let db1;
try {
db1 = new BetterSqlite3.default(filePath, { verbose: undefined });
db1 = new BetterSqlite3.default(filePath, openDbOptions);
keyDatabase(db1, key);
// https://www.zetetic.net/blog/2018/11/30/sqlcipher-400-release/#compatability-sqlcipher-4-0-0
@ -172,7 +177,7 @@ function openAndMigrateDatabase(filePath: string, key: string) {
// migrate to the latest ciphers after we've modified the defaults.
let db2;
try {
db2 = new BetterSqlite3.default(filePath, { verbose: undefined });
db2 = new BetterSqlite3.default(filePath, openDbOptions);
keyDatabase(db2, key);
db2.pragma('cipher_migrate');

View File

@ -1,7 +1,7 @@
import { ipcMain } from 'electron';
import { sqlNode } from './sql';
import { userConfig } from './config/user_config';
import { ephemeralConfig } from './config/ephemeral_config';
import { app, ipcMain } from 'electron';
import { sqlNode } from './sql'; // checked - only node
import { userConfig } from './config/user_config'; // checked - only node
import { ephemeralConfig } from './config/ephemeral_config'; // checked - only node
let initialized = false;
@ -42,4 +42,11 @@ export function initialize() {
event.sender.send(`${ERASE_SQL_KEY}-done`, error);
}
});
ipcMain.on('get-user-data-path', () => {
return app.getPath('userData');
});
ipcMain.on('get-data-path', () => {
return app.getAppPath();
});
}

View File

@ -1,7 +1,6 @@
import path from 'path';
import { app, Menu, Tray } from 'electron';
import { BrowserWindow } from 'electron/main';
import { app, BrowserWindow, Menu, Tray } from 'electron';
import { LocaleMessagesType } from './locale';
let trayContextMenu = null;

View File

@ -6,11 +6,11 @@ import _ from 'lodash';
import fs from 'fs';
import path from 'path';
import tls from 'tls';
import { remote } from 'electron';
import { sha256 } from '../../crypto';
import * as Data from '../../../data/data';
import pRetry from 'p-retry';
import { SeedNodeAPI } from '.';
import { ipcRenderer } from 'electron';
// tslint:disable: function-name
@ -57,7 +57,9 @@ export async function fetchSnodePoolFromSeedNodeWithRetries(
}
}
const getSslAgentForSeedNode = (seedNodeHost: string, isSsl = false) => {
let cachedAppPath: string | undefined;
const getSslAgentForSeedNode = async (seedNodeHost: string, isSsl = false) => {
let filePrefix = '';
let pubkey256 = '';
let cert256 = '';
@ -92,7 +94,8 @@ const getSslAgentForSeedNode = (seedNodeHost: string, isSsl = false) => {
}
// tslint:disable: non-literal-fs-path
// read the cert each time. We only run this request once for each seed node nevertheless.
const appPath = remote.app.getAppPath();
const appPath = cachedAppPath || (await ipcRenderer.invoke('get-data-path'));
cachedAppPath = appPath;
const crt = fs.readFileSync(path.join(appPath, `/certificates/${filePrefix}.crt`), 'utf-8');
const sslOptions = {
// as the seed nodes are using a self signed certificate, we have to provide it here.
@ -244,7 +247,7 @@ async function getSnodesFromSeedUrl(urlObj: URL): Promise<Array<any>> {
params,
};
const sslAgent = getSslAgentForSeedNode(
const sslAgent = await getSslAgentForSeedNode(
urlObj.hostname,
urlObj.protocol !== Constants.PROTOCOLS.HTTP
);

View File

@ -1,8 +1,8 @@
import { remote } from 'electron';
import { BrowserWindow } from 'electron';
export function isElectronWindowFocused() {
const [yourBrowserWindow] = remote.BrowserWindow.getAllWindows();
const [yourBrowserWindow] = BrowserWindow.getAllWindows();
const isFocused = yourBrowserWindow?.isFocused() || false;
// throw new Error('TOFIX');
return isFocused;
}

View File

@ -98,12 +98,6 @@ describe('MessageEncrypter', () => {
};
beforeEach(() => {
TestUtils.stubWindow('textsecure', {
storage: {
protocol: sandbox.stub(),
},
});
sandbox.stub(UserUtils, 'getOurPubKeyStrFromCache').returns(ourNumber);
sandbox.stub(UserUtils, 'getUserED25519KeyPair').resolves(ourUserEd25516Keypair);
});

View File

@ -1,5 +1,5 @@
import { assert } from 'chai';
import { PasswordUtil } from '../../../../util';
import * as PasswordUtil from '../../../../util/passwordUtils';
describe('Password Util', () => {
describe('hash generation', () => {

View File

@ -1,13 +1,11 @@
import moment from 'moment';
import { isArrayBuffer, isUndefined, padStart } from 'lodash';
import { isUndefined, padStart } from 'lodash';
import * as MIME from './MIME';
import { saveURLAsFile } from '../util/saveURLAsFile';
import { SignalService } from '../protobuf';
import { isImageTypeSupported, isVideoTypeSupported } from '../util/GoogleChrome';
import { fromHexToArray } from '../session/utils/String';
import { ATTACHMENT_DEFAULT_MAX_SIDE } from '../util/attachmentsUtil';
import { Storage } from '../util/storage';
const MAX_WIDTH = 200;
const MAX_HEIGHT = MAX_WIDTH;
@ -392,21 +390,3 @@ export const getFileExtension = (attachment: AttachmentType): string | undefined
return attachment.contentType.split('/')[1];
}
};
export const encryptAttachmentBuffer = async (bufferIn: ArrayBuffer) => {
if (!isArrayBuffer(bufferIn)) {
throw new TypeError("'bufferIn' must be an array buffer");
}
const key = Storage.get('local_attachment_encrypted_key') as string;
const encryptingKey = fromHexToArray(key);
return window.callWorker('encryptAttachmentBuffer', encryptingKey, bufferIn);
};
export const decryptAttachmentBuffer = async (bufferIn: ArrayBuffer): Promise<Uint8Array> => {
if (!isArrayBuffer(bufferIn)) {
throw new TypeError("'bufferIn' must be an array buffer");
}
const key = Storage.get('local_attachment_encrypted_key') as string;
const encryptingKey = fromHexToArray(key);
return window.callWorker('decryptAttachmentBuffer', encryptingKey, bufferIn);
};

View File

@ -1,4 +1,4 @@
import { remote } from 'electron';
import { ipcRenderer } from 'electron';
import { isArrayBuffer, isEmpty, isUndefined, omit } from 'lodash';
import {
createAbsolutePathGetter,
@ -88,8 +88,10 @@ let internalDeleteOnDisk: ((relativePath: string) => Promise<void>) | undefined;
let internalWriteNewAttachmentData: ((arrayBuffer: ArrayBuffer) => Promise<string>) | undefined;
// userDataPath must be app.getPath('userData');
export function initializeAttachmentLogic() {
const userDataPath = remote.app.getPath('userData');
export async function initializeAttachmentLogic() {
const userDataPath = await ipcRenderer.invoke('get-user-data-path');
// const userDataPath = remote.app.getPath('userData');
if (attachmentsPath) {
throw new Error('attachmentsPath already initialized');
}

View File

@ -2,7 +2,6 @@ import * as GoogleChrome from './GoogleChrome';
import { arrayBufferToObjectURL } from './arrayBufferToObjectURL';
import { missingCaseError } from './missingCaseError';
import { makeLookup } from './makeLookup';
import * as PasswordUtil from './passwordUtils';
import * as AttachmentUtil from './attachmentsUtil';
import * as LinkPreviewUtil from './linkPreviewFetch';
@ -13,7 +12,6 @@ export {
GoogleChrome,
makeLookup,
missingCaseError,
PasswordUtil,
AttachmentUtil,
LinkPreviewUtil,
};

View File

@ -34,6 +34,6 @@
// "allowSyntheticDefaultImports": true, // Allow default imports from modules with no default export. This does not affect code emit, just typechecking.
"useUnknownInCatchVariables": false,
"esModuleInterop": true, // Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'.
"inlineSourceMap": true // Emit a single file with source maps instead of having a separate file.
"inlineSourceMap": false // Emit a single file with source maps instead of having a separate file.
}
}

View File

@ -1,53 +1,99 @@
/* eslint-disable class-methods-use-this */
const path = require('path');
const { Compilation } = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const optimization = {
nodeEnv: false,
removeAvailableModules: true,
removeEmptyChunks: true,
providedExports: true,
minimize: false,
// minimizer: [new TerserPlugin({ parallel: true })],
// splitChunks: true,
};
module.exports = [
// {
// // bundling mode
{
// bundling mode
// mode: 'development', // mode: 'production',
mode: 'development', // mode: 'production',
devtool: false,
// // entry files
optimization,
// entry: './main.js',
// target: 'electron-main',
// module: {
// // loaders
// entry files
resolve: {
extensions: ['.ts', '.tsx', '.js', '.json'],
// alias: {
// 'better_sqlite3.node': path.resolve(__dirname),
// },
},
entry: './ts/mains/main_node.ts',
target: 'electron-main',
module: {
// loaders
// rules: [
// {
// test: /\.tsx?$/,
// include: /ts/,
// use: [{ loader: 'ts-loader' }],
// exclude: /node_modules/,
// },
// ],
// },
// // output bundles (location)
rules: [
{
test: /\.js$/,
loader: `node-bindings-loader`,
},
{
test: /\.node$/,
loader: `node-loader`,
},
{
test: /\.tsx?$/,
include: /ts/,
use: [
{
loader: 'ts-loader',
options: {
transpileOnly: true,
experimentalWatchApi: true,
},
},
],
exclude: /node_modules/,
},
],
},
// output bundles (location)
// output: {
// path: path.resolve(__dirname, 'dist'),
// filename: 'electron.js',
// },
// },
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'electron_main.js',
},
},
{
mode: 'development',
entry: './ts/mains/main_renderer.ts',
target: 'electron-renderer',
devtool: 'source-map',
devtool: false,
resolve: {
extensions: ['.ts', '.tsx', '.js', '.json'],
},
module: {
rules: [
{
test: /\.ts(x?)$/,
test: /\.tsx?$/,
include: [path.resolve(__dirname, 'ts'), path.resolve(__dirname, 'js')],
use: [{ loader: 'ts-loader' }],
use: [
{
loader: 'ts-loader',
options: {
transpileOnly: true,
experimentalWatchApi: true,
},
},
],
},
],
},
optimization,
output: {
path: path.resolve(__dirname, 'dist', 'js'),
filename: 'electron-renderer.js',

324
yarn.lock
View File

@ -605,22 +605,6 @@
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
"@electron/get@^1.0.1":
version "1.9.0"
resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.9.0.tgz#7fa6e61d7ff50fb82a8a41f437af7de3b97aa9a5"
integrity sha512-OBIKtF6ttIJotDXe4KJMUyTBO4xMii+mFjlA8R4CORuD4HvCUaCK3lPjhdTRCvuEv6gzWNbAvd9DNBv0v780lw==
dependencies:
debug "^4.1.1"
env-paths "^2.2.0"
fs-extra "^8.1.0"
got "^9.6.0"
progress "^2.0.3"
sanitize-filename "^1.6.2"
sumchecker "^3.0.1"
optionalDependencies:
global-agent "^2.0.2"
global-tunnel-ng "^2.7.1"
"@electron/get@^1.13.0":
version "1.14.1"
resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.14.1.tgz#16ba75f02dffb74c23965e72d617adc721d27f40"
@ -845,12 +829,10 @@
"@types/jquery" "*"
"@types/underscore" "*"
"@types/better-sqlite3@5.4.1":
version "5.4.1"
resolved "https://registry.yarnpkg.com/@types/better-sqlite3/-/better-sqlite3-5.4.1.tgz#d45600bc19f8f41397263d037ca9b0d05df85e58"
integrity sha512-8hje3Rhsg/9veTkALfCwiWn7VMrP1QDwHhBSgerttYPABEvrHsMQnU9dlqoM6QX3x4uw3Y06dDVz8uDQo1J4Ng==
dependencies:
"@types/integer" "*"
"@types/better-sqlite3@7.4.0":
version "7.4.0"
resolved "https://registry.yarnpkg.com/@types/better-sqlite3/-/better-sqlite3-7.4.0.tgz#2b88d8474fc3f755617c0a5a8643388252c10aa1"
integrity sha512-tmSORlztb2cdWZDy4V81mRDgL+q7bd+ext4pI+Wj8EtJ5EHIZ6v7yiWbJ6A5eKVtoz77EsBEm7amwAzfqR/kAw==
"@types/blueimp-load-image@5.14.4":
version "5.14.4"
@ -1032,11 +1014,6 @@
resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35"
integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==
"@types/integer@*":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/integer/-/integer-4.0.0.tgz#3b778715df72d2cf8ba73bad27bd9d830907f944"
integrity sha512-2U1i6bIRiqizl6O+ETkp2HhUZIxg7g+burUabh9tzGd0qcszfNaFRaY9bGNlQKgEU7DCsH5qMajRDW5QamWQbw==
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"
@ -1510,6 +1487,11 @@
resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
"@yarnpkg/lockfile@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31"
integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==
abbrev@1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
@ -1875,13 +1857,18 @@ bcrypt-pbkdf@^1.0.0:
dependencies:
tweetnacl "^0.14.3"
"better-sqlite3@https://github.com/signalapp/better-sqlite3#ad0db5dd09c0ea4007b1c46bd4f7273827803347":
"better-sqlite3@https://github.com/signalapp/better-sqlite3#4f66ee7b85477016dd0b2c3d2f13dcb60abd452e":
version "7.1.4"
resolved "https://github.com/signalapp/better-sqlite3#ad0db5dd09c0ea4007b1c46bd4f7273827803347"
resolved "https://github.com/signalapp/better-sqlite3#4f66ee7b85477016dd0b2c3d2f13dcb60abd452e"
dependencies:
bindings "^1.5.0"
tar "^6.1.0"
big.js@^5.2.2:
version "5.2.2"
resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
binary@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79"
@ -1959,11 +1946,6 @@ boolbase@^1.0.0:
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
boolean@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.0.1.tgz#35ecf2b4a2ee191b0b44986f14eb5f052a5cbb4f"
integrity sha512-HRZPIjPcbwAVQvOTxR4YE3o8Xs98NqbbL1iEZDCz7CL8ql0Lt5iOyJFxfnAB0oFs8Oh02F/lLlg30Mexv46LjA==
boolean@^3.0.1:
version "3.2.0"
resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
@ -1991,7 +1973,7 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
braces@^3.0.1:
braces@^3.0.1, braces@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
@ -2081,13 +2063,13 @@ builtin-modules@^1.1.1:
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
bunyan@1.8.12:
version "1.8.12"
resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.12.tgz#f150f0f6748abdd72aeae84f04403be2ef113797"
integrity sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=
bunyan@^1.8.15:
version "1.8.15"
resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.15.tgz#8ce34ca908a17d0776576ca1b2f6cbd916e93b46"
integrity sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==
optionalDependencies:
dtrace-provider "~0.8"
moment "^2.10.6"
moment "^2.19.3"
mv "~2"
safe-json-stringify "~1"
@ -2141,6 +2123,11 @@ callsites@^0.2.0:
resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
callsites@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
camel-case@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
@ -2557,11 +2544,6 @@ core-js@^2.4.0:
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
core-js@^3.6.4:
version "3.6.4"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647"
integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@ -2588,6 +2570,17 @@ cross-spawn@^5.1.0:
shebang-command "^1.2.0"
which "^1.2.9"
cross-spawn@^6.0.5:
version "6.0.5"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
dependencies:
nice-try "^1.0.4"
path-key "^2.0.1"
semver "^5.5.0"
shebang-command "^1.2.0"
which "^1.2.9"
cross-spawn@^7.0.0:
version "7.0.1"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14"
@ -3099,7 +3092,7 @@ electron-updater@^4.2.2:
pako "^1.0.11"
semver "^7.1.3"
electron@*:
electron@*, electron@^17.1.2:
version "17.3.0"
resolved "https://registry.yarnpkg.com/electron/-/electron-17.3.0.tgz#cdcc46a7a3cd0b6f2a1757fbeb807f6b2fce847e"
integrity sha512-KuYHCOw1a+CE9thZlWRqTScf6M81KLd6n5qpdBGb0rl62+50RUuau9CnYpBb3EJxrjsXLaiQCBBSdPsozf/XUg==
@ -3108,15 +3101,6 @@ electron@*:
"@types/node" "^14.6.2"
extract-zip "^1.0.3"
electron@^13.6.2:
version "13.6.3"
resolved "https://registry.yarnpkg.com/electron/-/electron-13.6.3.tgz#c0217178807d3e0b2175c49dbe33ea8dac447e73"
integrity sha512-kevgR6/RuEhchJQbgCKhHle9HvJhi2dOJlicFZJqbbqa9BVpZARqqFDlwTSatYxmUPUJwu09FvyMwJG2DMQIng==
dependencies:
"@electron/get" "^1.0.1"
"@types/node" "^14.6.2"
extract-zip "^1.0.3"
emoji-mart@^2.11.2:
version "2.11.2"
resolved "https://registry.yarnpkg.com/emoji-mart/-/emoji-mart-2.11.2.tgz#ed331867f7f55bb33c8421c9a493090fa4a378c7"
@ -3134,6 +3118,11 @@ emoji-regex@^8.0.0:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
emojis-list@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
encodeurl@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
@ -3651,6 +3640,13 @@ find-up@^4.0.0, find-up@^4.1.0:
locate-path "^5.0.0"
path-exists "^4.0.0"
find-yarn-workspace-root@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd"
integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==
dependencies:
micromatch "^4.0.2"
findup-sync@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16"
@ -3717,6 +3713,15 @@ fs-extra@9.0.0:
jsonfile "^6.0.1"
universalify "^1.0.0"
fs-extra@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
dependencies:
graceful-fs "^4.1.2"
jsonfile "^4.0.0"
universalify "^0.1.0"
fs-extra@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
@ -3906,6 +3911,18 @@ glob@^7.1.4:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^7.1.6:
version "7.2.0"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
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@~5.0.0:
version "5.0.15"
resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
@ -3929,19 +3946,6 @@ glob@~7.0.0:
once "^1.3.0"
path-is-absolute "^1.0.0"
global-agent@^2.0.2:
version "2.1.8"
resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-2.1.8.tgz#99d153662b2c04cbc1199ffbc081a3aa656ac50f"
integrity sha512-VpBe/rhY6Rw2VDOTszAMNambg+4Qv8j0yiTNDYEXXXxkUNGWLHp8A3ztK4YDBbFNcWF4rgsec6/5gPyryya/+A==
dependencies:
boolean "^3.0.0"
core-js "^3.6.4"
es6-error "^4.1.1"
matcher "^2.1.0"
roarr "^2.15.2"
semver "^7.1.2"
serialize-error "^5.0.0"
global-agent@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6"
@ -4009,6 +4013,11 @@ got@^9.6.0:
to-readable-stream "^1.0.0"
url-parse-lax "^3.0.0"
graceful-fs@^4.1.11, graceful-fs@^4.2.9:
version "4.2.9"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0:
version "4.2.3"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
@ -4019,11 +4028,6 @@ graceful-fs@^4.2.3, graceful-fs@^4.2.4:
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
graceful-fs@^4.2.9:
version "4.2.9"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
growl@1.10.3:
version "1.10.3"
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f"
@ -4587,7 +4591,7 @@ is-utf8@^0.2.0:
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
is-wsl@^2.2.0:
is-wsl@^2.1.1, is-wsl@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
@ -4892,6 +4896,13 @@ kind-of@^6.0.2, kind-of@^6.0.3:
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
klaw-sync@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c"
integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==
dependencies:
graceful-fs "^4.1.11"
klaw@^1.0.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
@ -4988,6 +4999,15 @@ loader-runner@^4.2.0:
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384"
integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==
loader-utils@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129"
integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==
dependencies:
big.js "^5.2.2"
emojis-list "^3.0.0"
json5 "^2.1.2"
locate-path@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
@ -5140,13 +5160,6 @@ map-obj@^4.0.0:
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7"
integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==
matcher@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/matcher/-/matcher-2.1.0.tgz#64e1041c15b993e23b786f93320a7474bf833c28"
integrity sha512-o+nZr+vtJtgPNklyeUKkkH42OsK8WAfdgaJE2FNxcjLPg+5QbeEoT6vRj8Xq/iv18JlQ9cmKsEu0b94ixWf1YQ==
dependencies:
escape-string-regexp "^2.0.0"
matcher@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca"
@ -5218,6 +5231,14 @@ micromatch@^4.0.0, micromatch@^4.0.4:
braces "^3.0.1"
picomatch "^2.2.3"
micromatch@^4.0.2:
version "4.0.5"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
dependencies:
braces "^3.0.2"
picomatch "^2.3.1"
mime-db@1.43.0:
version "1.43.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58"
@ -5293,6 +5314,11 @@ minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
minimist@^1.2.6:
version "1.2.6"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
minipass@^3.0.0:
version "3.1.3"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd"
@ -5321,11 +5347,11 @@ mkdirp@^1.0.3:
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
mkdirp@~0.5.1:
version "0.5.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512"
integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==
version "0.5.6"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
dependencies:
minimist "^1.2.5"
minimist "^1.2.6"
mkpath@^0.1.0:
version "0.1.0"
@ -5369,10 +5395,10 @@ moment@2.21.0:
resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a"
integrity sha512-TCZ36BjURTeFTM/CwRcViQlfkMvL1/vFISuNLO5GkcVm1+QHfbSiNqZuWeMFjj1/3+uAjXswgRk30j1kkLYJBQ==
moment@^2.10.6:
version "2.24.0"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
moment@^2.19.3:
version "2.29.1"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
ms@0.7.1:
version "0.7.1"
@ -5419,9 +5445,9 @@ nan@2.14.2, nan@^2.13.2:
integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
nan@^2.14.0:
version "2.14.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
version "2.15.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee"
integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==
nano-css@^5.3.1:
version "5.3.1"
@ -5452,6 +5478,11 @@ neo-async@^2.6.2:
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
nice-try@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
nise@^4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/nise/-/nise-4.0.3.tgz#9f79ff02fa002ed5ffbc538ad58518fa011dc913"
@ -5471,6 +5502,15 @@ no-case@^3.0.4:
lower-case "^2.0.2"
tslib "^2.0.3"
node-bindings-loader@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/node-bindings-loader/-/node-bindings-loader-1.5.0.tgz#326b23d0ab88c5e3a218d819a16ee730e2af0470"
integrity sha512-0aixWkyrttzM94eUXqliYdS7v8PXHw5tKlUmbCm+dleoGe9ZajUKcpxYN84ftddCGkip2V4p435jVjQVKf5Q2w==
dependencies:
glob "^7.1.6"
parent-module "^2.0.0"
webpack-sources "^2.2.0"
node-fetch@2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5"
@ -5510,6 +5550,13 @@ node-gyp@^7.1.0:
tar "^6.0.2"
which "^2.0.2"
node-loader@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/node-loader/-/node-loader-2.0.0.tgz#9109a6d828703fd3e0aa03c1baec12a798071562"
integrity sha512-I5VN34NO4/5UYJaUBtkrODPWxbobrE4hgDqPrjB25yPkonFhCmZ146vTH+Zg417E9Iwoh1l/MbRs1apc5J295Q==
dependencies:
loader-utils "^2.0.0"
node-modules-regexp@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
@ -5689,6 +5736,14 @@ onetime@^5.1.2:
dependencies:
mimic-fn "^2.1.0"
open@^7.4.2:
version "7.4.2"
resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321"
integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==
dependencies:
is-docker "^2.0.0"
is-wsl "^2.1.1"
open@^8.3.0:
version "8.4.0"
resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8"
@ -5823,6 +5878,13 @@ param-case@^3.0.4:
dot-case "^3.0.4"
tslib "^2.0.3"
parent-module@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-2.0.0.tgz#fa71f88ff1a50c27e15d8ff74e0e3a9523bf8708"
integrity sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==
dependencies:
callsites "^3.1.0"
parse-json@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
@ -5853,6 +5915,25 @@ pascal-case@^3.1.2:
no-case "^3.0.4"
tslib "^2.0.3"
patch-package@^6.4.7:
version "6.4.7"
resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.4.7.tgz#2282d53c397909a0d9ef92dae3fdeb558382b148"
integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==
dependencies:
"@yarnpkg/lockfile" "^1.1.0"
chalk "^2.4.2"
cross-spawn "^6.0.5"
find-yarn-workspace-root "^2.0.0"
fs-extra "^7.0.1"
is-ci "^2.0.0"
klaw-sync "^6.0.0"
minimist "^1.2.0"
open "^7.4.2"
rimraf "^2.6.3"
semver "^5.6.0"
slash "^2.0.0"
tmp "^0.0.33"
path-exists@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
@ -5880,6 +5961,11 @@ path-is-inside@^1.0.2:
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
path-key@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
path-key@^3.0.0, path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
@ -5943,6 +6029,11 @@ picomatch@^2.2.3:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
picomatch@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
pify@3.0.0, pify@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
@ -6799,7 +6890,7 @@ retry@^0.12.0:
resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
rimraf@2, rimraf@^2.2.8:
rimraf@2, rimraf@^2.2.8, rimraf@^2.6.3:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
@ -6839,18 +6930,6 @@ rimraf@~2.6.2:
dependencies:
glob "^7.1.3"
roarr@^2.15.2:
version "2.15.2"
resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.2.tgz#34f6229ae3c8c12167c4ae60f58fe75e79a1e394"
integrity sha512-jmaDhK9CO4YbQAV8zzCnq9vjAqeO489MS5ehZ+rXmFiPFFE6B+S9KYO6prjmLJ5A0zY3QxVlQdrIya7E/azz/Q==
dependencies:
boolean "^3.0.0"
detect-node "^2.0.4"
globalthis "^1.0.1"
json-stringify-safe "^5.0.1"
semver-compare "^1.0.0"
sprintf-js "^1.1.2"
roarr@^2.15.3:
version "2.15.4"
resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
@ -6919,7 +6998,7 @@ safe-json-stringify@~1:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sanitize-filename@^1.6.2, sanitize-filename@^1.6.3:
sanitize-filename@^1.6.3:
version "1.6.3"
resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378"
integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==
@ -6988,7 +7067,7 @@ semver-diff@^3.1.1:
dependencies:
semver "^6.3.0"
"semver@2 || 3 || 4 || 5", semver@^5.3.0:
"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@ -7003,7 +7082,7 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.1.2, semver@^7.1.3:
semver@^7.1.3:
version "7.1.3"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6"
integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==
@ -7020,13 +7099,6 @@ semver@~5.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
serialize-error@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-5.0.0.tgz#a7ebbcdb03a5d71a6ed8461ffe0fc1a1afed62ac"
integrity sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==
dependencies:
type-fest "^0.8.0"
serialize-error@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18"
@ -7117,6 +7189,11 @@ sinon@9.0.2:
nise "^4.0.1"
supports-color "^7.1.0"
slash@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
slash@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
@ -7151,6 +7228,11 @@ socks@^2.6.1:
ip "^1.1.5"
smart-buffer "^4.1.0"
source-list-map@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
source-map-support@^0.4.18:
version "0.4.18"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
@ -7563,7 +7645,7 @@ term-size@^2.1.0:
resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753"
integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==
terser-webpack-plugin@^5.1.3:
terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz#0320dcc270ad5372c1e8993fabbd927929773e54"
integrity sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==
@ -7822,7 +7904,7 @@ type-fest@^0.6.0:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
type-fest@^0.8.0, type-fest@^0.8.1:
type-fest@^0.8.1:
version "0.8.1"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
@ -8015,6 +8097,14 @@ webpack-merge@^5.7.3:
clone-deep "^4.0.1"
wildcard "^2.0.0"
webpack-sources@^2.2.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd"
integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==
dependencies:
source-list-map "^2.0.1"
source-map "^0.6.1"
webpack-sources@^3.2.3:
version "3.2.3"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"