diff --git a/.gitignore b/.gitignore
index 66d21b6..8758258 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,7 @@ node_modules/
.DS_Store
+
+
+test.ts
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8733e91..437a2ca 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,8 @@
# Changelog
## Canary
-* Fixed max ad length for automated ads to be 50,000 characters
+* Show number of unread notes and messages in the bottom right corner
+* Fixed max ad length for automated ads to 50,000 characters
* Fixed 'unsure' sexual orientation to display correctly in character preview
diff --git a/chat/Chat.vue b/chat/Chat.vue
index 2dfef62..da9df2b 100644
--- a/chat/Chat.vue
+++ b/chat/Chat.vue
@@ -140,6 +140,7 @@ import {InlineDisplayMode} from '../interfaces';
AdManager.onConnectionClosed();
core.adCoordinator.clear();
+ core.siteSession.onConnectionClosed();
document.title = l('title');
});
@@ -173,6 +174,7 @@ import {InlineDisplayMode} from '../interfaces';
this.connected = true;
core.notifications.playSound('login');
document.title = l('title.connected', core.connection.character);
+ core.siteSession.onConnectionEstablished();
});
core.watch(() => core.conversations.hasNew, (hasNew) => {
document.title = (hasNew ? '💬 ' : '') + l(core.connection.isOpen ? 'title.connected' : 'title', core.connection.character);
diff --git a/chat/ChatView.vue b/chat/ChatView.vue
index 5034ee1..ecdd55f 100644
--- a/chat/ChatView.vue
+++ b/chat/ChatView.vue
@@ -98,8 +98,9 @@
+
-
+/me
+
diff --git a/site/note-checker.ts b/site/note-checker.ts
new file mode 100644
index 0000000..79fc025
--- /dev/null
+++ b/site/note-checker.ts
@@ -0,0 +1,85 @@
+import { SiteSession, SiteSessionInterface } from './site-session';
+import log from 'electron-log';
+import { EventBus } from '../chat/preview/event-bus';
+
+export interface NoteCheckerCount {
+ unreadNotes: number;
+ unreadMessages: number;
+ onlineUsers: number;
+}
+
+
+export class NoteChecker implements SiteSessionInterface {
+ private static readonly CHECK_FREQUENCY = 10 * 60 * 1000;
+
+ private latestCount: NoteCheckerCount = { unreadNotes: 0, unreadMessages: 0, onlineUsers: 0 };
+ private timer?: any;
+
+
+ constructor(private session: SiteSession) {
+
+ }
+
+
+ async start(): Promise {
+ try {
+ await this.stop();
+ await this.check();
+
+ this.timer = setInterval(
+ async() => {
+ try {
+ await this.check();
+ } catch(err) {
+ log.error('notechecker.check.error', err);
+ }
+ },
+ NoteChecker.CHECK_FREQUENCY
+ );
+
+ } catch(err) {
+ log.error('notechecker.start.error', err);
+ }
+ }
+
+
+ async stop(): Promise {
+ if (this.timer) {
+ clearInterval(this.timer);
+ delete this.timer;
+ }
+
+ this.latestCount = { unreadNotes: 0, unreadMessages: 0, onlineUsers: 0 };
+ }
+
+
+ private async check(): Promise {
+ log.debug('notechecker.check');
+
+ const res = await this.session.get('/', true);
+ const messagesMatch = res.body.match(/NavigationMessages.*?([0-9]+?) Messages/);
+ const notesMatch = res.body.match(/NavigationNotecount.*?([0-9]+?) Notes/);
+ const statsMatch = res.body.match(/Frontpage_Stats.*?([0-9]+?) characters/);
+
+ // console.log('MATCH', messagesMatch[1], notesMatch[1], statsMatch[1]);
+
+ const summary = {
+ unreadNotes: (notesMatch && notesMatch.length > 1) ? parseInt(notesMatch[1], 10) : 0,
+ unreadMessages: (messagesMatch && messagesMatch.length > 1) ? parseInt(messagesMatch[1], 10) : 0,
+ onlineUsers: (statsMatch && statsMatch.length > 1) ? parseInt(statsMatch[1], 10) : 0
+ };
+
+ this.latestCount = summary;
+
+ log.debug('notechecker.check.success', summary);
+ EventBus.$emit('note-counts-update', summary);
+
+ return summary;
+ }
+
+
+ getCounts(): NoteCheckerCount {
+ return this.latestCount;
+ }
+
+}
diff --git a/site/site-session.ts b/site/site-session.ts
new file mode 100644
index 0000000..47eafc1
--- /dev/null
+++ b/site/site-session.ts
@@ -0,0 +1,201 @@
+// import qs from 'qs';
+import _ from 'lodash';
+import log from 'electron-log';
+import throat from 'throat'; //tslint:disable-line:match-default-export-name
+import { NoteChecker } from './note-checker';
+
+import request from 'request-promise';
+
+
+export interface SiteSessionInterface {
+ start(): Promise;
+ stop(): Promise;
+}
+
+export interface SiteSessionInterfaceCollection extends Record {
+ notes: NoteChecker;
+}
+
+
+export class SiteSession {
+ private readonly sessionThroat = throat(1);
+
+ readonly interfaces: SiteSessionInterfaceCollection = {
+ notes: new NoteChecker(this)
+ };
+
+ private state: 'active' | 'inactive' = 'inactive';
+ private account = '';
+ private password = '';
+
+ private request: request.RequestPromiseAPI = request.defaults({ jar: request.jar() });
+
+ private csrf = '';
+
+
+ setCredentials(account: string, password: string): void {
+ this.account = account;
+ this.password = password;
+ }
+
+
+ async start(): Promise {
+ try {
+ await this.stop();
+ await this.init();
+ await this.login();
+
+ this.state = 'active';
+
+ await Promise.all(
+ _.map(this.interfaces, (i) => i.start())
+ );
+ } catch(err) {
+ this.state = 'inactive';
+ log.error('sitesession.start.error', err);
+ }
+ }
+
+
+ async stop(): Promise {
+ try {
+ await Promise.all(
+ _.map(this.interfaces, (i) => i.stop())
+ );
+ } catch(err) {
+ log.error('sitesession.stop.error', err);
+ }
+
+ this.csrf = '';
+ this.state = 'inactive';
+ }
+
+
+ private async init(): Promise {
+ log.debug('sitesession.init');
+
+ this.request = request.defaults({ jar: request.jar() });
+ this.csrf = '';
+
+ const res = await this.get('/');
+
+ if (res.statusCode !== 200) {
+ throw new Error(`SiteSession.init: Invalid status code: ${res.status}`);
+ }
+
+ const input = res.body.match(//);
+
+ if ((!input) || (input.length < 1)) {
+ throw new Error('SiteSession.init: Missing csrf token');
+ }
+
+ const csrf = input[0].match(/value="([a-zA-Z0-9]+)"/);
+
+ if ((!csrf) || (csrf.length < 2)) {
+ throw new Error('SiteSession.init: Missing csrf token value');
+ }
+
+ this.csrf = csrf[1];
+ }
+
+
+ private async login(): Promise {
+ log.debug('sitesession.login');
+
+ if ((this.password === '') || (this.account === '')) {
+ throw new Error('User credentials not set');
+ }
+
+ const res = await this.post(
+ '/action/script_login.php',
+ {
+ username: this.account,
+ password: this.password,
+ csrf_token: this.csrf
+ },
+ false,
+ {
+ followRedirect: false,
+ simple: false
+ }
+ );
+
+ if (res.statusCode !== 302) {
+ throw new Error('Invalid status code');
+ }
+
+ // console.log('RES RES RES', res);
+
+ log.debug('sitesession.login.success');
+ }
+
+
+ // tslint:disable-next-line:prefer-function-over-method
+ private async ensureLogin(): Promise {
+ if (this.state !== 'active') {
+ throw new Error('Site session not active');
+ }
+ }
+
+
+ private async prepareRequest(
+ method: string,
+ uri: string,
+ mustBeLoggedIn: boolean,
+ config: Partial
+ ): Promise {
+ if (mustBeLoggedIn) {
+ await this.ensureLogin();
+ }
+
+ return _.merge(
+ {
+ method,
+ uri: `https://www.f-list.net${uri}`,
+ resolveWithFullResponse: true
+ },
+ config
+ );
+ }
+
+
+ async get(uri: string, mustBeLoggedIn: boolean = false, config: Partial = {}): Promise {
+ const res = await this.sessionThroat(
+ async() => {
+ const finalConfig = await this.prepareRequest('get', uri, mustBeLoggedIn, config);
+
+ return this.request(finalConfig);
+ }
+ );
+
+ return res;
+ }
+
+
+ async post(
+ uri: string,
+ data: Record,
+ mustBeLoggedIn: boolean = false,
+ config: Partial = {}
+ ): Promise {
+ const res = await this.sessionThroat(
+ async() => {
+ const finalConfig = await this.prepareRequest('post', uri, mustBeLoggedIn, _.merge({ form: data }, config));
+
+ return this.request(finalConfig);
+ }
+ );
+
+ return res;
+ }
+
+
+ async onConnectionClosed(): Promise {
+ await this.stop();
+ }
+
+
+ async onConnectionEstablished(): Promise {
+ await this.start();
+ }
+}
diff --git a/yarn.lock b/yarn.lock
index 62805df..30dbdec 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -23,31 +23,31 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
-"@cliqz/adblocker-content@^1.18.6":
- version "1.18.6"
- resolved "https://registry.yarnpkg.com/@cliqz/adblocker-content/-/adblocker-content-1.18.6.tgz#a65dd518f3e6d1f2e9fee36ca5ae5615ba7b4cfd"
- integrity sha512-OXrca20n+cMn9Ase+6oeX3fTmkauQMSb//lMLs56pHyra4foxN5o1rNiBG7qNIypdGQBFiTtGG7Vbp7YO5RQMw==
+"@cliqz/adblocker-content@^1.18.8":
+ version "1.18.8"
+ resolved "https://registry.yarnpkg.com/@cliqz/adblocker-content/-/adblocker-content-1.18.8.tgz#96473f14c098a20091298d34a6addcd430aceebd"
+ integrity sha512-YZ1xYBVG3LmxsdTYvTs/Bc7pzCw/Dy4HFo6N+oIuGP+Le/0aGSkACUl3ue5I2+Cx0WmL0Z8I4QonTKDc06HR+A==
-"@cliqz/adblocker-electron-preload@^1.18.6":
- version "1.18.6"
- resolved "https://registry.yarnpkg.com/@cliqz/adblocker-electron-preload/-/adblocker-electron-preload-1.18.6.tgz#57ec2dac09bbacb03b143609345638e98132f985"
- integrity sha512-cOK6ZuN3j0qLCZUj8oCf2PmPY837VTxtZM6bZl1x5xWLy/31x7186Wk0DP3C9MXU7gUhlqYxxKpbJDLZgFJ7Qw==
+"@cliqz/adblocker-electron-preload@^1.18.8":
+ version "1.18.8"
+ resolved "https://registry.yarnpkg.com/@cliqz/adblocker-electron-preload/-/adblocker-electron-preload-1.18.8.tgz#c2058647e015b6f61c222e7d58040347324c63b0"
+ integrity sha512-/FAzyhNUj+8fwqSGth7ndaC+8huEANvVquYkDVmjM38uryxFgcJJI6Bij1l1zABIbskAaSN4G4RI3oERyd9/KQ==
dependencies:
- "@cliqz/adblocker-content" "^1.18.6"
+ "@cliqz/adblocker-content" "^1.18.8"
"@cliqz/adblocker-electron@^1.18.3":
- version "1.18.6"
- resolved "https://registry.yarnpkg.com/@cliqz/adblocker-electron/-/adblocker-electron-1.18.6.tgz#e387a1dc6f3f4a4005d299b37723899be4f0967b"
- integrity sha512-RGy003FHsvcLoGYaQIJVNWX8ZUQmK+Dbo0LeQAcsP96vOaTHHFOVj0Auhwkg7mZASiR9/XnoNepKIifO2zQVfw==
+ version "1.18.8"
+ resolved "https://registry.yarnpkg.com/@cliqz/adblocker-electron/-/adblocker-electron-1.18.8.tgz#5f697c5dc65cd936b3908078a6e4516ec995567a"
+ integrity sha512-CrsFjSwenWQogsAg4sHFaXZbu7hzs9dMdsZM5wxb+5QfZ3MSH3PBYAeAUnsmP3UOTZ423+6ErOUE1vzj3UrK9w==
dependencies:
- "@cliqz/adblocker" "^1.18.6"
- "@cliqz/adblocker-electron-preload" "^1.18.6"
+ "@cliqz/adblocker" "^1.18.8"
+ "@cliqz/adblocker-electron-preload" "^1.18.8"
tldts-experimental "^5.6.21"
-"@cliqz/adblocker@^1.18.6":
- version "1.18.6"
- resolved "https://registry.yarnpkg.com/@cliqz/adblocker/-/adblocker-1.18.6.tgz#07d075c45017db7cd2aff19afe466ad53217d318"
- integrity sha512-+ro8DoqBaMt9nmfjJF+0Om03/9hdDhRx6NJKzwmW7Pfvd/XhqJ+NiDtdusABSERhCE3nUXCWdu5j09X9HiX6Vg==
+"@cliqz/adblocker@^1.18.8":
+ version "1.18.8"
+ resolved "https://registry.yarnpkg.com/@cliqz/adblocker/-/adblocker-1.18.8.tgz#f6e5724fe6573c2e68f2545d90bcce3e1ecfbae9"
+ integrity sha512-19m0GhlOcdSvQ/BqVuaMgbYkgQ4ys8koBRW4K7Ua4V5fFWL0t8ckdcZ/gBOqwECS2m8agXSpEbbyJjNmHBHpMQ==
dependencies:
"@remusao/guess-url-type" "^1.1.2"
"@remusao/small" "^1.1.2"
@@ -193,7 +193,7 @@
dependencies:
defer-to-connect "^2.0.0"
-"@types/bluebird@^3.5.33":
+"@types/bluebird@*", "@types/bluebird@^3.5.33":
version "3.5.33"
resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.33.tgz#d79c020f283bd50bd76101d7d300313c107325fc"
integrity sha512-ndEo1xvnYeHxm7I/5sF6tBvnsA4Tdi3zj1keRKRs12SP+2ye2A27NDJ1B6PqkfMbGAcT+mqQVqbZRIrhfOp5PQ==
@@ -208,6 +208,11 @@
"@types/node" "*"
"@types/responselike" "*"
+"@types/caseless@*":
+ version "0.12.2"
+ resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8"
+ integrity sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==
+
"@types/chrome@^0.0.126":
version "0.0.126"
resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.126.tgz#f9f3436712f0c7c12ea9798abc9b95575ad7b23a"
@@ -303,14 +308,14 @@
form-data "^3.0.0"
"@types/node@*":
- version "14.14.9"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.9.tgz#04afc9a25c6ff93da14deabd65dc44485b53c8d6"
- integrity sha512-JsoLXFppG62tWTklIoO4knA+oDTYsmqWxHRvd4lpmfQRNhX6osheUOWETP2jMoV/2bEHuMra8Pp3Dmo/stBFcw==
+ version "14.14.10"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.10.tgz#5958a82e41863cfc71f2307b3748e3491ba03785"
+ integrity sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==
"@types/node@^12.0.12", "@types/node@^12.12.47":
- version "12.19.6"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.6.tgz#fbf249fa46487dd8c7386d785231368b92a33a53"
- integrity sha512-U2VopDdmBoYBmtm8Rz340mvvSz34VgX/K9+XCuckvcLGMkt3rbMX8soqFOikIPlPBc5lmw8By9NUK7bEFSBFlQ==
+ version "12.19.7"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.7.tgz#cf8b6ac088dd9182ac9a1d765f787a8d12490c04"
+ integrity sha512-zvjOU1g4CpPilbTDUATnZCUb/6lARMRAqzT7ILwl1P3YvU2leEcZ2+fw9+Jrw/paXB1CgQyXTrN4hWDtqT9O2A==
"@types/q@^1.5.1":
version "1.5.4"
@@ -322,6 +327,24 @@
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b"
integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==
+"@types/request-promise@^4.1.46":
+ version "4.1.46"
+ resolved "https://registry.yarnpkg.com/@types/request-promise/-/request-promise-4.1.46.tgz#37df6efae984316dfbfbbe8fcda37f3ba52822f2"
+ integrity sha512-3Thpj2Va5m0ji3spaCk8YKrjkZyZc6RqUVOphA0n/Xet66AW/AiOAs5vfXhQIL5NmkaO7Jnun7Nl9NEjJ2zBaw==
+ dependencies:
+ "@types/bluebird" "*"
+ "@types/request" "*"
+
+"@types/request@*":
+ version "2.48.5"
+ resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.5.tgz#019b8536b402069f6d11bee1b2c03e7f232937a0"
+ integrity sha512-/LO7xRVnL3DxJ1WkPGDQrp4VTV1reX9RkC85mJ+Qzykj2Bdw+mG15aAfDahc76HtknjzE16SX/Yddn6MxVbmGQ==
+ dependencies:
+ "@types/caseless" "*"
+ "@types/node" "*"
+ "@types/tough-cookie" "*"
+ form-data "^2.5.0"
+
"@types/responselike@*", "@types/responselike@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29"
@@ -334,6 +357,11 @@
resolved "https://registry.yarnpkg.com/@types/sortablejs/-/sortablejs-1.10.6.tgz#98725ae08f1dfe28b8da0fdf302c417f5ff043c0"
integrity sha512-QRz8Z+uw2Y4Gwrtxw8hD782zzuxxugdcq8X/FkPsXUa1kfslhGzy13+4HugO9FXNo+jlWVcE6DYmmegniIQ30A==
+"@types/tough-cookie@*":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.0.tgz#fef1904e4668b6e5ecee60c52cc6a078ffa6697d"
+ integrity sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==
+
"@types/yauzl@^2.9.1":
version "2.9.1"
resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.1.tgz#d10f69f9f522eef3cf98e30afb684a1e1ec923af"
@@ -1692,9 +1720,9 @@ caniuse-api@^3.0.0:
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001157:
- version "1.0.30001159"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz#bebde28f893fa9594dadcaa7d6b8e2aa0299df20"
- integrity sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA==
+ version "1.0.30001161"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001161.tgz#64f7ffe79ee780b8c92843ff34feb36cea4651e0"
+ integrity sha512-JharrCDxOqPLBULF9/SPa6yMcBRTjZARJ6sc3cuKrPfyIk64JN6kuMINWqA99Xc8uElMFcROliwtz0n9pYej+g==
caseless@~0.12.0:
version "0.12.0"
@@ -2039,14 +2067,14 @@ copy-webpack-plugin@^6.2.1:
webpack-sources "^1.4.3"
core-js@^2.4.0, core-js@^2.5.0:
- version "2.6.11"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
- integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
+ version "2.6.12"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
+ integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
core-js@^3.6.5:
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.7.0.tgz#b0a761a02488577afbf97179e4681bf49568520f"
- integrity sha512-NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA==
+ version "3.8.0"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.0.tgz#0fc2d4941cadf80538b030648bb64d230b4da0ce"
+ integrity sha512-W2VYNB0nwQQE7tKS7HzXd7r2y/y2SVJl4ga6oH/dnaLFzM0o2lB2P3zCkWj5Wc/zyMYjtgd5Hmhk0ObkQFZOIA==
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
@@ -2154,10 +2182,10 @@ css-tree@1.0.0-alpha.37:
mdn-data "2.0.4"
source-map "^0.6.1"
-css-tree@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.1.tgz#30b8c0161d9fb4e9e2141d762589b6ec2faebd2e"
- integrity sha512-NVN42M2fjszcUNpDbdkvutgQSlFYsr1z7kqeuCagHnNLBfYor6uP1WL1KrkmdYZ5Y1vTBCIOI/C/+8T98fJ71w==
+css-tree@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.2.tgz#9ae393b5dafd7dae8a622475caec78d3d8fbd7b5"
+ integrity sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==
dependencies:
mdn-data "2.0.14"
source-map "^0.6.1"
@@ -2241,11 +2269,11 @@ cssnano@^4.1.10:
postcss "^7.0.0"
csso@^4.0.2:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/csso/-/csso-4.1.1.tgz#e0cb02d6eb3af1df719222048e4359efd662af13"
- integrity sha512-Rvq+e1e0TFB8E8X+8MQjHSY6vtol45s5gxtLI/018UsAn2IBMmwNEZRM/h+HVnAJRHjasLIKKUO3uvoMM28LvA==
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529"
+ integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==
dependencies:
- css-tree "^1.0.0"
+ css-tree "^1.1.2"
cuint@^0.2.2:
version "0.2.2"
@@ -2576,9 +2604,9 @@ electron-squirrel-startup@^1.0.0:
debug "^2.2.0"
electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.591:
- version "1.3.603"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.603.tgz#1b71bec27fb940eccd79245f6824c63d5f7e8abf"
- integrity sha512-J8OHxOeJkoSLgBXfV9BHgKccgfLMHh+CoeRo6wJsi6m0k3otaxS/5vrHpMNSEYY4MISwewqanPOuhAtuE8riQQ==
+ version "1.3.608"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.608.tgz#e1f962beeaa008698fb89b7e5387535251610eb4"
+ integrity sha512-dZsqCe7WgOcFse1QxIrm3eR+ebF13f0HfzM5QW9WtP1XVsQVrl/6R3DjexfVdupfwaS6znEDcP0NTBlJii7sOA==
electron-winstaller@^4.0.1:
version "4.0.1"
@@ -3138,6 +3166,15 @@ forever-agent@~0.6.1:
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+form-data@^2.5.0:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4"
+ integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
form-data@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682"
@@ -3849,9 +3886,9 @@ is-color-stop@^1.0.0:
rgba-regex "^1.0.0"
is-core-module@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.1.0.tgz#a4cc031d9b1aca63eecbd18a650e13cb4eeab946"
- integrity sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a"
+ integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==
dependencies:
has "^1.0.3"
@@ -4381,7 +4418,7 @@ lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
-lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.10:
+lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.10:
version "4.17.20"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
@@ -5066,13 +5103,13 @@ object.pick@^1.3.0:
isobject "^3.0.1"
object.values@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e"
- integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731"
+ integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==
dependencies:
+ call-bind "^1.0.0"
define-properties "^1.1.3"
- es-abstract "^1.17.0-next.1"
- function-bind "^1.1.1"
+ es-abstract "^1.18.0-next.1"
has "^1.0.3"
on-finished@~2.3.0:
@@ -5166,11 +5203,11 @@ p-limit@^2.0.0, p-limit@^2.2.0:
p-try "^2.0.0"
p-limit@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe"
- integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
dependencies:
- p-try "^2.0.0"
+ yocto-queue "^0.1.0"
p-locate@^2.0.0:
version "2.0.0"
@@ -5708,9 +5745,9 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27:
supports-color "^6.1.0"
postcss@^8.1.4:
- version "8.1.9"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.9.tgz#20ff4b598a6f5015c5f7fe524b8ed5313d7ecade"
- integrity sha512-oWuBpEl1meaMKkQXn0ic78TUrgsMvrAZLE/6ZY0H3LTteq2O3L8PGWwMbPLctpksTJIHjQeossMUMNQW7qRIHQ==
+ version "8.1.10"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.10.tgz#129834f94c720554d2cfdaeb27d5542ac4a026ea"
+ integrity sha512-iBXEV5VTTYaRRdxiFYzTtuv2lGMQBExqkZKSzkJe+Fl6rvQrA/49UVGKqB+LG54hpW/TtDBMGds8j33GFNW7pg==
dependencies:
colorette "^1.2.1"
nanoid "^3.1.18"
@@ -6028,6 +6065,23 @@ repeating@^2.0.0:
dependencies:
is-finite "^1.0.0"
+request-promise-core@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f"
+ integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==
+ dependencies:
+ lodash "^4.17.19"
+
+request-promise@^4.2.6:
+ version "4.2.6"
+ resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-4.2.6.tgz#7e7e5b9578630e6f598e3813c0f8eb342a27f0a2"
+ integrity sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==
+ dependencies:
+ bluebird "^3.5.0"
+ request-promise-core "1.1.4"
+ stealthy-require "^1.1.1"
+ tough-cookie "^2.3.3"
+
request@^2.87.0, request@^2.88.0, request@^2.88.2:
version "2.88.2"
resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
@@ -6625,6 +6679,11 @@ stdout-stream@^1.4.0:
dependencies:
readable-stream "^2.0.1"
+stealthy-require@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+ integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
+
stream-buffers@~2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4"
@@ -6666,20 +6725,20 @@ string-width@^4.1.0, string-width@^4.2.0:
strip-ansi "^6.0.0"
string.prototype.trimend@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz#6ddd9a8796bc714b489a3ae22246a208f37bfa46"
- integrity sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b"
+ integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==
dependencies:
+ call-bind "^1.0.0"
define-properties "^1.1.3"
- es-abstract "^1.18.0-next.1"
string.prototype.trimstart@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz#22d45da81015309cd0cdd79787e8919fc5c613e7"
- integrity sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa"
+ integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==
dependencies:
+ call-bind "^1.0.0"
define-properties "^1.1.3"
- es-abstract "^1.18.0-next.1"
string_decoder@^1.1.1:
version "1.3.0"
@@ -6833,7 +6892,7 @@ tapable@^1.0.0:
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
-tapable@^2.0.0:
+tapable@^2.0.0, tapable@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.1.1.tgz#b01cc1902d42a7bb30514e320ce21c456f72fd3f"
integrity sha512-Wib1S8m2wdpLbmQz0RBEVosIyvb/ykfKXf3ZIDqvWoMg/zTNm6G/tDSuUM61J1kNCDXWJrLHGSFeMhAG+gAGpQ==
@@ -6932,17 +6991,17 @@ timsort@^0.3.0:
resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
-tldts-core@^5.6.72:
- version "5.6.72"
- resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-5.6.72.tgz#195332f89bffb9af352aad5b2dbbdeddbf2c0a6a"
- integrity sha512-/GyG6M3XCP1VPWhROjOgWeEMATWWCjoy1Qx3LSJCzegefYDtQuCiNO6ZU/Cnil5a0NWGJ4Gi38BNbiEOGFqEHw==
+tldts-core@^5.6.73:
+ version "5.6.73"
+ resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-5.6.73.tgz#0bc71f4b93f6e7d53ba8d4ec5314aebccf0de922"
+ integrity sha512-fNLyl2Heuo1mvs/QYhUMrteLxUJGkR/hOlOF1M3ZXiB6Na8AfPrkJi/jUr697400Ob7zhmD/rtKwJcix5As4Pg==
tldts-experimental@^5.6.21:
- version "5.6.72"
- resolved "https://registry.yarnpkg.com/tldts-experimental/-/tldts-experimental-5.6.72.tgz#87b5f9f52b3a274c3f366e9d05cb11b4a825ba53"
- integrity sha512-wD0gEFwmdZ/9a8eUnF644hsdZt8iVQ7Txa6gVg9NOD7eL+vk7Uc28Ty/GaNW2h30sMG4rPvLs/6s/eGaABI6Bw==
+ version "5.6.73"
+ resolved "https://registry.yarnpkg.com/tldts-experimental/-/tldts-experimental-5.6.73.tgz#8efb8ef6d0c1bf75d22bdb6e4116eb0774e19b8e"
+ integrity sha512-rAGLu2Tjpl2sxrzgjyXQIFYp3TA0ucqO3zWqJfbPQJd9TR9j4kgZQyLfZrUVfNzIsXJ5OMFeG1Wz72Y38X1Vuw==
dependencies:
- tldts-core "^5.6.72"
+ tldts-core "^5.6.73"
tmp-promise@^1.0.5:
version "1.1.0"
@@ -7018,7 +7077,7 @@ toidentifier@1.0.0:
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
-tough-cookie@~2.5.0:
+tough-cookie@^2.3.3, tough-cookie@~2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
@@ -7376,9 +7435,9 @@ webpack-sources@^2.1.1:
source-map "^0.6.1"
webpack@^5.3.2:
- version "5.6.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.6.0.tgz#282d10434c403b070ed91d459b385e873b51a07d"
- integrity sha512-SIeFuBhuheKElRbd84O35UhKc0nxlgSwtzm2ksZ0BVhRJqxVJxEguT/pYhfiR0le/pxTa1VsCp7EOYyTsa6XOA==
+ version "5.8.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.8.0.tgz#65f00a181708279ff982c2d7338e1dd5505364c4"
+ integrity sha512-X2yosPiHip3L0TE+ylruzrOqSgEgsdGyBOGFWKYChcwlKChaw9VodZIUovG1oo7s0ss6e3ZxBMn9tXR+nkPThA==
dependencies:
"@types/eslint-scope" "^3.7.0"
"@types/estree" "^0.0.45"
@@ -7400,7 +7459,7 @@ webpack@^5.3.2:
neo-async "^2.6.2"
pkg-dir "^4.2.0"
schema-utils "^3.0.0"
- tapable "^2.0.0"
+ tapable "^2.1.1"
terser-webpack-plugin "^5.0.3"
watchpack "^2.0.0"
webpack-sources "^2.1.1"
@@ -7582,3 +7641,8 @@ yeast@0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==