From b4835f16363af945db95756d48c982273c53bf3e Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Mon, 19 Dec 2022 18:58:55 +1100 Subject: [PATCH] fix: make libsession worker run from the renderer with key from settings --- .gitignore | 2 + libsession.worker.config.js | 6 +- package.json | 24 ++-- ts/components/leftpane/ActionsPanel.tsx | 7 +- .../browser/libsession_worker_functions.d.ts | 7 +- .../browser/libsession_worker_interface.ts | 1 - .../libsession.worker.js.LICENSE.txt | 16 +-- .../node/libsession/libsession.worker.ts | 49 +++++-- .../node/util/util.worker.js.LICENSE.txt | 32 ----- utils.worker.config.js | 8 +- yarn.lock | 133 +++++++++++++++++- 11 files changed, 202 insertions(+), 83 deletions(-) delete mode 100644 ts/webworker/workers/node/util/util.worker.js.LICENSE.txt diff --git a/.gitignore b/.gitignore index 4642403c1..ef46ea92a 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,5 @@ test-results/ .nyc_output coverage/ stylesheets/dist/ + +*.worker.js.LICENSE.txt diff --git a/libsession.worker.config.js b/libsession.worker.config.js index 1cb89929b..bf9928a6b 100644 --- a/libsession.worker.config.js +++ b/libsession.worker.config.js @@ -21,10 +21,10 @@ module.exports = { resolve: { extensions: ['.ts', '.js'], fallback: { - crypto: require.resolve('crypto-browserify'), - path: require.resolve('path-browserify'), + crypto: false, + path: false, fs: false, - stream: require.resolve('stream-browserify'), + stream: false, }, }, output: { diff --git a/package.json b/package.json index b2d80c6c6..2cd0cdf00 100644 --- a/package.json +++ b/package.json @@ -19,13 +19,6 @@ "distDir": "stylesheets/dist/", "optimize": true, "sourceMap": true - }, - "util-worker": { - "source": "ts/webworker/workers/node/util/util.worker.ts", - "distDir": "./ts/webworker/workers/", - "optimize": true, - "sourceMap": true, - "context": "web-worker" } }, "resolutions": { @@ -46,13 +39,12 @@ }, "scripts": { "start-prod": "cross-env NODE_ENV=production NODE_APP_INSTANCE=devprod$MULTI electron .", - "build-everything": "yarn clean && yarn protobuf && grunt && yarn sass && tsc && yarn parcel-util-worker", - "build-everything:watch": "yarn clean && yarn protobuf && grunt && yarn sass && yarn parcel-util-worker && tsc -w", + "build-everything": "yarn clean && yarn protobuf && grunt && yarn sass && tsc && yarn worker:utils && yarn worker:libsession", + "build-everything:watch": "yarn clean && yarn protobuf && grunt && yarn sass && yarn worker:utils && yarn worker:libsession && tsc -w", "watch": "yarn clean && yarn protobuf && grunt && concurrently 'yarn build-everything:watch' 'yarn sass:watch'", "protobuf": "pbjs --target static-module --wrap commonjs --out ts/protobuf/compiled.js protos/*.proto && pbts --out ts/protobuf/compiled.d.ts ts/protobuf/compiled.js --force-long", "sass": "rimraf 'stylesheets/dist/' && parcel build --target sass --no-autoinstall --no-cache", "sass:watch": "rimraf 'stylesheets/dist/' && parcel watch --target sass --no-autoinstall --no-cache", - "parcel-util-worker": "rimraf ts/webworker/workers/util.worker.js && parcel build --target util-worker --no-autoinstall --no-cache", "clean": "rimraf 'ts/**/*.js' 'ts/*.js' 'ts/*.js.map' 'ts/**/*.js.map' && rimraf tsconfig.tsbuildinfo;", "lint-full": "yarn format-full && eslint . && tslint --format stylish --project .", "format-full": "prettier --list-different --write \"*.{css,js,json,scss,ts,tsx}\" \"./**/*.{css,js,json,scss,ts,tsx}\"", @@ -75,7 +67,9 @@ "sedtoDeb": "sed -i 's/\"target\": \"AppImage\"/\"target\": \\[\"deb\", \"rpm\", \"freebsd\"\\]/g' package.json", "ready": "yarn build-everything && yarn lint-full && yarn test", "postinstall": "yarn patch-package && yarn electron-builder install-app-deps && yarn rebuild-curve25519-js", - "rebuild-curve25519-js": "cd node_modules/curve25519-js && yarn install && yarn build && cd ../../" + "rebuild-curve25519-js": "cd node_modules/curve25519-js && yarn install && yarn build && cd ../../", + "worker:utils": "webpack --config=./utils.worker.config.js", + "worker:libsession": "webpack --config=./libsession.worker.config.js" }, "dependencies": { "@emoji-mart/data": "^1.0.6", @@ -197,7 +191,7 @@ "chai-bytes": "^0.1.2", "concurrently": "^7.4.0", "cross-env": "^6.0.3", - "crypto-browserify": "^3.12.0", + "css-loader": "^6.7.2", "electron": "^17.2.0", "electron-builder": "22.8.0", "electron-notarize": "^0.2.0", @@ -209,6 +203,7 @@ "eslint-plugin-mocha": "^10.0.4", "eslint-plugin-more": "^1.0.5", "events": "^3.3.0", + "file-loader": "^6.2.0", "grunt": "1.5.3", "grunt-cli": "1.4.3", "grunt-contrib-concat": "2.1.0", @@ -224,14 +219,15 @@ "nyc": "^15.1.0", "parcel": "2.5.0", "patch-package": "^6.4.7", - "path-browserify": "^1.0.1", "playwright": "1.16.3", + "postcss-loader": "^7.0.2", "postinstall-prepare": "^1.0.1", "prettier": "1.19.0", "process": "^0.11.10", "run-script-os": "^1.1.6", + "sass-loader": "^13.2.0", "sinon": "9.0.2", - "stream-browserify": "^3.0.0", + "style-loader": "^3.3.1", "ts-loader": "^9.4.2", "ts-mock-imports": "^1.3.0", "tslint": "5.19.0", diff --git a/ts/components/leftpane/ActionsPanel.tsx b/ts/components/leftpane/ActionsPanel.tsx index 539630a66..22873200f 100644 --- a/ts/components/leftpane/ActionsPanel.tsx +++ b/ts/components/leftpane/ActionsPanel.tsx @@ -214,7 +214,12 @@ const doAppStartUp = () => { debounce(triggerAvatarReUploadIfNeeded, 200); setTimeout(async () => { - // callLibSessionWorker(['ClosedGroupConfig-123', 'dump']); + const keypair = await UserUtils.getUserED25519KeyPairBytes(); + if (!keypair) { + throw new Error('edkeypair not found for current user'); + } + + await callLibSessionWorker(['UserConfig', 'init', keypair.privKeyBytes, null]); console.warn(`getName result:"${await callLibSessionWorker(['UserConfig', 'getName'])}"`); console.warn('setName'); await callLibSessionWorker(['UserConfig', 'setName', 'MyName']); diff --git a/ts/webworker/workers/browser/libsession_worker_functions.d.ts b/ts/webworker/workers/browser/libsession_worker_functions.d.ts index ef086a5d7..837f5f6a7 100644 --- a/ts/webworker/workers/browser/libsession_worker_functions.d.ts +++ b/ts/webworker/workers/browser/libsession_worker_functions.d.ts @@ -1,16 +1,15 @@ -import { BaseConfigWrapper } from 'session_util_wrapper'; +import { BaseConfigActions, BaseConfigWrapper, UserConfigActionsType } from 'session_util_wrapper'; type UserConfig = 'UserConfig'; // we can only have one of those wrapper for our current user (but we can have a few configs for it to be merged into one) -type ClosedGroupConfigPrefix = 'ClosedGroupConfig-'; // we can have a bunch of those wrapper as we need to be able to send them to a different swarm for each group +type ClosedGroupConfigPrefix = 'ClosedGroupConfig-03'; // we can have a bunch of those wrapper as we need to be able to send them to a different swarm for each group type ClosedGroupConfig = `${ClosedGroupConfigPrefix}${string}`; export type ConfigWrapperObjectTypes = UserConfig | ClosedGroupConfig; -type BaseConfigActions = ['needsDump'] | ['needsPush'] | ['push', Uint8Array, number] | ['dump'] /**Those are the actions inherited from BaseConfigWrapper to UserConfigWrapper */ type UserConfigInheritedActions = [UserConfig, ...BaseConfigActions]; -type UserConfigActions = [UserConfig, 'getName'] | [UserConfig, 'setName', string|null]; +type UserConfigActions = [UserConfig,...UserConfigActionsType] | [UserConfig, 'init']; /**Those are the actions inherited from BaseConfigWrapper to ClosedGroupConfigWrapper */ type ClosedGroupConfigFromBase = [ClosedGroupConfig, ...BaseConfigActions]; diff --git a/ts/webworker/workers/browser/libsession_worker_interface.ts b/ts/webworker/workers/browser/libsession_worker_interface.ts index 83756f2d1..4ddafcbb2 100644 --- a/ts/webworker/workers/browser/libsession_worker_interface.ts +++ b/ts/webworker/workers/browser/libsession_worker_interface.ts @@ -21,7 +21,6 @@ const internalCallLibSessionWorker = async ([ 'libsession.worker.js' ); - console.warn('libsessionWorkerPath', libsessionWorkerPath); libsessionWorkerInterface = new WorkerInterface(libsessionWorkerPath, 1 * 60 * 1000); } return libsessionWorkerInterface?.callWorker(config, fnName, ...args); diff --git a/ts/webworker/workers/node/libsession/libsession.worker.js.LICENSE.txt b/ts/webworker/workers/node/libsession/libsession.worker.js.LICENSE.txt index 9805d779c..b1121f519 100644 --- a/ts/webworker/workers/node/libsession/libsession.worker.js.LICENSE.txt +++ b/ts/webworker/workers/node/libsession/libsession.worker.js.LICENSE.txt @@ -1,10 +1,8 @@ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT +/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ - -/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ - -/*! safe-buffer. MIT License. Feross Aboukhadijeh */ diff --git a/ts/webworker/workers/node/libsession/libsession.worker.ts b/ts/webworker/workers/node/libsession/libsession.worker.ts index 3190f9ac1..7087190c2 100644 --- a/ts/webworker/workers/node/libsession/libsession.worker.ts +++ b/ts/webworker/workers/node/libsession/libsession.worker.ts @@ -1,7 +1,7 @@ -import _ from 'lodash'; +import _, { isEmpty, isNull } from 'lodash'; import { UserConfigWrapper } from 'session_util_wrapper'; import { ConfigWrapperObjectTypes } from '../../browser/libsession_worker_functions'; -import { default as sodiumWrappers } from 'libsodium-wrappers-sumo'; +// import { default as sodiumWrappers } from 'libsodium-wrappers-sumo'; /* eslint-disable no-console */ /* eslint-disable strict */ @@ -10,33 +10,58 @@ let userConfig: UserConfigWrapper; /* eslint-disable strict */ -async function getSodiumWorker() { - await sodiumWrappers.ready; +// async function getSodiumWorker() { +// await sodiumWrappers.ready; - return sodiumWrappers; -} +// return sodiumWrappers; +// } async function getCorrespondingWrapper(config: ConfigWrapperObjectTypes) { if (config !== 'UserConfig') { throw new Error(`Invalid config: ${config}`); } - const sodium = await getSodiumWorker(); if (!userConfig) { - const edSecretKey = sodium.from_hex( - '0123456789abcdef0123456789abcdef000000000000000000000000000000004cb76fdc6d32278e3f83dbf608360ecc6b65727934b85d2fb86862ff98c46ab7' - ); - - userConfig = new UserConfigWrapper(edSecretKey, null); + throw new Error('UserConfig is not init yet'); } return userConfig; } +function isUInt8Array(value: any) { + return value.constructor === Uint8Array; +} + +function initUserConfigWrapper(options: Array) { + if (userConfig) { + throw new Error('UserConfig already init'); + } + if (options.length !== 2) { + throw new Error('UserConfig init needs two arguments'); + } + const [edSecretKey, dump] = options; + + if (isEmpty(edSecretKey) || !isUInt8Array(edSecretKey)) { + throw new Error('UserConfig init needs a valid edSecretKey'); + } + + if (!isNull(dump) && !isUInt8Array(dump)) { + throw new Error('UserConfig init needs a valid dump'); + } + + userConfig = new UserConfigWrapper(edSecretKey, dump); +} + // tslint:disable: function-name //tslint-disable no-console onmessage = async (e: { data: [number, ConfigWrapperObjectTypes, string, ...any] }) => { const [jobId, config, action, ...args] = e.data; try { + if (action === 'init') { + initUserConfigWrapper(args); + postMessage([jobId, null, null]); + return; + } + const wrapper = await getCorrespondingWrapper(config); const fn = (wrapper as any)[action]; diff --git a/ts/webworker/workers/node/util/util.worker.js.LICENSE.txt b/ts/webworker/workers/node/util/util.worker.js.LICENSE.txt deleted file mode 100644 index b5677a878..000000000 --- a/ts/webworker/workers/node/util/util.worker.js.LICENSE.txt +++ /dev/null @@ -1,32 +0,0 @@ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ - -/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ - -/*! safe-buffer. MIT License. Feross Aboukhadijeh */ - -/** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ - -/** - * @license bytebuffer.js (c) 2015 Daniel Wirtz - * Backing buffer: ArrayBuffer, Accessor: Uint8Array - * Released under the Apache License, Version 2.0 - * see: https://github.com/dcodeIO/bytebuffer.js for details - */ - -/** - * @license long.js (c) 2013 Daniel Wirtz - * Released under the Apache License, Version 2.0 - * see: https://github.com/dcodeIO/long.js for details - */ diff --git a/utils.worker.config.js b/utils.worker.config.js index 528b1e488..dc1a4fb25 100644 --- a/utils.worker.config.js +++ b/utils.worker.config.js @@ -14,15 +14,15 @@ module.exports = { resolve: { extensions: ['.ts', '.js'], fallback: { - crypto: require.resolve('crypto-browserify'), - path: require.resolve('path-browserify'), + crypto: false, + path: false, fs: false, - stream: require.resolve('stream-browserify'), + stream: false, }, }, output: { filename: 'util.worker.js', path: path.resolve(__dirname, 'ts', 'webworker', 'workers', 'node', 'util'), }, - target: 'webworker', + target: 'node', }; diff --git a/yarn.lock b/yarn.lock index ffd71aaf8..9ef4479eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3537,6 +3537,17 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +cosmiconfig@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + cosmiconfig@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" @@ -3654,6 +3665,20 @@ css-in-js-utils@^2.0.0: hyphenate-style-name "^1.0.2" isobject "^3.0.1" +css-loader@^6.7.2: + version "6.7.2" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.2.tgz#26bc22401b5921686a10fbeba75d124228302304" + integrity sha512-oqGbbVcBJkm8QwmnNzrFrWTnudnRZC+1eXikLJl0n4ljcfotgRifpg2a1lKy8jTrc4/d9A/ap1GFq1jDKG7J+Q== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.18" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.8" + css-select@^4.1.3: version "4.3.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" @@ -3687,6 +3712,11 @@ css-what@^6.0.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + csso@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" @@ -4769,6 +4799,14 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + file-sync-cmp@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz#a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b" @@ -5630,6 +5668,11 @@ iconv-lite@~0.4.13: dependencies: safer-buffer ">= 2.1.2 < 3" +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -6328,6 +6371,11 @@ klaw-sync@^6.0.0: dependencies: graceful-fs "^4.1.11" +klona@^2.0.4, klona@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" + integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== + lamejs@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/lamejs/-/lamejs-1.2.1.tgz#0f92d38729213f106d4a19ded20821da7e89c8e4" @@ -6913,6 +6961,11 @@ nanoid@3.3.3: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -7659,11 +7712,65 @@ pngjs@^6.0.0: resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-6.0.0.tgz#ca9e5d2aa48db0228a52c419c3308e87720da821" integrity sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg== -postcss-value-parser@^4.0.2, postcss-value-parser@^4.2.0: +postcss-loader@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.0.2.tgz#b53ff44a26fba3688eee92a048c7f2d4802e23bb" + integrity sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.5" + semver "^7.3.8" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== +postcss@^8.4.18: + version "8.4.19" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.19.tgz#61178e2add236b17351897c8bcc0b4c8ecab56fc" + integrity sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + posthtml-parser@^0.10.1: version "0.10.2" resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.10.2.tgz#df364d7b179f2a6bf0466b56be7b98fd4e97c573" @@ -8465,6 +8572,14 @@ sanitize.css@^12.0.1: resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-12.0.1.tgz#f20369357557ba2b41d7278eeb3ea691a3bee514" integrity sha512-QbusSBnWHaRBZeTxsJyknwI0q+q6m1NtLBmB76JfW/rdVN7Ws6Zz70w65+430/ouVcdNVT3qwrDgrM6PaYyRtw== +sass-loader@^13.2.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-13.2.0.tgz#80195050f58c9aac63b792fa52acb6f5e0f6bdc3" + integrity sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg== + dependencies: + klona "^2.0.4" + neo-async "^2.6.2" + sass@^1.38.0: version "1.52.1" resolved "https://registry.yarnpkg.com/sass/-/sass-1.52.1.tgz#554693da808543031f9423911d62c60a1acf7889" @@ -8494,7 +8609,7 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" -schema-utils@^3.1.0, schema-utils@^3.1.1: +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== @@ -8542,6 +8657,13 @@ semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: dependencies: lru-cache "^6.0.0" +semver@^7.3.8: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + serialize-error@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" @@ -8688,7 +8810,7 @@ socks@^2.6.2: ip "^1.1.5" smart-buffer "^4.2.0" -"source-map-js@>=0.6.2 <2.0.0": +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== @@ -8939,6 +9061,11 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +style-loader@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" + integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== + styled-components@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.1.1.tgz#96dfb02a8025794960863b9e8e365e3b6be5518d"