From ddaa21b823d8cc015e1a525e2934175092111600 Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Sun, 14 Jun 2020 15:05:19 +0200 Subject: [PATCH 01/12] Remove unused argument from yarn dev command --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 46718e3..4e6ce8f 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "test": "jest --verbose --runInBand", "dist-webpack": "webpack --mode production", "dist": "tsc && npm run dist-webpack", - "dev": "concurrently -k -n \"Typescript,Node,Webpack,Maildev\" -p \"[{name}]\" -c \"blue,green,red,yellow\" \"tsc --watch\" \"nodemon dist/main.js\" \"webpack --watch --mode development\" \"maildev\"", + "dev": "concurrently -k -n \"Typescript,Node,Webpack,Maildev\" -p \"[{name}]\" -c \"blue,green,red,yellow\" \"tsc --watch\" \"nodemon\" \"webpack --watch --mode development\" \"maildev\"", "start": "yarn dist && node dist/main.js" }, "devDependencies": { From 194d0c482f111db0325892c229f7a4e116a8cdb0 Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Sun, 14 Jun 2020 15:18:18 +0200 Subject: [PATCH 02/12] Always shift file input label --- assets/sass/layout.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/sass/layout.scss b/assets/sass/layout.scss index f71a87b..3e0d431 100644 --- a/assets/sass/layout.scss +++ b/assets/sass/layout.scss @@ -194,7 +194,7 @@ form { border-radius: 5px; font-size: 16px; - &:focus, &:not([value=""]) { + &:focus, &:not([value=""]), &[type="file"] { ~ label { top: 8px; font-size: 14px; From 243f87b0bfddaec2b7c580962e813a6c5e56a74d Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Sun, 14 Jun 2020 17:34:01 +0200 Subject: [PATCH 03/12] Add copyable text --- assets/js/app.js | 1 + assets/js/copyable_text.js | 12 ++++++++++++ assets/sass/layout.scss | 34 +++++++++++++++++++++++++++++++++- 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 assets/js/copyable_text.js diff --git a/assets/js/app.js b/assets/js/app.js index ce75569..2c4466c 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -1,6 +1,7 @@ import './external_links'; import './message_icons'; import './forms'; +import './copyable_text'; import '../sass/app.scss'; diff --git a/assets/js/copyable_text.js b/assets/js/copyable_text.js new file mode 100644 index 0000000..6501a1a --- /dev/null +++ b/assets/js/copyable_text.js @@ -0,0 +1,12 @@ +document.addEventListener('DOMContentLoaded', () => { + document.querySelectorAll('.copyable-text').forEach(el => { + const contentEl = el.querySelector('.content'); + contentEl.addEventListener('click', () => { + window.getSelection().selectAllChildren(contentEl); + }); + el.querySelector('.copy-button').addEventListener('click', () => { + window.getSelection().selectAllChildren(contentEl); + document.execCommand('copy'); + }); + }); +}); \ No newline at end of file diff --git a/assets/sass/layout.scss b/assets/sass/layout.scss index 3e0d431..b1b1b95 100644 --- a/assets/sass/layout.scss +++ b/assets/sass/layout.scss @@ -540,4 +540,36 @@ button, .button { margin: 8px; } } -} \ No newline at end of file +} + +.copyable-text { + display: flex; + flex-direction: row; + margin: 8px; + + background-color: darken($backgroundColor, 2%); + border-radius: 5px; + overflow: hidden; + + .title { + padding: 8px; + } + + .content { + flex-grow: 1; + overflow: hidden; + white-space: nowrap; + padding: 8px; + } + + .copy-button { + margin: 0; + padding: 0; + border-radius: 0; + + .feather { + --icon-size: 20px; + margin: 8px; + } + } +} From e95b427512f8e298a77ab56ef28aa65400f6ff81 Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Sun, 14 Jun 2020 21:51:26 +0200 Subject: [PATCH 04/12] Add systemd unit file --- app.service | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 app.service diff --git a/app.service b/app.service new file mode 100644 index 0000000..32f2b99 --- /dev/null +++ b/app.service @@ -0,0 +1,16 @@ +[Unit] +Description=WMS website +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +User=wms +Group=wms +WorkingDirectory=/home/wms/live +Restart=on-success +Environment=NODE_ENV=production +ExecStart=/bin/node . + +[Install] +WantedBy=multi-user.target From c8a0f4b3a24b12347ed5a645ae87c5cec75f9d71 Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Mon, 15 Jun 2020 12:09:08 +0200 Subject: [PATCH 05/12] Add window.applyFormMessages --- assets/js/forms.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/assets/js/forms.js b/assets/js/forms.js index 4161467..dd3f184 100644 --- a/assets/js/forms.js +++ b/assets/js/forms.js @@ -8,4 +8,22 @@ document.addEventListener('DOMContentLoaded', () => { }); } }); -}); \ No newline at end of file +}); + +window.applyFormMessages = function (formElement, messages) { + for (const fieldName of Object.keys(messages)) { + const field = formElement.querySelector('#field-' + fieldName); + let parent = field.parentElement; + while (parent && !parent.classList.contains('form-field')) parent = parent.parentElement; + + if (field) { + let err = field.querySelector('.error'); + if (!err) { + err = document.createElement('div'); + err.classList.add('error'); + parent.insertBefore(err, parent.querySelector('.hint') || parent); + } + err.innerHTML = ` ${messages[fieldName].message}`; + } + } +} \ No newline at end of file From dd7ea780ee3ce7e0d1f1e6c072ac8cae91fb8770 Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Mon, 15 Jun 2020 12:09:33 +0200 Subject: [PATCH 06/12] Add .hidden and .progress-bar --- assets/sass/layout.scss | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/assets/sass/layout.scss b/assets/sass/layout.scss index b1b1b95..9cc7bfd 100644 --- a/assets/sass/layout.scss +++ b/assets/sass/layout.scss @@ -573,3 +573,34 @@ button, .button { } } } + +.hidden { + display: none; +} + +.progress-bar { + position: relative; + display: block; + margin: 8px; + padding: 4px; + background: #fff1; + border-radius: 5px; + overflow: hidden; + text-align: center; + + .content { + position: relative; + } + + &::before { + content: ""; + display: block; + position: absolute; + left: 0; + top: 0; + width: var(--progress); + height: 100%; + + background: $secondary; + } +} From aaf03a7ca7c7f5000e8fac25ec88088776723056 Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Sat, 27 Jun 2020 14:49:03 +0200 Subject: [PATCH 07/12] view: fix file-upload title --- views/file-upload.njk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/file-upload.njk b/views/file-upload.njk index ad798ce..396103f 100644 --- a/views/file-upload.njk +++ b/views/file-upload.njk @@ -1,6 +1,6 @@ {% extends 'layouts/base.njk' %} -{% set title = 'ily.li - File manager' %} +{% set title = 'ily.li - File upload' %} {% block scripts %} From 6f7b56d10450fd0b4d5dc1febb68de6ab8b1d4b7 Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Sat, 27 Jun 2020 16:31:36 +0200 Subject: [PATCH 08/12] Add basic account approval --- assets/sass/layout.scss | 8 + config/default.ts | 1 + config/production.ts | 1 + src/App.ts | 6 +- src/Mails.ts | 12 + src/controllers/BackendController.ts | 69 ++ src/controllers/FileController.ts | 4 +- src/controllers/MagicLinkController.ts | 12 +- src/models/AuthToken.ts | 25 +- src/models/FileModel.ts | 21 +- views/backend/accounts_approval.njk | 41 + views/backend/index.njk | 21 + views/layouts/base.njk | 7 +- views/mails/account_review_notice.mjml.njk | 41 + views/mails/pending_account_review.mjml.njk | 66 ++ yarn.lock | 797 +++++++++----------- 16 files changed, 637 insertions(+), 495 deletions(-) create mode 100644 src/Mails.ts create mode 100644 src/controllers/BackendController.ts create mode 100644 views/backend/accounts_approval.njk create mode 100644 views/backend/index.njk create mode 100644 views/mails/account_review_notice.mjml.njk create mode 100644 views/mails/pending_account_review.mjml.njk diff --git a/assets/sass/layout.scss b/assets/sass/layout.scss index 9cc7bfd..a3bbca4 100644 --- a/assets/sass/layout.scss +++ b/assets/sass/layout.scss @@ -407,6 +407,14 @@ button, .button { thead tr:hover { background-color: transparent; } + + th.shrink-col { + width: 0; + } +} + +.max-content { + width: max-content; } // --- diff --git a/config/default.ts b/config/default.ts index 31e5ddf..29b76fc 100644 --- a/config/default.ts +++ b/config/default.ts @@ -18,4 +18,5 @@ export default Object.assign(require("wms-core/config/default").default, { newlyGeneratedSlugSize: 3, default_file_ttl: 30, // 30 seconds max_upload_size: 1, // MB + approval_mode: false, }); \ No newline at end of file diff --git a/config/production.ts b/config/production.ts index 1c22849..fa2fb94 100644 --- a/config/production.ts +++ b/config/production.ts @@ -16,4 +16,5 @@ export default Object.assign(require("wms-core/config/production").default, { newlyGeneratedSlugSize: 5, default_file_ttl: 30 * 24 * 3600, // 30 days max_upload_size: 8192, // MB + approval_mode: true, }); \ No newline at end of file diff --git a/src/App.ts b/src/App.ts index 3044be0..68c7770 100644 --- a/src/App.ts +++ b/src/App.ts @@ -34,6 +34,8 @@ import {MagicLinkActionType} from "./controllers/MagicLinkActionType"; import {Request} from "express"; import CreateFilesTable from "./migrations/CreateFilesTable"; import IncreaseFilesSizeField from "./migrations/IncreaseFilesSizeField"; +import AddApprovedFieldToUsersTable from "wms-core/auth/migrations/AddApprovedFieldToUsersTable"; +import BackendController from "./controllers/BackendController"; export default class App extends Application { private readonly port: number; @@ -53,6 +55,7 @@ export default class App extends Application { CreateAuthTokensTable, CreateFilesTable, IncreaseFilesSizeField, + AddApprovedFieldToUsersTable, ]; } @@ -96,7 +99,7 @@ export default class App extends Application { public async getProofForRequest(req: Request): Promise { const authorization = req.header('Authorization'); if (authorization) { - const token = await AuthToken.getBySecret(authorization); + const token = await AuthToken.select().where('secret', authorization).first(); if (token) { token.use(); await token.save(); @@ -128,6 +131,7 @@ export default class App extends Application { // Priority this.use(new AuthController()); this.use(new MagicLinkController(this.magicLinkWebSocketListener!)); + this.use(new BackendController()); // Core functionality this.use(new MailController()); diff --git a/src/Mails.ts b/src/Mails.ts new file mode 100644 index 0000000..5821947 --- /dev/null +++ b/src/Mails.ts @@ -0,0 +1,12 @@ +import {MailTemplate} from "wms-core/Mail"; +import config from "config"; + +export const ACCOUNT_REVIEW_NOTICE_MAIL_TEMPLATE: MailTemplate = new MailTemplate( + 'account_review_notice', + data => `Your account was ${data.approved ? 'approved' : 'rejected'}.` +); + +export const PENDING_ACCOUNT_REVIEW_MAIL_TEMPLATE: MailTemplate = new MailTemplate( + 'pending_account_review', + () => 'A new account is pending review on ' + config.get('domain'), +); \ No newline at end of file diff --git a/src/controllers/BackendController.ts b/src/controllers/BackendController.ts new file mode 100644 index 0000000..119bb8d --- /dev/null +++ b/src/controllers/BackendController.ts @@ -0,0 +1,69 @@ +import Controller from "wms-core/Controller"; +import {REQUIRE_ADMIN_MIDDLEWARE, REQUIRE_AUTH_MIDDLEWARE} from "wms-core/auth/AuthComponent"; +import {Request, Response} from "express"; +import User from "wms-core/auth/models/User"; +import {NotFoundHttpError} from "wms-core/HttpError"; +import {ACCOUNT_REVIEW_NOTICE_MAIL_TEMPLATE} from "../Mails"; +import Mail from "wms-core/Mail"; +import config from "config"; + +export default class BackendController extends Controller { + getRoutesPrefix(): string { + return '/backend'; + } + + routes(): void { + this.get('/', this.getIndex, 'backend', REQUIRE_AUTH_MIDDLEWARE, REQUIRE_ADMIN_MIDDLEWARE); + if (User.isApprovalMode()) { + this.get('/accounts-approval', this.getAccountApproval, 'accounts-approval', REQUIRE_AUTH_MIDDLEWARE, REQUIRE_ADMIN_MIDDLEWARE); + this.get('/accounts-approval/approve/:id', this.getApproveAccount, 'approve-account', REQUIRE_AUTH_MIDDLEWARE, REQUIRE_ADMIN_MIDDLEWARE); + this.get('/accounts-approval/reject/:id', this.getRejectAccount, 'reject-account', REQUIRE_AUTH_MIDDLEWARE, REQUIRE_ADMIN_MIDDLEWARE); + } + } + + public async getIndex(req: Request, res: Response): Promise { + res.render('backend/index', { + approval_mode: User.isApprovalMode(), + accounts_to_approve: User.isApprovalMode() ? await User.select().count() : 0, + }); + } + + public async getAccountApproval(req: Request, res: Response): Promise { + const accounts = await User.select().where('approved', 0).with('mainEmail').get(); + res.render('backend/accounts_approval', { + accounts: User.isApprovalMode() ? accounts : 0, + }); + } + + public async getApproveAccount(req: Request, res: Response): Promise { + const account = await User.select().where('id', req.params.id).with('mainEmail').first(); + if (!account) throw new NotFoundHttpError('User', req.url); + const email = await account.mainEmail.get(); + + account.approved = true; + await account.save(); + + await new Mail(ACCOUNT_REVIEW_NOTICE_MAIL_TEMPLATE, { + approved: true, + link: config.get('base_url') + Controller.route('auth'), + }).send(email!.email!); + + req.flash('success', `Account successfully approved.`); + res.redirectBack(Controller.route('accounts-approval')); + } + + public async getRejectAccount(req: Request, res: Response): Promise { + const account = await User.select().where('id', req.params.id).with('mainEmail').first(); + if (!account) throw new NotFoundHttpError('User', req.url); + const email = await account.mainEmail.get(); + + await account.delete(); + + await new Mail(ACCOUNT_REVIEW_NOTICE_MAIL_TEMPLATE, { + approved: false, + }).send(email!.email!); + + req.flash('success', `Account successfully deleted.`); + res.redirectBack(Controller.route('accounts-approval')); + } +} \ No newline at end of file diff --git a/src/controllers/FileController.ts b/src/controllers/FileController.ts index 0d64591..6f6a9c3 100644 --- a/src/controllers/FileController.ts +++ b/src/controllers/FileController.ts @@ -30,7 +30,7 @@ export default class FileController extends Controller { protected async getFileUploader(req: Request, res: Response): Promise { res.render('file-upload', { max_upload_size: config.get('max_upload_size'), - auth_tokens: await AuthToken.getForUser(req.models.user!.id!), + auth_tokens: await AuthToken.select().where('user_id', req.models.user!.id!), }); } @@ -54,7 +54,7 @@ export default class FileController extends Controller { const id = req.params.id; if (!id) throw new BadRequestError('Cannot revoke token without an id.', 'Please provide an id.', req.url); - const authToken = await AuthToken.getById(`${id}`); + const authToken = await AuthToken.getById(parseInt(id)); if (!authToken) throw new NotFoundHttpError('Auth token', req.url); if (!authToken.canDelete(req.models.user!.id!)) throw new ForbiddenHttpError('auth token', req.url); diff --git a/src/controllers/MagicLinkController.ts b/src/controllers/MagicLinkController.ts index 9735900..d50070d 100644 --- a/src/controllers/MagicLinkController.ts +++ b/src/controllers/MagicLinkController.ts @@ -15,12 +15,14 @@ export default class MagicLinkController extends _MagicLinkController { switch (magicLink.getActionType()) { case MagicLinkActionType.LOGIN: case MagicLinkActionType.REGISTER: - await AuthController.checkAndAuth(req, magicLink); + await AuthController.checkAndAuth(req, res, magicLink); - // Auth success - const user = await req.authGuard.getUserForSession(req.session!); - req.flash('success', `Authentication success. Welcome, ${user?.name}!`); - res.redirect(Controller.route('home')); + if (!res.headersSent) { + // Auth success + const user = await req.authGuard.getUserForSession(req.session!); + req.flash('success', `Authentication success. Welcome, ${user?.name}!`); + res.redirect(Controller.route('home')); + } break; } } diff --git a/src/models/AuthToken.ts b/src/models/AuthToken.ts index 958c5f8..3732c21 100644 --- a/src/models/AuthToken.ts +++ b/src/models/AuthToken.ts @@ -6,15 +6,6 @@ import Validator from "wms-core/db/Validator"; import {cryptoRandomDictionary} from "wms-core/Utils"; export default class AuthToken extends Model implements AuthProof { - public static async getBySecret(secret: string): Promise { - const models = await this.models(this.select().where('secret', secret).first()); - return models.length > 0 ? models[0] : null; - } - - public static async getForUser(user_id: number): Promise { - return await this.models(this.select().where('user_id', user_id)); - } - protected readonly user_id!: number; protected readonly secret!: string; protected created_at?: Date; @@ -30,12 +21,12 @@ export default class AuthToken extends Model implements AuthProof { } - protected defineProperties() { - this.defineProperty('user_id', new Validator().defined().exists(User, 'id')); - this.defineProperty('secret', new Validator().defined().between(32, 64)); - this.defineProperty('created_at', new Validator()); - this.defineProperty('used_at', new Validator()); - this.defineProperty('ttl', new Validator().defined().min(1).max(5 * 365 * 24 * 3600)); // max 5 years + protected init() { + this.addProperty('user_id', new Validator().defined().exists(User, 'id')); + this.addProperty('secret', new Validator().defined().between(32, 64)); + this.addProperty('created_at', new Validator()); + this.addProperty('used_at', new Validator()); + this.addProperty('ttl', new Validator().defined().min(1).max(5 * 365 * 24 * 3600)); // max 5 years } public use() { @@ -53,13 +44,13 @@ export default class AuthToken extends Model implements AuthProof { } public async getEmail(): Promise { - let userEmail = await UserEmail.getMainFromUser(this.user_id); + let userEmail = await UserEmail.select().where('user_id', this.user_id).first(); if (!userEmail) throw new Error("Cannot find main user email for user " + this.user_id); return userEmail.email; } public async getUser(): Promise { - return await User.getById(`${this.user_id}`); + return await User.getById(this.user_id); } public async isAuthorized(): Promise { diff --git a/src/models/FileModel.ts b/src/models/FileModel.ts index 40e1ff0..0ce748e 100644 --- a/src/models/FileModel.ts +++ b/src/models/FileModel.ts @@ -11,8 +11,7 @@ export default class FileModel extends Model { } public static async getBySlug(slug: string): Promise { - const models = await this.models(this.select().where('slug', slug).first()); - return models.length > 0 ? models[0] : null; + return await this.select().where('slug', slug).first(); } public static async paginateForUser(req: Request, perPage: number, user_id: number): Promise { @@ -28,15 +27,15 @@ export default class FileModel extends Model { public created_at?: Date; public readonly ttl!: number; - protected defineProperties() { - this.defineProperty('user_id', new Validator().defined().exists(User, 'id')); - this.defineProperty('slug', new Validator().defined().minLength(1).maxLength(259).unique(this, 'slug')); - this.defineProperty('real_name', new Validator().defined().minLength(1).maxLength(259)); - this.defineProperty('storage_type', new Validator().defined().maxLength(64)); - this.defineProperty('storage_path', new Validator().defined().maxLength(1745)); - this.defineProperty('size', new Validator().defined().min(0)); - this.defineProperty('created_at', new Validator()); - this.defineProperty('ttl', new Validator().defined().min(0).max(4294967295)); + protected init() { + this.addProperty('user_id', new Validator().defined().exists(User, 'id')); + this.addProperty('slug', new Validator().defined().minLength(1).maxLength(259).unique(this, 'slug')); + this.addProperty('real_name', new Validator().defined().minLength(1).maxLength(259)); + this.addProperty('storage_type', new Validator().defined().maxLength(64)); + this.addProperty('storage_path', new Validator().defined().maxLength(1745)); + this.addProperty('size', new Validator().defined().min(0)); + this.addProperty('created_at', new Validator()); + this.addProperty('ttl', new Validator().defined().min(0).max(4294967295)); } public getURL(): string { diff --git a/views/backend/accounts_approval.njk b/views/backend/accounts_approval.njk new file mode 100644 index 0000000..472e35c --- /dev/null +++ b/views/backend/accounts_approval.njk @@ -0,0 +1,41 @@ +{% extends 'layouts/base.njk' %} + +{% set title = 'ily.li - Review accounts' %} + +{% block body %} +

Accounts pending review

+ +
+ + + + + + + + + + + + {% for user in accounts %} + + + + + + + + {% endfor %} + +
#NameMain emailRegistered atAction
{{ user.id }}{{ user.name }}{{ user.mainEmail.getOrFail().email }}{{ user.created_at.toISOString() }} + +
+
+{% endblock %} \ No newline at end of file diff --git a/views/backend/index.njk b/views/backend/index.njk new file mode 100644 index 0000000..3a100d8 --- /dev/null +++ b/views/backend/index.njk @@ -0,0 +1,21 @@ +{% extends 'layouts/base.njk' %} + +{% set title = 'ily.li - Backend' %} + +{% block body %} +

App administration

+ +
+
+ +
+
+{% endblock %} \ No newline at end of file diff --git a/views/layouts/base.njk b/views/layouts/base.njk index acc1fd6..c540b0b 100644 --- a/views/layouts/base.njk +++ b/views/layouts/base.njk @@ -17,8 +17,11 @@
  • About
  • {% if user %} -
  • File uploader
  • -
  • File manager
  • +
  • File uploader
  • +
  • File manager
  • + {% if user.is_admin %} +
  • Backend
  • + {% endif %}
  • Logout
  • {% else %}
  • Login / Register
  • diff --git a/views/mails/account_review_notice.mjml.njk b/views/mails/account_review_notice.mjml.njk new file mode 100644 index 0000000..de5b77f --- /dev/null +++ b/views/mails/account_review_notice.mjml.njk @@ -0,0 +1,41 @@ +{% extends './base_layout.mjml.njk' %} + +{% block body %} + + + + {% if approved %} + Your registration was approved! + {% else %} + Sorry, your registration was rejected. + {% endif %} + + + {% if approved %} + An administrator approved your registration. You can now log in to your account. + {% else %} + Your registration was rejected and your account was deleted from our database. + If you believe that this is an error, please contact us via email. + {% endif %} + + + {% if approved %} + Login + {% endif %} + + +{% endblock %} + +{% block text %} + {% if approved %} + Hi + Your registration was approved! + + You can now log in to your account by follwing this link: {{ link|safe }} + {% else %} + Hi + Sorry, your registration was rejected. Your account was deleted from our database. + + If you believe that this is an error, please contact us via email. + {% endif %} +{% endblock %} \ No newline at end of file diff --git a/views/mails/pending_account_review.mjml.njk b/views/mails/pending_account_review.mjml.njk new file mode 100644 index 0000000..5bb0fba --- /dev/null +++ b/views/mails/pending_account_review.mjml.njk @@ -0,0 +1,66 @@ +{% extends './base_layout.mjml.njk' %} + +{% block body %} + + + + {% if type == 'register' %} + Register an account on (app) + {% else %} + Log in to (app) + {% endif %} + + + {% if type == 'register' %} + Someone has requested an account registration for {{ mail_to }}. If it was not you, + please ignore this message. + {% else %} + Someone is attempting to log in to your account {{ mail_to }}. + {% endif %} + + + {% if type == 'register' %} + Finalize my account registration + {% else %} + If it is not you, DO NOT CLICK ON THIS BUTTON. + {% endif %} + + + + {% if type == 'login' %} + + + + IP: {{ ip }} + + + Location: {{ geo }} + + + + + Authorize log in + + + + {% endif %} +{% endblock %} + +{% block text %} + {% if type == 'register' %} + Hi! + Someone requested an account registration for {{ mail_to }}. If it was not you, + please ignore this message. + + To finalize your account registration, please follow this link: {{ link|safe }} + {% else %} + Hi! + Someone is attempting to log in to your account {{ mail_to }}. + + If it is not you, DO NOT FOLLOW THIS LINK. + + IP: {{ ip }} + Location: {{ geo }} + To authorize this log in, please follow this link: {{ link|safe }} + {% endif %} +{% endblock %} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index b17a483..be1e917 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,35 +2,35 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fcode-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff" - integrity sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fcode-frame/-/code-frame-7.10.3.tgz#324bcfd8d35cd3d47dae18cde63d752086435e9a" + integrity sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg== dependencies: - "@babel/highlight" "^7.10.1" + "@babel/highlight" "^7.10.3" -"@babel/compat-data@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fcompat-data/-/compat-data-7.10.1.tgz#b1085ffe72cd17bf2c0ee790fc09f9626011b2db" - integrity sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw== +"@babel/compat-data@^7.10.1", "@babel/compat-data@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fcompat-data/-/compat-data-7.10.3.tgz#9af3e033f36e8e2d6e47570db91e64a846f5d382" + integrity sha512-BDIfJ9uNZuI0LajPfoYV28lX8kyCPMHY6uY4WH1lJdcicmAfxCK5ASzaeV0D/wsUaRH/cLk+amuxtC37sZ8TUg== dependencies: browserslist "^4.12.0" invariant "^2.2.4" semver "^5.5.0" "@babel/core@^7.1.0", "@babel/core@^7.7.5", "@babel/core@^7.9.0": - version "7.10.2" - resolved "https://registry.toot.party/@babel%2fcore/-/core-7.10.2.tgz#bd6786046668a925ac2bd2fd95b579b92a23b36a" - integrity sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ== + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fcore/-/core-7.10.3.tgz#73b0e8ddeec1e3fdd7a2de587a60e17c440ec77e" + integrity sha512-5YqWxYE3pyhIi84L84YcwjeEgS+fa7ZjK6IBVGTjDVfm64njkR2lfDhVR5OudLk8x2GK59YoSyVv+L/03k1q9w== dependencies: - "@babel/code-frame" "^7.10.1" - "@babel/generator" "^7.10.2" + "@babel/code-frame" "^7.10.3" + "@babel/generator" "^7.10.3" "@babel/helper-module-transforms" "^7.10.1" "@babel/helpers" "^7.10.1" - "@babel/parser" "^7.10.2" - "@babel/template" "^7.10.1" - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.2" + "@babel/parser" "^7.10.3" + "@babel/template" "^7.10.3" + "@babel/traverse" "^7.10.3" + "@babel/types" "^7.10.3" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" @@ -40,12 +40,12 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.10.1", "@babel/generator@^7.10.2": - version "7.10.2" - resolved "https://registry.toot.party/@babel%2fgenerator/-/generator-7.10.2.tgz#0fa5b5b2389db8bfdfcc3492b551ee20f5dd69a9" - integrity sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA== +"@babel/generator@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fgenerator/-/generator-7.10.3.tgz#32b9a0d963a71d7a54f5f6c15659c3dbc2a523a5" + integrity sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA== dependencies: - "@babel/types" "^7.10.2" + "@babel/types" "^7.10.3" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" @@ -58,12 +58,12 @@ "@babel/types" "^7.10.1" "@babel/helper-builder-binary-assignment-operator-visitor@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fhelper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz#0ec7d9be8174934532661f87783eb18d72290059" - integrity sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw== + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fhelper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.3.tgz#4e9012d6701bef0030348d7f9c808209bd3e8687" + integrity sha512-lo4XXRnBlU6eRM92FkiZxpo1xFLmv3VsPFk61zJKMm7XYJfwqXHsYJTY6agoc4a3L8QPw1HqWehO18coZgbT6A== dependencies: - "@babel/helper-explode-assignable-expression" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/helper-explode-assignable-expression" "^7.10.3" + "@babel/types" "^7.10.3" "@babel/helper-compilation-targets@^7.10.2": version "7.10.2" @@ -77,14 +77,14 @@ semver "^5.5.0" "@babel/helper-create-class-features-plugin@^7.10.1": - version "7.10.2" - resolved "https://registry.toot.party/@babel%2fhelper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz#7474295770f217dbcf288bf7572eb213db46ee67" - integrity sha512-5C/QhkGFh1vqcziq1vAL6SI9ymzUp8BCYjFpvYVhWP4DlATIb3u5q3iUd35mvlyGs8fO7hckkW7i0tmH+5+bvQ== + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fhelper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.3.tgz#2783daa6866822e3d5ed119163b50f0fc3ae4b35" + integrity sha512-iRT9VwqtdFmv7UheJWthGc/h2s7MqoweBF9RUj77NFZsg9VfISvBTum3k6coAhJ8RWv2tj3yUjA03HxPd0vfpQ== dependencies: - "@babel/helper-function-name" "^7.10.1" - "@babel/helper-member-expression-to-functions" "^7.10.1" - "@babel/helper-optimise-call-expression" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-function-name" "^7.10.3" + "@babel/helper-member-expression-to-functions" "^7.10.3" + "@babel/helper-optimise-call-expression" "^7.10.3" + "@babel/helper-plugin-utils" "^7.10.3" "@babel/helper-replace-supers" "^7.10.1" "@babel/helper-split-export-declaration" "^7.10.1" @@ -97,59 +97,59 @@ "@babel/helper-regex" "^7.10.1" regexpu-core "^4.7.0" -"@babel/helper-define-map@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fhelper-define-map/-/helper-define-map-7.10.1.tgz#5e69ee8308648470dd7900d159c044c10285221d" - integrity sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg== +"@babel/helper-define-map@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fhelper-define-map/-/helper-define-map-7.10.3.tgz#d27120a5e57c84727b30944549b2dfeca62401a8" + integrity sha512-bxRzDi4Sin/k0drWCczppOhov1sBSdBvXJObM1NLHQzjhXhwRtn7aRWGvLJWCYbuu2qUk3EKs6Ci9C9ps8XokQ== dependencies: - "@babel/helper-function-name" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/helper-function-name" "^7.10.3" + "@babel/types" "^7.10.3" lodash "^4.17.13" -"@babel/helper-explode-assignable-expression@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fhelper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz#e9d76305ee1162ca467357ae25df94f179af2b7e" - integrity sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg== +"@babel/helper-explode-assignable-expression@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fhelper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.3.tgz#9dc14f0cfa2833ea830a9c8a1c742b6e7461b05e" + integrity sha512-0nKcR64XrOC3lsl+uhD15cwxPvaB6QKUDlD84OT9C3myRbhJqTMYir69/RWItUvHpharv0eJ/wk7fl34ONSwZw== dependencies: - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/traverse" "^7.10.3" + "@babel/types" "^7.10.3" -"@babel/helper-function-name@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fhelper-function-name/-/helper-function-name-7.10.1.tgz#92bd63829bfc9215aca9d9defa85f56b539454f4" - integrity sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ== +"@babel/helper-function-name@^7.10.1", "@babel/helper-function-name@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fhelper-function-name/-/helper-function-name-7.10.3.tgz#79316cd75a9fa25ba9787ff54544307ed444f197" + integrity sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw== dependencies: - "@babel/helper-get-function-arity" "^7.10.1" - "@babel/template" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/helper-get-function-arity" "^7.10.3" + "@babel/template" "^7.10.3" + "@babel/types" "^7.10.3" -"@babel/helper-get-function-arity@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fhelper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz#7303390a81ba7cb59613895a192b93850e373f7d" - integrity sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw== +"@babel/helper-get-function-arity@^7.10.1", "@babel/helper-get-function-arity@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fhelper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz#3a28f7b28ccc7719eacd9223b659fdf162e4c45e" + integrity sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg== dependencies: - "@babel/types" "^7.10.1" + "@babel/types" "^7.10.3" -"@babel/helper-hoist-variables@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fhelper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz#7e77c82e5dcae1ebf123174c385aaadbf787d077" - integrity sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg== +"@babel/helper-hoist-variables@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fhelper-hoist-variables/-/helper-hoist-variables-7.10.3.tgz#d554f52baf1657ffbd7e5137311abc993bb3f068" + integrity sha512-9JyafKoBt5h20Yv1+BXQMdcXXavozI1vt401KBiRc2qzUepbVnd7ogVNymY1xkQN9fekGwfxtotH2Yf5xsGzgg== dependencies: - "@babel/types" "^7.10.1" + "@babel/types" "^7.10.3" -"@babel/helper-member-expression-to-functions@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fhelper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz#432967fd7e12a4afef66c4687d4ca22bc0456f15" - integrity sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g== +"@babel/helper-member-expression-to-functions@^7.10.1", "@babel/helper-member-expression-to-functions@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fhelper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz#bc3663ac81ac57c39148fef4c69bf48a77ba8dd6" + integrity sha512-q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw== dependencies: - "@babel/types" "^7.10.1" + "@babel/types" "^7.10.3" -"@babel/helper-module-imports@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fhelper-module-imports/-/helper-module-imports-7.10.1.tgz#dd331bd45bccc566ce77004e9d05fe17add13876" - integrity sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg== +"@babel/helper-module-imports@^7.10.1", "@babel/helper-module-imports@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fhelper-module-imports/-/helper-module-imports-7.10.3.tgz#766fa1d57608e53e5676f23ae498ec7a95e1b11a" + integrity sha512-Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w== dependencies: - "@babel/types" "^7.10.1" + "@babel/types" "^7.10.3" "@babel/helper-module-transforms@^7.10.1": version "7.10.1" @@ -164,17 +164,17 @@ "@babel/types" "^7.10.1" lodash "^4.17.13" -"@babel/helper-optimise-call-expression@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fhelper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz#b4a1f2561870ce1247ceddb02a3860fa96d72543" - integrity sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg== +"@babel/helper-optimise-call-expression@^7.10.1", "@babel/helper-optimise-call-expression@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fhelper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz#f53c4b6783093195b0f69330439908841660c530" + integrity sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg== dependencies: - "@babel/types" "^7.10.1" + "@babel/types" "^7.10.3" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.1", "@babel/helper-plugin-utils@^7.8.0": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz#ec5a5cf0eec925b66c60580328b122c01230a127" - integrity sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.1", "@babel/helper-plugin-utils@^7.10.3", "@babel/helper-plugin-utils@^7.8.0": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz#aac45cccf8bc1873b99a85f34bceef3beb5d3244" + integrity sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g== "@babel/helper-regex@^7.10.1": version "7.10.1" @@ -183,16 +183,16 @@ dependencies: lodash "^4.17.13" -"@babel/helper-remap-async-to-generator@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fhelper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz#bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432" - integrity sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A== +"@babel/helper-remap-async-to-generator@^7.10.1", "@babel/helper-remap-async-to-generator@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fhelper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.3.tgz#18564f8a6748be466970195b876e8bba3bccf442" + integrity sha512-sLB7666ARbJUGDO60ZormmhQOyqMX/shKBXZ7fy937s+3ID8gSrneMvKSSb+8xIM5V7Vn6uNVtOY1vIm26XLtA== dependencies: "@babel/helper-annotate-as-pure" "^7.10.1" "@babel/helper-wrap-function" "^7.10.1" - "@babel/template" "^7.10.1" - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/template" "^7.10.3" + "@babel/traverse" "^7.10.3" + "@babel/types" "^7.10.3" "@babel/helper-replace-supers@^7.10.1": version "7.10.1" @@ -219,10 +219,10 @@ dependencies: "@babel/types" "^7.10.1" -"@babel/helper-validator-identifier@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5" - integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw== +"@babel/helper-validator-identifier@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz#60d9847f98c4cea1b279e005fdb7c28be5412d15" + integrity sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw== "@babel/helper-wrap-function@^7.10.1": version "7.10.1" @@ -243,27 +243,27 @@ "@babel/traverse" "^7.10.1" "@babel/types" "^7.10.1" -"@babel/highlight@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fhighlight/-/highlight-7.10.1.tgz#841d098ba613ba1a427a2b383d79e35552c38ae0" - integrity sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg== +"@babel/highlight@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fhighlight/-/highlight-7.10.3.tgz#c633bb34adf07c5c13156692f5922c81ec53f28d" + integrity sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw== dependencies: - "@babel/helper-validator-identifier" "^7.10.1" + "@babel/helper-validator-identifier" "^7.10.3" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.10.1", "@babel/parser@^7.10.2": - version "7.10.2" - resolved "https://registry.toot.party/@babel%2fparser/-/parser-7.10.2.tgz#871807f10442b92ff97e4783b9b54f6a0ca812d0" - integrity sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fparser/-/parser-7.10.3.tgz#7e71d892b0d6e7d04a1af4c3c79d72c1f10f5315" + integrity sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA== -"@babel/plugin-proposal-async-generator-functions@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fplugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz#6911af5ba2e615c4ff3c497fe2f47b35bf6d7e55" - integrity sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw== +"@babel/plugin-proposal-async-generator-functions@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fplugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.3.tgz#5a02453d46e5362e2073c7278beab2e53ad7d939" + integrity sha512-WUUWM7YTOudF4jZBAJIW9D7aViYC/Fn0Pln4RIHlQALyno3sXSjqmTA4Zy1TKC2D49RCR8Y/Pn4OIUtEypK3CA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-remap-async-to-generator" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.3" + "@babel/helper-remap-async-to-generator" "^7.10.3" "@babel/plugin-syntax-async-generators" "^7.8.0" "@babel/plugin-proposal-class-properties@^7.10.1": @@ -306,12 +306,12 @@ "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-numeric-separator" "^7.10.1" -"@babel/plugin-proposal-object-rest-spread@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fplugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz#cba44908ac9f142650b4a65b8aa06bf3478d5fb6" - integrity sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ== +"@babel/plugin-proposal-object-rest-spread@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fplugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.3.tgz#b8d0d22f70afa34ad84b7a200ff772f9b9fce474" + integrity sha512-ZZh5leCIlH9lni5bU/wB/UcjtcVLgR8gc+FAgW2OOY+m9h1II3ItTO1/cewNUcsIDZSYcSaz/rYVls+Fb0ExVQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.3" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.10.1" @@ -323,12 +323,12 @@ "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fplugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz#15f5d6d22708629451a91be28f8facc55b0e818c" - integrity sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA== +"@babel/plugin-proposal-optional-chaining@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fplugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.3.tgz#9a726f94622b653c0a3a7a59cdce94730f526f7c" + integrity sha512-yyG3n9dJ1vZ6v5sfmIlMMZ8azQoqx/5/nZTSWX1td6L1H1bsjzA8TInDChpafCZiJkeOFzp/PtrfigAQXxI1Ng== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.3" "@babel/plugin-syntax-optional-chaining" "^7.8.0" "@babel/plugin-proposal-private-methods@^7.10.1": @@ -375,6 +375,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.1" + resolved "https://registry.toot.party/@babel%2fplugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.1.tgz#3e59120ed8b3c2ccc5abb1cfc7aaa3ea01cd36b6" + integrity sha512-ypC4jwfIVF72og0dgvEcFRdOM2V9Qm1tu7RGmdZOlhsccyK0wisXmMObGuWEOd5jQ+K9wcIgSNftCpk2vkjUfQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.1" + "@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.toot.party/@babel%2fplugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" @@ -462,26 +469,26 @@ "@babel/helper-plugin-utils" "^7.10.1" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fplugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz#6e11dd6c4dfae70f540480a4702477ed766d733f" - integrity sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ== +"@babel/plugin-transform-classes@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fplugin-transform-classes/-/plugin-transform-classes-7.10.3.tgz#8d9a656bc3d01f3ff69e1fccb354b0f9d72ac544" + integrity sha512-irEX0ChJLaZVC7FvvRoSIxJlmk0IczFLcwaRXUArBKYHCHbOhe57aG8q3uw/fJsoSXvZhjRX960hyeAGlVBXZw== dependencies: "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-define-map" "^7.10.1" - "@babel/helper-function-name" "^7.10.1" - "@babel/helper-optimise-call-expression" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-define-map" "^7.10.3" + "@babel/helper-function-name" "^7.10.3" + "@babel/helper-optimise-call-expression" "^7.10.3" + "@babel/helper-plugin-utils" "^7.10.3" "@babel/helper-replace-supers" "^7.10.1" "@babel/helper-split-export-declaration" "^7.10.1" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fplugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz#59aa399064429d64dce5cf76ef9b90b7245ebd07" - integrity sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ== +"@babel/plugin-transform-computed-properties@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fplugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.3.tgz#d3aa6eef67cb967150f76faff20f0abbf553757b" + integrity sha512-GWzhaBOsdbjVFav96drOz7FzrcEW6AP5nax0gLIpstiFaI3LOb2tAg06TimaWU6YKOfUACK3FVrxPJ4GSc5TgA== dependencies: - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.3" "@babel/plugin-transform-destructuring@^7.10.1": version "7.10.1" @@ -561,14 +568,14 @@ "@babel/helper-simple-access" "^7.10.1" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fplugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz#9962e4b0ac6aaf2e20431ada3d8ec72082cbffb6" - integrity sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA== +"@babel/plugin-transform-modules-systemjs@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fplugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.3.tgz#004ae727b122b7b146b150d50cba5ffbff4ac56b" + integrity sha512-GWXWQMmE1GH4ALc7YXW56BTh/AlzvDWhUNn9ArFF0+Cz5G8esYlVbXfdyHa1xaD1j+GnBoCeoQNlwtZTVdiG/A== dependencies: - "@babel/helper-hoist-variables" "^7.10.1" + "@babel/helper-hoist-variables" "^7.10.3" "@babel/helper-module-transforms" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.3" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-umd@^7.10.1": @@ -579,10 +586,10 @@ "@babel/helper-module-transforms" "^7.10.1" "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.toot.party/@babel%2fplugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" - integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fplugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.3.tgz#a4f8444d1c5a46f35834a410285f2c901c007ca6" + integrity sha512-I3EH+RMFyVi8Iy/LekQm948Z4Lz4yKT7rK+vuCAeRm0kTa6Z5W7xuhRxDNJv0FPya/her6AUgrDITb70YHtTvA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.8.3" @@ -616,10 +623,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.1" -"@babel/plugin-transform-regenerator@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fplugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz#10e175cbe7bdb63cc9b39f9b3f823c5c7c5c5490" - integrity sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw== +"@babel/plugin-transform-regenerator@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fplugin-transform-regenerator/-/plugin-transform-regenerator-7.10.3.tgz#6ec680f140a5ceefd291c221cb7131f6d7e8cb6d" + integrity sha512-H5kNeW0u8mbk0qa1jVIVTeJJL6/TJ81ltD4oyPx0P499DhMJrTmmIFCmJ3QloGpQG8K9symccB7S7SJpCKLwtw== dependencies: regenerator-transform "^0.14.2" @@ -652,13 +659,13 @@ "@babel/helper-plugin-utils" "^7.10.1" "@babel/helper-regex" "^7.10.1" -"@babel/plugin-transform-template-literals@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2fplugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz#914c7b7f4752c570ea00553b4284dad8070e8628" - integrity sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg== +"@babel/plugin-transform-template-literals@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fplugin-transform-template-literals/-/plugin-transform-template-literals-7.10.3.tgz#69d39b3d44b31e7b4864173322565894ce939b25" + integrity sha512-yaBn9OpxQra/bk0/CaA4wr41O0/Whkg6nqjqApcinxM7pro51ojhX6fv1pimAnVjVfDy14K0ULoRL70CA9jWWA== dependencies: "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" + "@babel/helper-plugin-utils" "^7.10.3" "@babel/plugin-transform-typeof-symbol@^7.10.1": version "7.10.1" @@ -683,23 +690,23 @@ "@babel/helper-plugin-utils" "^7.10.1" "@babel/preset-env@^7.9.5": - version "7.10.2" - resolved "https://registry.toot.party/@babel%2fpreset-env/-/preset-env-7.10.2.tgz#715930f2cf8573b0928005ee562bed52fb65fdfb" - integrity sha512-MjqhX0RZaEgK/KueRzh+3yPSk30oqDKJ5HP5tqTSB1e2gzGS3PLy7K0BIpnp78+0anFuSwOeuCf1zZO7RzRvEA== + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fpreset-env/-/preset-env-7.10.3.tgz#3e58c9861bbd93b6a679987c7e4bd365c56c80c9" + integrity sha512-jHaSUgiewTmly88bJtMHbOd1bJf2ocYxb5BWKSDQIP5tmgFuS/n0gl+nhSrYDhT33m0vPxp+rP8oYYgPgMNQlg== dependencies: - "@babel/compat-data" "^7.10.1" + "@babel/compat-data" "^7.10.3" "@babel/helper-compilation-targets" "^7.10.2" - "@babel/helper-module-imports" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-proposal-async-generator-functions" "^7.10.1" + "@babel/helper-module-imports" "^7.10.3" + "@babel/helper-plugin-utils" "^7.10.3" + "@babel/plugin-proposal-async-generator-functions" "^7.10.3" "@babel/plugin-proposal-class-properties" "^7.10.1" "@babel/plugin-proposal-dynamic-import" "^7.10.1" "@babel/plugin-proposal-json-strings" "^7.10.1" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1" "@babel/plugin-proposal-numeric-separator" "^7.10.1" - "@babel/plugin-proposal-object-rest-spread" "^7.10.1" + "@babel/plugin-proposal-object-rest-spread" "^7.10.3" "@babel/plugin-proposal-optional-catch-binding" "^7.10.1" - "@babel/plugin-proposal-optional-chaining" "^7.10.1" + "@babel/plugin-proposal-optional-chaining" "^7.10.3" "@babel/plugin-proposal-private-methods" "^7.10.1" "@babel/plugin-proposal-unicode-property-regex" "^7.10.1" "@babel/plugin-syntax-async-generators" "^7.8.0" @@ -716,8 +723,8 @@ "@babel/plugin-transform-async-to-generator" "^7.10.1" "@babel/plugin-transform-block-scoped-functions" "^7.10.1" "@babel/plugin-transform-block-scoping" "^7.10.1" - "@babel/plugin-transform-classes" "^7.10.1" - "@babel/plugin-transform-computed-properties" "^7.10.1" + "@babel/plugin-transform-classes" "^7.10.3" + "@babel/plugin-transform-computed-properties" "^7.10.3" "@babel/plugin-transform-destructuring" "^7.10.1" "@babel/plugin-transform-dotall-regex" "^7.10.1" "@babel/plugin-transform-duplicate-keys" "^7.10.1" @@ -728,24 +735,24 @@ "@babel/plugin-transform-member-expression-literals" "^7.10.1" "@babel/plugin-transform-modules-amd" "^7.10.1" "@babel/plugin-transform-modules-commonjs" "^7.10.1" - "@babel/plugin-transform-modules-systemjs" "^7.10.1" + "@babel/plugin-transform-modules-systemjs" "^7.10.3" "@babel/plugin-transform-modules-umd" "^7.10.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.3" "@babel/plugin-transform-new-target" "^7.10.1" "@babel/plugin-transform-object-super" "^7.10.1" "@babel/plugin-transform-parameters" "^7.10.1" "@babel/plugin-transform-property-literals" "^7.10.1" - "@babel/plugin-transform-regenerator" "^7.10.1" + "@babel/plugin-transform-regenerator" "^7.10.3" "@babel/plugin-transform-reserved-words" "^7.10.1" "@babel/plugin-transform-shorthand-properties" "^7.10.1" "@babel/plugin-transform-spread" "^7.10.1" "@babel/plugin-transform-sticky-regex" "^7.10.1" - "@babel/plugin-transform-template-literals" "^7.10.1" + "@babel/plugin-transform-template-literals" "^7.10.3" "@babel/plugin-transform-typeof-symbol" "^7.10.1" "@babel/plugin-transform-unicode-escapes" "^7.10.1" "@babel/plugin-transform-unicode-regex" "^7.10.1" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.10.2" + "@babel/types" "^7.10.3" browserslist "^4.12.0" core-js-compat "^3.6.2" invariant "^2.2.2" @@ -764,42 +771,42 @@ esutils "^2.0.2" "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": - version "7.10.2" - resolved "https://registry.toot.party/@babel%2fruntime/-/runtime-7.10.2.tgz#d103f21f2602497d38348a32e008637d506db839" - integrity sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg== + version "7.10.3" + resolved "https://registry.toot.party/@babel%2fruntime/-/runtime-7.10.3.tgz#670d002655a7c366540c67f6fd3342cd09500364" + integrity sha512-RzGO0RLSdokm9Ipe/YD+7ww8X2Ro79qiXZF3HU9ljrM+qnJmH1Vqth+hbiQZy761LnMJTMitHDuKVYTk3k4dLw== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.1", "@babel/template@^7.3.3": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2ftemplate/-/template-7.10.1.tgz#e167154a94cb5f14b28dc58f5356d2162f539811" - integrity sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig== +"@babel/template@^7.10.1", "@babel/template@^7.10.3", "@babel/template@^7.3.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2ftemplate/-/template-7.10.3.tgz#4d13bc8e30bf95b0ce9d175d30306f42a2c9a7b8" + integrity sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA== dependencies: - "@babel/code-frame" "^7.10.1" - "@babel/parser" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/code-frame" "^7.10.3" + "@babel/parser" "^7.10.3" + "@babel/types" "^7.10.3" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.1": - version "7.10.1" - resolved "https://registry.toot.party/@babel%2ftraverse/-/traverse-7.10.1.tgz#bbcef3031e4152a6c0b50147f4958df54ca0dd27" - integrity sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.10.3": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2ftraverse/-/traverse-7.10.3.tgz#0b01731794aa7b77b214bcd96661f18281155d7e" + integrity sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug== dependencies: - "@babel/code-frame" "^7.10.1" - "@babel/generator" "^7.10.1" - "@babel/helper-function-name" "^7.10.1" + "@babel/code-frame" "^7.10.3" + "@babel/generator" "^7.10.3" + "@babel/helper-function-name" "^7.10.3" "@babel/helper-split-export-declaration" "^7.10.1" - "@babel/parser" "^7.10.1" - "@babel/types" "^7.10.1" + "@babel/parser" "^7.10.3" + "@babel/types" "^7.10.3" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.10.1", "@babel/types@^7.10.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.10.2" - resolved "https://registry.toot.party/@babel%2ftypes/-/types-7.10.2.tgz#30283be31cad0dbf6fb00bd40641ca0ea675172d" - integrity sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng== +"@babel/types@^7.0.0", "@babel/types@^7.10.1", "@babel/types@^7.10.3", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.10.3" + resolved "https://registry.toot.party/@babel%2ftypes/-/types-7.10.3.tgz#6535e3b79fea86a6b09e012ea8528f935099de8e" + integrity sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA== dependencies: - "@babel/helper-validator-identifier" "^7.10.1" + "@babel/helper-validator-identifier" "^7.10.3" lodash "^4.17.13" to-fast-properties "^2.0.0" @@ -1053,9 +1060,9 @@ defer-to-connect "^1.0.1" "@types/babel__core@^7.1.7": - version "7.1.8" - resolved "https://registry.toot.party/@types%2fbabel__core/-/babel__core-7.1.8.tgz#057f725aca3641f49fc11c7a87a9de5ec588a5d7" - integrity sha512-KXBiQG2OXvaPWFPDS1rD8yV9vO0OuWIqAEqLsbfX0oU2REN5KuoMnZ1gClWcBhO5I3n6oTVAmrMufOvRqdmFTQ== + version "7.1.9" + resolved "https://registry.toot.party/@types%2fbabel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d" + integrity sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1116,9 +1123,9 @@ integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== "@types/express-serve-static-core@*": - version "4.17.7" - resolved "https://registry.toot.party/@types%2fexpress-serve-static-core/-/express-serve-static-core-4.17.7.tgz#dfe61f870eb549dc6d7e12050901847c7d7e915b" - integrity sha512-EMgTj/DF9qpgLXyc+Btimg+XoH7A2liE8uKul8qSmMTHCeNYzydDKFdsJskDvw42UsesCnhO63dO0Grbj8J4Dw== + version "4.17.8" + resolved "https://registry.toot.party/@types%2fexpress-serve-static-core/-/express-serve-static-core-4.17.8.tgz#b8f7b714138536742da222839892e203df569d1c" + integrity sha512-1SJZ+R3Q/7mLkOD9ewCBDYD2k0WyZQtWYqF/2VvoNN2/uhI49J9CDN4OAm+wGMA0DbArA4ef27xl4+JwMtGggw== dependencies: "@types/node" "*" "@types/qs" "*" @@ -1209,16 +1216,16 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/mysql@^2.15.10": - version "2.15.13" - resolved "https://registry.toot.party/@types%2fmysql/-/mysql-2.15.13.tgz#153dc2e2f8dffd39f7bba556c2679f14bdbecde1" - integrity sha512-9hlUjghm0EeLndks56bH6NDcA52ozGcLXr8etlJVuoYXHa2M+neR2XpGekrulln5LsZg8ZRp8/Z0qKGb9Mpjbw== + version "2.15.14" + resolved "https://registry.toot.party/@types%2fmysql/-/mysql-2.15.14.tgz#df60e7b5f531662a8758e74b7685bed2b0ef1835" + integrity sha512-YyNcxZZ4qlb9v41lu8Qfo+quX8eUqz4mr/6Nx7sclc2pUemOvjU7xrpuVave0/sR/VdtDPTXZOWQLC/kthxrHg== dependencies: "@types/node" "*" "@types/node@*": - version "14.0.13" - resolved "https://registry.toot.party/@types%2fnode/-/node-14.0.13.tgz#ee1128e881b874c371374c1f72201893616417c9" - integrity sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA== + version "14.0.14" + resolved "https://registry.toot.party/@types%2fnode/-/node-14.0.14.tgz#24a0b5959f16ac141aeb0c5b3cd7a15b7c64cbce" + integrity sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ== "@types/node@^13.13.2": version "13.13.12" @@ -1508,9 +1515,9 @@ ajv-errors@^1.0.0: integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: - version "3.4.1" - resolved "https://registry.toot.party/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" - integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== + version "3.5.0" + resolved "https://registry.toot.party/ajv-keywords/-/ajv-keywords-3.5.0.tgz#5c894537098785926d71e696114a53ce768ed773" + integrity sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw== ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5: version "6.12.2" @@ -1822,13 +1829,14 @@ babel-plugin-jest-hoist@^25.5.0: "@types/babel__traverse" "^7.0.6" babel-preset-current-node-syntax@^0.1.2: - version "0.1.2" - resolved "https://registry.toot.party/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.2.tgz#fb4a4c51fe38ca60fede1dc74ab35eb843cb41d6" - integrity sha512-u/8cS+dEiK1SFILbOC8/rUI3ml9lboKuuMvZ/4aQnQmhecQAgPw5ew066C1ObnEAUmlx7dv/s2z52psWEtLNiw== + version "0.1.3" + resolved "https://registry.toot.party/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz#b4b547acddbf963cba555ba9f9cbbb70bfd044da" + integrity sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -1947,9 +1955,9 @@ binary-extensions@^1.0.0: integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.toot.party/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" - integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + version "2.1.0" + resolved "https://registry.toot.party/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== bindings@^1.5.0: version "1.5.0" @@ -2133,14 +2141,14 @@ browserify-zlib@^0.2.0: pako "~1.0.5" browserslist@^4.12.0, browserslist@^4.8.5: - version "4.12.0" - resolved "https://registry.toot.party/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d" - integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg== + version "4.12.2" + resolved "https://registry.toot.party/browserslist/-/browserslist-4.12.2.tgz#76653d7e4c57caa8a1a28513e2f4e197dc11a711" + integrity sha512-MfZaeYqR8StRZdstAK9hCKDd2StvePCYp5rHzQCPicUjfFliDgmuaBNPHYUTpAywBN8+Wc/d7NYVFkO0aqaBUw== dependencies: - caniuse-lite "^1.0.30001043" - electron-to-chromium "^1.3.413" - node-releases "^1.1.53" - pkg-up "^2.0.0" + caniuse-lite "^1.0.30001088" + electron-to-chromium "^1.3.483" + escalade "^3.0.1" + node-releases "^1.1.58" bs-logger@0.x: version "0.2.6" @@ -2309,10 +2317,10 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.toot.party/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001043: - version "1.0.30001083" - resolved "https://registry.toot.party/caniuse-lite/-/caniuse-lite-1.0.30001083.tgz#52410c20c6f029f604f0d45eca0439a82e712442" - integrity sha512-CnYJ27awX4h7yj5glfK7r1TOI13LBytpLzEgfj0s4mY75/F8pnQcYjL+oVpmS38FB59+vU0gscQ9D8tc+lIXvA== +caniuse-lite@^1.0.30001088: + version "1.0.30001089" + resolved "https://registry.toot.party/caniuse-lite/-/caniuse-lite-1.0.30001089.tgz#0634653159f1179093a35fd7f36dbd7c4ed85101" + integrity sha512-RnL5dbdqAfQ5oxHjFUU8uiyJMvTKoXfRn0Asp2R5cpRsyiY5+kLl0fcocQijb0V9XAWFEG/2A/vSswRmpYarmA== capture-exit@^2.0.0: version "2.0.0" @@ -2336,15 +2344,6 @@ caw@^2.0.0, caw@^2.0.1: tunnel-agent "^0.6.0" url-to-options "^1.0.1" -chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.toot.party/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^1.0.0, chalk@^1.1.1: version "1.1.3" resolved "https://registry.toot.party/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -2356,6 +2355,15 @@ chalk@^1.0.0, chalk@^1.1.1: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.toot.party/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@^3.0.0: version "3.0.0" resolved "https://registry.toot.party/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" @@ -2579,7 +2587,7 @@ commander@2.17.x: resolved "https://registry.toot.party/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.11.0, commander@^2.15.1, commander@^2.19.0, commander@^2.20.0, commander@~2.20.3: +commander@^2.11.0, commander@^2.15.1, commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.toot.party/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -2811,17 +2819,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.toot.party/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@^3.0.0: version "3.0.1" resolved "https://registry.toot.party/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" @@ -2839,6 +2836,17 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.toot.party/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.3" resolved "https://registry.toot.party/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -3386,15 +3394,15 @@ ee-first@1.1.1: resolved "https://registry.toot.party/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.413: - version "1.3.473" - resolved "https://registry.toot.party/electron-to-chromium/-/electron-to-chromium-1.3.473.tgz#d0cd5fe391046fb70674ec98149f0f97609d29b8" - integrity sha512-smevlzzMNz3vMz6OLeeCq5HRWEj2AcgccNPYnAx4Usx0IOciq9DU36RJcICcS09hXoY7t7deRfVYKD14IrGb9A== +electron-to-chromium@^1.3.483: + version "1.3.483" + resolved "https://registry.toot.party/electron-to-chromium/-/electron-to-chromium-1.3.483.tgz#9269e7cfc1c8e72709824da171cbe47ca5e3ca9e" + integrity sha512-+05RF8S9rk8S0G8eBCqBRBaRq7+UN3lDs2DAvnG8SBSgQO3hjy0+qt4CmRk5eiuGbTcaicgXfPmBi31a+BD3lg== elliptic@^6.0.0, elliptic@^6.5.2: - version "6.5.2" - resolved "https://registry.toot.party/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" - integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== + version "6.5.3" + resolved "https://registry.toot.party/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -3414,11 +3422,6 @@ emoji-regex@^8.0.0: resolved "https://registry.toot.party/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.toot.party/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.toot.party/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -3436,19 +3439,10 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@4.1.0: - version "4.1.0" - resolved "https://registry.toot.party/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - tapable "^1.0.0" - -enhanced-resolve@^4.1.0: - version "4.1.1" - resolved "https://registry.toot.party/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" - integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== +enhanced-resolve@^4.1.0, enhanced-resolve@^4.1.1: + version "4.2.0" + resolved "https://registry.toot.party/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz#5d43bda4a0fd447cb0ebbe71bef8deff8805ad0d" + integrity sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ== dependencies: graceful-fs "^4.1.2" memory-fs "^0.5.0" @@ -3504,6 +3498,11 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +escalade@^3.0.1: + version "3.0.1" + resolved "https://registry.toot.party/escalade/-/escalade-3.0.1.tgz#52568a77443f6927cd0ab9c73129137533c965ed" + integrity sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA== + escape-goat@^2.0.0: version "2.1.1" resolved "https://registry.toot.party/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" @@ -3520,9 +3519,9 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.11.1: - version "1.14.2" - resolved "https://registry.toot.party/escodegen/-/escodegen-1.14.2.tgz#14ab71bf5026c2aa08173afba22c6f3173284a84" - integrity sha512-InuOIiKk8wwuOFg6x9BQXbzjrQhtyXh46K9bqVTPzSo2FnyMBaYGBMC6PhQy7yxxil9vIedFBweQBMK74/7o8A== + version "1.14.3" + resolved "https://registry.toot.party/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== dependencies: esprima "^4.0.1" estraverse "^4.2.0" @@ -3813,9 +3812,9 @@ fast-deep-equal@^3.1.1: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.0.3: - version "3.2.2" - resolved "https://registry.toot.party/fast-glob/-/fast-glob-3.2.2.tgz#ade1a9d91148965d4bf7c51f72e1ca662d32e63d" - integrity sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A== + version "3.2.4" + resolved "https://registry.toot.party/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -3985,13 +3984,6 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.toot.party/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.toot.party/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -4014,7 +4006,7 @@ find-versions@^3.0.0: dependencies: semver-regex "^2.0.0" -findup-sync@3.0.0: +findup-sync@^3.0.0: version "3.0.0" resolved "https://registry.toot.party/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== @@ -4280,13 +4272,6 @@ global-dirs@^2.0.1: dependencies: ini "^1.3.5" -global-modules@2.0.0: - version "2.0.0" - resolved "https://registry.toot.party/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - global-modules@^1.0.0: version "1.0.0" resolved "https://registry.toot.party/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -4296,6 +4281,13 @@ global-modules@^1.0.0: is-windows "^1.0.1" resolve-dir "^1.0.0" +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.toot.party/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.toot.party/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" @@ -4773,7 +4765,7 @@ import-lazy@^3.1.0: resolved "https://registry.toot.party/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc" integrity sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ== -import-local@2.0.0: +import-local@^2.0.0: version "2.0.0" resolved "https://registry.toot.party/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== @@ -4844,10 +4836,10 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.toot.party/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -interpret@1.2.0: - version "1.2.0" - resolved "https://registry.toot.party/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== +interpret@^1.4.0: + version "1.4.0" + resolved "https://registry.toot.party/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== into-stream@^3.1.0: version "3.1.0" @@ -4864,11 +4856,6 @@ invariant@^2.2.2, invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.toot.party/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - ip-address@^5.8.9: version "5.9.4" resolved "https://registry.toot.party/ip-address/-/ip-address-5.9.4.tgz#4660ac261ad61bd397a860a007f7e98e4eaee386" @@ -5450,9 +5437,9 @@ jest-mock@^25.5.0: "@jest/types" "^25.5.0" jest-pnp-resolver@^1.2.1: - version "1.2.1" - resolved "https://registry.toot.party/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" - integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== + version "1.2.2" + resolved "https://registry.toot.party/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== jest-regex-util@^25.2.6: version "25.2.6" @@ -5621,9 +5608,9 @@ jest@^25.4.0: jest-cli "^25.5.4" js-base64@^2.1.8: - version "2.5.2" - resolved "https://registry.toot.party/js-base64/-/js-base64-2.5.2.tgz#313b6274dda718f714d00b3330bbae6e38e90209" - integrity sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ== + version "2.6.2" + resolved "https://registry.toot.party/js-base64/-/js-base64-2.6.2.tgz#cf9301bc5cc756892a9a6c8d7138322e5944fb0d" + integrity sha512-1hgLrLIrmCgZG+ID3VoLNLOSwjGnoZa8tyrUdEteMeIzsT6PH7PMLyUvbDwzNE56P3PNxyvuIOx4Uh2E5rzQIw== js-beautify@^1.6.14: version "1.11.0" @@ -5823,13 +5810,6 @@ lazy@^1.0.11: resolved "https://registry.toot.party/lazy/-/lazy-1.0.11.tgz#daa068206282542c088288e975c297c1ae77b690" integrity sha1-2qBoIGKCVCwIgojpdcKXwa53tpA= -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.toot.party/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - leven@^3.1.0: version "3.1.0" resolved "https://registry.toot.party/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -5871,15 +5851,6 @@ loader-runner@^2.4.0: resolved "https://registry.toot.party/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3: - version "1.2.3" - resolved "https://registry.toot.party/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.toot.party/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" @@ -5898,14 +5869,6 @@ loader-utils@^2.0.0: emojis-list "^3.0.0" json5 "^2.1.2" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.toot.party/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.toot.party/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -6115,13 +6078,6 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.toot.party/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - map-cache@^0.2.2: version "0.2.2" resolved "https://registry.toot.party/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -6163,16 +6119,7 @@ media-typer@0.3.0: resolved "https://registry.toot.party/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.toot.party/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memory-fs@^0.4.0, memory-fs@^0.4.1: +memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.toot.party/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -6286,7 +6233,7 @@ mimer@^1.0.0: resolved "https://registry.toot.party/mimer/-/mimer-1.1.0.tgz#2cb67f7093998e772a0e62c090f77daa1b8a2dbe" integrity sha512-y9dVfy2uiycQvDNiAYW6zp49ZhFlXDMr5wfdOiMbdzGM/0N5LNR6HTUn3un+WUQcM0koaw8FMTG1bt5EnHJdvQ== -mimic-fn@^2.0.0, mimic-fn@^2.1.0: +mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.toot.party/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== @@ -6926,7 +6873,7 @@ node-pre-gyp@^0.14.0: semver "^5.3.0" tar "^4.4.2" -node-releases@^1.1.53: +node-releases@^1.1.58: version "1.1.58" resolved "https://registry.toot.party/node-releases/-/node-releases-1.1.58.tgz#8ee20eef30fa60e52755fcc0942def5a734fe935" integrity sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg== @@ -6955,9 +6902,9 @@ node-sass@^4.14.0: "true-case-path" "^1.0.2" nodemailer@^6.4.6: - version "6.4.8" - resolved "https://registry.toot.party/nodemailer/-/nodemailer-6.4.8.tgz#aca52886e4e56f71f6b8a65f5ca6b767ca751fc7" - integrity sha512-UbJD0+g5e2H20bWv7Rpj3B+N3TMMJ0MLoLwaGVJ0k3Vo8upq0UltwHJ5BJfrpST1vFa91JQ8cf7cICK5DSIo1Q== + version "6.4.10" + resolved "https://registry.toot.party/nodemailer/-/nodemailer-6.4.10.tgz#f4c8dc7991c57f41fd081bef224ef01f7065143d" + integrity sha512-j+pS9CURhPgk6r0ENr7dji+As2xZiHSvZeVnzKniLOw1eRAyM/7flP0u65tCnsapV8JFu+t0l/5VeHsCZEeh9g== nodemon@^2.0.3: version "2.0.4" @@ -7144,9 +7091,9 @@ object-copy@^0.1.0: kind-of "^3.0.3" object-inspect@^1.7.0: - version "1.7.0" - resolved "https://registry.toot.party/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" - integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + version "1.8.0" + resolved "https://registry.toot.party/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -7250,15 +7197,6 @@ os-homedir@^1.0.0: resolved "https://registry.toot.party/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.toot.party/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - os-tmpdir@^1.0.0: version "1.0.2" resolved "https://registry.toot.party/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -7294,11 +7232,6 @@ p-cancelable@^1.0.0: resolved "https://registry.toot.party/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.toot.party/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - p-each-series@^2.1.0: version "2.1.0" resolved "https://registry.toot.party/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" @@ -7333,18 +7266,6 @@ p-is-promise@^1.1.0: resolved "https://registry.toot.party/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.toot.party/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.toot.party/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.toot.party/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -7352,13 +7273,6 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.toot.party/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.toot.party/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -7404,11 +7318,6 @@ p-timeout@^2.0.1: dependencies: p-finally "^1.0.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.toot.party/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - p-try@^2.0.0: version "2.2.0" resolved "https://registry.toot.party/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -7642,13 +7551,6 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.toot.party/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - pn@^1.1.0: version "1.1.0" resolved "https://registry.toot.party/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" @@ -9046,13 +8948,6 @@ strip-outer@^1.0.0: dependencies: escape-string-regexp "^1.0.2" -supports-color@6.1.0, supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.toot.party/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.toot.party/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -9065,6 +8960,13 @@ supports-color@^5.3.0, supports-color@^5.5.0: dependencies: has-flag "^3.0.0" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.toot.party/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + supports-color@^7.0.0, supports-color@^7.1.0: version "7.1.0" resolved "https://registry.toot.party/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" @@ -9186,9 +9088,9 @@ terser-webpack-plugin@^1.4.3: worker-farm "^1.7.0" terser@^4.1.2: - version "4.7.0" - resolved "https://registry.toot.party/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006" - integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw== + version "4.8.0" + resolved "https://registry.toot.party/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -9465,11 +9367,9 @@ uglify-js@3.4.x: source-map "~0.6.1" uglify-js@^3.6.0: - version "3.9.4" - resolved "https://registry.toot.party/uglify-js/-/uglify-js-3.9.4.tgz#867402377e043c1fc7b102253a22b64e5862401b" - integrity sha512-8RZBJq5smLOa7KslsNsVcSH+KOXf1uDU8yqLeNuVKwmT0T3FA0ZoXlinQfRad7SDcbZZRZE4ov+2v71EnxNyCA== - dependencies: - commander "~2.20.3" + version "3.10.0" + resolved "https://registry.toot.party/uglify-js/-/uglify-js-3.10.0.tgz#397a7e6e31ce820bfd1cb55b804ee140c587a9e7" + integrity sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA== uglifyjs-webpack-plugin@^2.2.0: version "2.2.0" @@ -9698,14 +9598,14 @@ uuid@^3.0.1, uuid@^3.3.2: integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== uuid@^8.0.0: - version "8.1.0" - resolved "https://registry.toot.party/uuid/-/uuid-8.1.0.tgz#6f1536eb43249f473abc6bd58ff983da1ca30d8d" - integrity sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg== + version "8.2.0" + resolved "https://registry.toot.party/uuid/-/uuid-8.2.0.tgz#cb10dd6b118e2dada7d0cd9730ba7417c93d920e" + integrity sha512-CYpGiFTUrmI6OBMkAdjSDM0k5h8SkkiTP4WAjQgDgNB1S3Ou9VBEvr6q0Kv2H1mMk7IWfxYGpMH5sd5AvcIV2Q== -v8-compile-cache@2.0.3: - version "2.0.3" - resolved "https://registry.toot.party/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" - integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== +v8-compile-cache@^2.1.1: + version "2.1.1" + resolved "https://registry.toot.party/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== v8-to-istanbul@^4.1.3: version "4.1.4" @@ -9817,21 +9717,21 @@ webidl-conversions@^4.0.2: integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== webpack-cli@^3.3.11: - version "3.3.11" - resolved "https://registry.toot.party/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631" - integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g== + version "3.3.12" + resolved "https://registry.toot.party/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" + integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== dependencies: - chalk "2.4.2" - cross-spawn "6.0.5" - enhanced-resolve "4.1.0" - findup-sync "3.0.0" - global-modules "2.0.0" - import-local "2.0.0" - interpret "1.2.0" - loader-utils "1.2.3" - supports-color "6.1.0" - v8-compile-cache "2.0.3" - yargs "13.2.4" + chalk "^2.4.2" + cross-spawn "^6.0.5" + enhanced-resolve "^4.1.1" + findup-sync "^3.0.0" + global-modules "^2.0.0" + import-local "^2.0.0" + interpret "^1.4.0" + loader-utils "^1.4.0" + supports-color "^6.1.0" + v8-compile-cache "^2.1.1" + yargs "^13.3.2" webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: version "1.4.3" @@ -9925,9 +9825,9 @@ widest-line@^3.1.0: string-width "^4.0.0" wms-core@^0: - version "0.8.12" - resolved "https://registry.toot.party/wms-core/-/wms-core-0.8.12.tgz#375753aba411f824383983e111caa27f56c14467" - integrity sha512-9BgzEiB+kbVnR0yHJ8SejStzJaFq0auAc12opm1RYQfGRJnQjs4/yPuUqKAY1TlhDvyGFYXpwyal1yqJbg061A== + version "0.10.14" + resolved "https://registry.toot.party/wms-core/-/wms-core-0.10.14.tgz#e479fe3128ab28439ac43c11677291414fbb2129" + integrity sha512-PdDsDy/7CZ9XWYfq+oGF4OhBkHUu3x1pOl6MmW+wQFp0Vmtex5dC3t5ayxCSutpdZ4WVgWaL4431QZ0dKxj2Fw== dependencies: "@types/express" "^4.17.6" "@types/express-session" "^1.17.0" @@ -10049,7 +9949,7 @@ yargs-parser@18.x, yargs-parser@^18.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^13.1.0, yargs-parser@^13.1.2: +yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.toot.party/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== @@ -10057,23 +9957,6 @@ yargs-parser@^13.1.0, yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@13.2.4: - version "13.2.4" - resolved "https://registry.toot.party/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.0" - yargs@^13.3.0, yargs@^13.3.2: version "13.3.2" resolved "https://registry.toot.party/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" From 34b0798fdf7dfb8a568d0120f6b16c1f1475709d Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Sat, 27 Jun 2020 17:20:06 +0200 Subject: [PATCH 09/12] Add default config files and use it --- config/default.ts | 41 +++++++++++++++++++++++++++++++++++ config/production.ts | 13 +++++++++++ config/test.ts | 7 ++++++ package.json | 6 ++--- src/{ExampleApp.ts => App.ts} | 2 +- src/main.ts | 5 +++-- views/about.njk | 2 +- views/errors/error.njk | 4 ++-- views/home.njk | 2 +- views/layouts/base.njk | 4 ++-- 10 files changed, 74 insertions(+), 12 deletions(-) rename src/{ExampleApp.ts => App.ts} (98%) diff --git a/config/default.ts b/config/default.ts index 6b0727d..731014e 100644 --- a/config/default.ts +++ b/config/default.ts @@ -1,2 +1,43 @@ export default Object.assign(require("wms-core/config/default").default, { + app: { + name: 'Example App', + contact_email: 'noreply@example.net' + }, + log_level: "DEV", + db_log_level: "ERROR", + public_url: "http://localhost:4899", + public_websocket_url: "ws://localhost:4899", + port: 4899, + gitlab_webhook_token: 'secret', + mysql: { + connectionLimit: 10, + host: "localhost", + user: "root", + password: "", + database: "wms2", + create_database_automatically: false + }, + redis: { + host: "127.0.0.1", + port: 6379, + prefix: 'wms' + }, + session: { + secret: "very_secret_not_known", + cookie: { + secure: false + } + }, + mail: { + host: "127.0.0.1", + port: "1025", + secure: false, + username: "", + password: "", + allow_invalid_tls: true + }, + view: { + cache: false + }, + approval_mode: false, }); \ No newline at end of file diff --git a/config/production.ts b/config/production.ts index 7765a4f..d3ba121 100644 --- a/config/production.ts +++ b/config/production.ts @@ -1,2 +1,15 @@ export default Object.assign(require("wms-core/config/production").default, { + log_level: "DEBUG", + db_log_level: "ERROR", + public_url: "https://watch-my.stream", + public_websocket_url: "wss://watch-my.stream", + session: { + cookie: { + secure: true + } + }, + mail: { + secure: true, + allow_invalid_tls: false + } }); \ No newline at end of file diff --git a/config/test.ts b/config/test.ts index 37855e8..149ace2 100644 --- a/config/test.ts +++ b/config/test.ts @@ -1,2 +1,9 @@ export default Object.assign(require("wms-core/config/test").default, { + mysql: { + host: "localhost", + user: "root", + password: "", + database: "wms2_test", + create_database_automatically: true + } }); \ No newline at end of file diff --git a/package.json b/package.json index 4e6ce8f..1ae5253 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "name": "aldap", + "name": "Example App", "version": "0.1.0", - "description": "Authentication LDAP server", - "repository": "git@gitlab.com:ArisuOngaku/aldap.git", + "description": "Example App based on wms-core", + "repository": "git@gitlab.com:ArisuOngaku/wms-boilerplate.git", "author": "Alice Gaudon ", "private": true, "main": "dist/main.js", diff --git a/src/ExampleApp.ts b/src/App.ts similarity index 98% rename from src/ExampleApp.ts rename to src/App.ts index 3fb414c..713f51b 100644 --- a/src/ExampleApp.ts +++ b/src/App.ts @@ -19,7 +19,7 @@ import WebSocketServerComponent from "wms-core/components/WebSocketServerCompone import HomeController from "./controllers/HomeController"; import AutoUpdateComponent from "wms-core/components/AutoUpdateComponent"; -export default class ExampleApp extends Application { +export default class App extends Application { private readonly port: number; constructor(port: number) { diff --git a/src/main.ts b/src/main.ts index 4a9b34b..1706351 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,8 +1,9 @@ import Logger from "wms-core/Logger"; -import ExampleApp from "./ExampleApp"; +import App from "./App"; +import config from "config"; (async () => { - const app = new ExampleApp(4899); + const app = new App(config.get('port')); await app.start(); })().catch(err => { Logger.error(err); diff --git a/views/about.njk b/views/about.njk index 08342ae..dbb6047 100644 --- a/views/about.njk +++ b/views/about.njk @@ -1,6 +1,6 @@ {% extends 'layouts/base.njk' %} -{% set title = 'Example App - About us' %} +{% set title = app.name + ' - About us' %} {% block body %}

    Very interesting

    diff --git a/views/errors/error.njk b/views/errors/error.njk index 3e0236a..3d05ea9 100644 --- a/views/errors/error.njk +++ b/views/errors/error.njk @@ -7,7 +7,7 @@ {% endblock %} {% block _body %} - +
    {% if flash %} @@ -31,6 +31,6 @@ Error ID: {{ error_id }}
    If you think this isn't right, please contact us with the above error ID at - contact@example.net. + {{ app.contact_email }}. {% endblock %} \ No newline at end of file diff --git a/views/home.njk b/views/home.njk index 1afefb7..09adf33 100644 --- a/views/home.njk +++ b/views/home.njk @@ -1,6 +1,6 @@ {% extends 'layouts/base.njk' %} -{% set title = 'Example App - Hello world!' %} +{% set title = app.name + ' - Hello world!' %} {% block body %}

    Hello world!

    diff --git a/views/layouts/base.njk b/views/layouts/base.njk index 36e5e8d..97f72d7 100644 --- a/views/layouts/base.njk +++ b/views/layouts/base.njk @@ -12,7 +12,7 @@ {% endblock %} {% block header %} - +
    {% endblock %} -{% block footer %}Example app v{{ app_version }} - all rights reserved.{% endblock %} \ No newline at end of file +{% block footer %}{{ app.name }} v{{ app_version }} - all rights reserved.{% endblock %} \ No newline at end of file From 669325d029315d5cf07e3da686802ed16ea2f930 Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Sat, 27 Jun 2020 17:30:01 +0200 Subject: [PATCH 10/12] Use new settings in views --- views/backend/accounts_approval.njk | 2 +- views/backend/index.njk | 2 +- views/file-manager.njk | 2 +- views/file-upload.njk | 2 +- views/mails/base_layout.mjml.njk | 4 ++-- yarn.lock | 6 +++--- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/views/backend/accounts_approval.njk b/views/backend/accounts_approval.njk index 472e35c..3f72fe6 100644 --- a/views/backend/accounts_approval.njk +++ b/views/backend/accounts_approval.njk @@ -1,6 +1,6 @@ {% extends 'layouts/base.njk' %} -{% set title = 'ily.li - Review accounts' %} +{% set title = app.name + ' - Review accounts' %} {% block body %}

    Accounts pending review

    diff --git a/views/backend/index.njk b/views/backend/index.njk index 3a100d8..14299da 100644 --- a/views/backend/index.njk +++ b/views/backend/index.njk @@ -1,6 +1,6 @@ {% extends 'layouts/base.njk' %} -{% set title = 'ily.li - Backend' %} +{% set title = app.name + ' - Backend' %} {% block body %}

    App administration

    diff --git a/views/file-manager.njk b/views/file-manager.njk index 259831f..fa81e46 100644 --- a/views/file-manager.njk +++ b/views/file-manager.njk @@ -1,6 +1,6 @@ {% extends 'layouts/base.njk' %} -{% set title = 'ily.li - File manager' %} +{% set title = app.name + ' - File manager' %} {% block scripts %} diff --git a/views/file-upload.njk b/views/file-upload.njk index 396103f..52997d7 100644 --- a/views/file-upload.njk +++ b/views/file-upload.njk @@ -1,6 +1,6 @@ {% extends 'layouts/base.njk' %} -{% set title = 'ily.li - File upload' %} +{% set title = app.name + ' - File upload' %} {% block scripts %} diff --git a/views/mails/base_layout.mjml.njk b/views/mails/base_layout.mjml.njk index e08f9c7..fdae4b5 100644 --- a/views/mails/base_layout.mjml.njk +++ b/views/mails/base_layout.mjml.njk @@ -93,7 +93,7 @@ - ily.li + {{ app.name }} @@ -104,7 +104,7 @@ All rights reserved. Contact us at - (contact email) + {{ app.contact_email }} diff --git a/yarn.lock b/yarn.lock index be1e917..e1b3976 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9825,9 +9825,9 @@ widest-line@^3.1.0: string-width "^4.0.0" wms-core@^0: - version "0.10.14" - resolved "https://registry.toot.party/wms-core/-/wms-core-0.10.14.tgz#e479fe3128ab28439ac43c11677291414fbb2129" - integrity sha512-PdDsDy/7CZ9XWYfq+oGF4OhBkHUu3x1pOl6MmW+wQFp0Vmtex5dC3t5ayxCSutpdZ4WVgWaL4431QZ0dKxj2Fw== + version "0.10.16" + resolved "https://registry.toot.party/wms-core/-/wms-core-0.10.16.tgz#55dc66d6443b2cab82f0bfb7db9673d4ab07c45e" + integrity sha512-NY4PKzcf9rEWmYznTR9qI+CofW7Bfut+djCBQ/GBVzEI/tW9RAudtLhfYrYvHJYPOyLWMdoP7KNxROyt37TzLg== dependencies: "@types/express" "^4.17.6" "@types/express-session" "^1.17.0" From 36105e86a58d83b6d2e766911124ffccc245fc25 Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Sat, 27 Jun 2020 17:50:28 +0200 Subject: [PATCH 11/12] Add upload_file.sh and update file-upload view accordingly --- assets/files/upload_file.sh | 18 ++++++ src/controllers/FileController.ts | 5 ++ views/file-upload.njk | 94 ++++++++++++++++++------------- 3 files changed, 78 insertions(+), 39 deletions(-) create mode 100755 assets/files/upload_file.sh diff --git a/assets/files/upload_file.sh b/assets/files/upload_file.sh new file mode 100755 index 0000000..4239746 --- /dev/null +++ b/assets/files/upload_file.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +local_file=$1 +token=$(cat $HOME/.ily_token) + +if test -z "$2"; then + curl -X POST -H 'Accept: text/plain' \ + -H "Authorization: $token" \ + -F 'upload=@'$local_file \ + -F 'ttl=2592000' \ + https://ily.li/ +else + curl -X PUT -H 'Accept: text/plain' \ + -H "Authorization: $token" \ + -F 'upload=@'$local_file \ + -F 'ttl=2592000' \ + "https://ily.li/$2" +fi diff --git a/src/controllers/FileController.ts b/src/controllers/FileController.ts index 6f6a9c3..bbf7972 100644 --- a/src/controllers/FileController.ts +++ b/src/controllers/FileController.ts @@ -15,6 +15,7 @@ const SLUG_DICTIONARY = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012 export default class FileController extends Controller { routes(): void { this.get('/files/upload', this.getFileUploader, 'file-upload', REQUIRE_AUTH_MIDDLEWARE); + this.get('/files/upload/script', this.downloadLinuxScript, 'linux-script'); this.post('/files/post', this.postFileFrontend, 'post-file-frontend', REQUIRE_AUTH_MIDDLEWARE, FILE_UPLOAD_FORM_MIDDLEWARE); this.get('/files/:page([0-9]+)?', this.getFileManager, 'file-manager', REQUIRE_AUTH_MIDDLEWARE); this.get('/files/delete/:slug', this.deleteFile, 'delete-file-frontend', REQUIRE_AUTH_MIDDLEWARE); @@ -34,6 +35,10 @@ export default class FileController extends Controller { }); } + protected async downloadLinuxScript(req: Request, res: Response): Promise { + res.download('assets/files/upload_file.sh', 'upload_file.sh'); + } + protected async getFileManager(req: Request, res: Response): Promise { res.render('file-manager', { files: await FileModel.paginateForUser(req, 100, req.models.user!.id!), diff --git a/views/file-upload.njk b/views/file-upload.njk index 52997d7..c0d4cc9 100644 --- a/views/file-upload.njk +++ b/views/file-upload.njk @@ -46,55 +46,72 @@

    Setup a desktop utility

    There may be a desktop client at some point. For now, if you're an advanced user, you can setup scripts/macros.

    -

    - To upload the file, you must: -

    -
      -
    • Set the "Authorization" HTTP header to an auth token (generate one with the form below)
    • -
    • Make a proper file upload request either with the method "POST" on / (auto-generates a short url) or - "PUT" (choose the target url you want, alphanum) -
    • -
    - - - - - - - - - - - - - - - - +
    +
    +

    First alternative: sh script (native on linux)

    +

    If you have the sh shell on your machine (i.e. you are on linux, git bash on windows...), you can + download this script.

    +

    You must put a valid auth token (generated in the form at the bottom of this page) in a .ily_token file in your home directory ($HOME/.ily_token).

    +

    Examples:

    +
    upload_script.sh path/to/file
    +
    upload_script.sh path/to/file my_very_important_file.png
    +
    - - - - - - - -
    Field nameDescriptionOptional?Example
    uploadThe file fieldNo-
    ttlHow much time (in seconds) to keep the fileYes0 (never delete), 30 (delete after 30s)
    -

    Example with curl:

    -
    curl -X POST -H 'Accept: application/json' \
    +            
    + +
    +

    Second alternative: implement your own client

    +

    + To upload the file, you must: +

    +
      +
    • Set the "Authorization" HTTP header to an auth token (generate one with the form below)
    • +
    • Make a proper file upload request either with the method "POST" on / (auto-generates a short + url) or "PUT" (choose the target url you want, alphanum) +
    • +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Field nameDescriptionOptional?Example
    uploadThe file fieldNo-
    ttlHow much time (in seconds) to keep the fileYes0 (never delete), 30 (delete after 30s)
    +

    Example with curl:

    +
    curl -X POST -H 'Accept: application/json' \
     -H "Authorization: very_secret_and_personal_token" \
     -F 'upload=@path/to/local/file' \
     https://ily.li/
    -
    curl -X PUT -H 'Accept: application/json' \
    +                
    curl -X PUT -H 'Accept: application/json' \
     -H "Authorization: very_secret_and_personal_token" \
     -F 'upload=@path/to/local/file' \
     https://ily.li/my_very_important_file.png
    -
    curl -X POST -H 'Accept: application/json' \
    +                
    curl -X POST -H 'Accept: application/json' \
     -H "Authorization: very_secret_and_personal_token" \
     -F 'upload=@path/to/local/file' \
     -F 'ttl=30' \
     https://ily.li/
    +
    @@ -130,8 +147,7 @@ https://ily.li/
    {{ token.created_at.toISOString() }} {{ token.used_at.toISOString() }} - Revoke + Revoke {% endfor %} From 8a850d2a817d24e21f198ee1176fc79ff2e7c5be Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Sat, 27 Jun 2020 17:50:56 +0200 Subject: [PATCH 12/12] Version 0.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index db8451c..8f071d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ily.li", - "version": "0.2.2", + "version": "0.3.0", "description": "Self-hosted file pusher", "repository": "git@gitlab.com:ArisuOngaku/ily.li.git", "author": "Alice Gaudon ",