diff --git a/.eslintrc.js b/.eslintrc.js
index 97d7070..b835195 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -11,7 +11,7 @@ module.exports = {
'SharedArrayBuffer': 'readonly'
},
'parserOptions': {
- 'ecmaVersion': 2018
+ 'ecmaVersion': 2021
},
'rules': {
'indent': [
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index e39c070..75d82e1 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -4,26 +4,20 @@
### Submitting a bug report
-To submit a bug report, please use the "Bug report" template when creating a [new issue](https://github.com/eartharoid/DiscordTickets/issues/new/choose). Describe the bug in as much detail as possible, including how to reproduce the problem, using screenshots or code snippets if possible. Check that someone hasn't already filed an issue before creating another, you can comment on it if you want.
+To submit a bug report, please use the "Bug report" template when creating a [new issue](https://github.com/eartharoid/DiscordTickets/issues/new/choose). Describe the bug in as much detail as possible, including how to reproduce the problem, using screenshots or code snippets if possible. Check that someone else hasn't already created a similar first.
### Submitting a feature request
-To submit a new feature request, please use the "Feature request" template when creating a [new issue](https://github.com/eartharoid/DiscordTickets/issues/new/choose).
+~~To submit a new feature request, please use the "Feature request" template when creating a [new issue](https://github.com/eartharoid/DiscordTickets/issues/new/choose).~~
+
+You can request new features on [Feedbacky](https://app.feedbacky.net/b/dsctickets/).
### Submitting other issues
-For issues not related to feature requests or bugs, you can [create a blank issue](https://github.com/eartharoid/DiscordTickets/issues/new). Please give us as much information as possible. If you just want to talk, you can join the [Discord server](https://github.com/eartharoid/DiscordTickets#support).
+For issues not related to feature requests or bugs, you can [create a blank issue](https://github.com/eartharoid/DiscordTickets/issues/new). Please give us as much information as possible. If you just want to talk (if you need help or have questions), you can join the [Discord server](https://go.eartharoid.me/discord) or use the [Discussions tab](https://github.com/eartharoid/DiscordTickets/discussions).
## Submitting a pull request
To contribute code to this project, create a new [pull request](https://github.com/eartharoid/DiscordTickets/pulls). For anything other than patches (bug fixes, documentation or minor code changes that have no affect on usage), such as a new feature, please create a [new issue](https://github.com/eartharoid/DiscordTickets/issues/new/choose) first, describing what you intend to change and why. Please ensure you update the documentation if needed.
When contributing, you should follow the same code style already used throughout, to ensure code is consistent.
-
-1. Use single quote marks (`'`) when possible
-2. Template literals are preferred
-3. Commas should always have a space after them
-4. Use tabs, not spaces, and always indent
-5. Use arrow functions
-
-**Note**: Create `user/dev.env` and `user/dev.config.js` for testing.
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index a831253..9e7e818 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -1,23 +1,23 @@
---
name: Bug report
-about: Report an issue or bug
-title: ''
-labels: ''
+about: Report a bug
+title: '[BUG] '
+labels: 'bug'
assignees: ''
---
**Describe the bug**
-A clear and concise description of what the bug is.
+
-**To Reproduce**
-Steps to reproduce the behaviour:
+**To reproduce**
+
**Expected behavior**
-A clear and concise description of what you expected to happen.
+
**Screenshots**
-If applicable, add screenshots to help explain your problem.
+
**Additional context**
-Add any other context about the problem here.
+
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index 0214585..df88356 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -1,20 +1,24 @@
---
name: Feature request
about: Suggest an idea for this project
-title: ''
-labels: ''
+title: '[FEATURE] '
+labels: 'feature_request'
assignees: ''
---
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is.
+
+
+**Is your feature request related to a problem?**
+
**Describe the solution you'd like**
-A clear and concise description of what you want to happen.
+
**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features you've considered.
+
**Additional context**
-Add any other context or screenshots about the feature request here.
+
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index efdfeaf..11aa112 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,22 +1,28 @@
+
+
#### Information
-> Check one
+
- [ ] This includes major changes (breaking changes)
- [ ] This includes minor changes (minimal usage changes, minor new features)
-- [ ] This includes patches (bug fixes, documentation changes etc)
+- [ ] This includes patches (bug or typo fixes)
+- [ ] This is includes **only** documentation changes
#### Is this related to an issue?
-> Reference any issues here
+
#### Changes made
-> Describe your changes
+
#### Confirmations
-> Check all that apply
+
- [ ] I have updated any necessary documentation
- [ ] This uses consistent code style
diff --git a/.github/SECURITY.md b/.github/SECURITY.md
index ee39dd1..e9d3f70 100644
--- a/.github/SECURITY.md
+++ b/.github/SECURITY.md
@@ -1,14 +1,15 @@
-# Security Policy
+# Security policy
-## Supported Versions
+## Supported versions
Release versions that will receive security updates.
-| Version | Supported |
-| ------- | ------------------ |
-| 2.x | ✅ |
-| < 2.0 | ❌ |
+| Version | Supported |
+| ------- | -------------- |
+| 3.x | ✅ |
+| 2.x | ⚠️ Deprecated |
+| < 2.0 | ❌ |
-## Reporting a Vulnerability
+## Reporting a vulnerability
If you find a vulnerability, please [email me](mailto:contact@eartharoid.me).
diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml
new file mode 100644
index 0000000..9830f32
--- /dev/null
+++ b/.github/workflows/deploy-docs.yml
@@ -0,0 +1,15 @@
+name: Build and deploy docs
+on:
+ push:
+ branches:
+ - master
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-python@v2
+ with:
+ python-version: 3.x
+ - run: pip install -r requirements.txt
+ - run: mkdocs gh-deploy --force
diff --git a/.gitignore b/.gitignore
index 7a35e15..073fe01 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,10 @@
-logs/
+# directories
.vscode/
node_modules/
-user/dev.env
-user/dev.config.js
-user/storage.db
-user/transcripts/text/*.txt
-user/transcripts/raw/*.log
-user/transcripts/raw/entities/*.json
+logs/
+site/
+
+# files
+.env
+user/config.js
*.code-workspace
diff --git a/README.md b/README.md
index eb6afca..7e0f003 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
+# Please download from [releases](https://github.com/eartharoid/DiscordTickets/releases) or [v2 branch](https://github.com/eartharoid/DiscordTickets/tree/v2) - master branch is currently a work in progress
# DiscordTickets
[![Run on Repl.it](https://repl.it/badge/github/eartharoid/DiscordTickets)](https://repl.it/github/eartharoid/DiscordTickets) [![GitHub issues](https://img.shields.io/github/issues/eartharoid/DiscordTickets?style=flat-square)](https://github.com/eartharoid/DiscordTickets/issues) [![GitHub stars](https://img.shields.io/github/stars/eartharoid/DiscordTickets?style=flat-square)](https://github.com/eartharoid/DiscordTickets/stargazers) [![GitHub forks](https://img.shields.io/github/forks/eartharoid/DiscordTickets?style=flat-square)](https://github.com/eartharoid/DiscordTickets/network) [![GitHub license](https://img.shields.io/github/license/eartharoid/DiscordTickets?style=flat-square)](https://github.com/eartharoid/DiscordTickets/blob/master/LICENSE) ![Codacy grade](https://img.shields.io/codacy/grade/14e6851c85444424b75b8bc3f93e93db?logo=codacy&style=flat-square) [![Discord support server](https://discordapp.com/api/guilds/451745464480432129/embed.png?style=shield)](https://discord.gg/pXc9vyC)
diff --git a/docs/.pages b/docs/.pages
new file mode 100644
index 0000000..95182e0
--- /dev/null
+++ b/docs/.pages
@@ -0,0 +1,3 @@
+arrange:
+ - index.md
+ - ...
\ No newline at end of file
diff --git a/docs/README b/docs/README
new file mode 100644
index 0000000..f799806
--- /dev/null
+++ b/docs/README
@@ -0,0 +1 @@
+This documentation is intended to be access through the website (https://eartharoid.github.io/discordtickets)
\ No newline at end of file
diff --git a/user/transcripts/raw/.gitkeep b/docs/changelog.md
similarity index 100%
rename from user/transcripts/raw/.gitkeep
rename to docs/changelog.md
diff --git a/docs/img/favicon.ico b/docs/img/favicon.ico
new file mode 100644
index 0000000..42c575c
Binary files /dev/null and b/docs/img/favicon.ico differ
diff --git a/docs/img/logo.png b/docs/img/logo.png
new file mode 100644
index 0000000..c600d2b
Binary files /dev/null and b/docs/img/logo.png differ
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..ce31d28
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1 @@
+# Home
\ No newline at end of file
diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css
new file mode 100644
index 0000000..f2d712a
--- /dev/null
+++ b/docs/stylesheets/extra.css
@@ -0,0 +1,24 @@
+a code {
+ color: var(--md-primary-fg-color) !important;
+ background-color: rgba(213, 0, 44, 0.1) !important;
+ transition: color 125ms;
+ transition: background-color 125ms
+}
+
+a code:hover {
+ /* ONLY WORKS ON SLATE THEME
+ color: #81E8ED !important;
+ background-color: rgba(129, 232, 237, 0.1) !important; */
+ color: var(--md-primary-fg-color--dark) !important;
+}
+
+.md-announce {
+ background-color: var(--md-primary-fg-color--dark) !important;
+ color: white;
+}
+
+.md-announce a, .md-announce a:hover {
+ color: white !important;
+ /* text-decoration: underline; */
+ font-weight: bold;
+}
\ No newline at end of file
diff --git a/example.env b/example.env
new file mode 100644
index 0000000..08407e0
--- /dev/null
+++ b/example.env
@@ -0,0 +1,6 @@
+DISCORD_TOKEN=
+
+DB_HOST=
+DB_NAME=
+DB_USER=
+DB_PASS=
\ No newline at end of file
diff --git a/mkdocs.yml b/mkdocs.yml
new file mode 100644
index 0000000..b2d568c
--- /dev/null
+++ b/mkdocs.yml
@@ -0,0 +1,82 @@
+# Project information
+site_name: DiscordTickets
+site_description: An open-source & self-hosted Discord bot for ticket management.
+site_author: eartharoid
+site_url: https://eartharoid.github.io/discordtickets
+
+# Repository
+repo_name: eartharoid/DiscordTickets
+repo_url: https://github.com/eartharoid/DiscordTickets
+edit_uri: blob/master/docs/
+
+# Copyright
+copyright: '© 2021 Isaac Saunders'
+
+# Configuration
+extra_css:
+ - stylesheets/extra.css
+
+theme:
+ name: material
+ language: en
+
+ custom_dir: overrides/
+
+ palette:
+ scheme: default
+ primary: primary
+ accent: primary
+
+ font:
+ text: Roboto
+ code: Roboto Mono
+
+ features:
+ - instant
+ - tabs
+ - navigation.expand
+
+ logo: /img/logo.png
+ favicon: /img/favicon.ico
+
+# Extras
+extra:
+ social:
+ - icon: fontawesome/brands/github-alt
+ link: https://github.com/eartharoid
+ - icon: fontawesome/brands/twitter
+ link: https://twitter.com/eartharoid
+
+plugins:
+ - search # necessary for search to work
+ - git-revision-date-localized # last modified date at bottom of page
+ - awesome-pages # custom nav order
+
+# Extensions
+markdown_extensions:
+ - admonition
+ - codehilite:
+ guess_lang: false
+ - toc:
+ permalink: true
+ - footnotes
+ - meta
+# pymd
+ - pymdownx.arithmatex
+ - pymdownx.betterem:
+ smart_enable: all
+ - pymdownx.caret
+ - pymdownx.critic
+ - pymdownx.details
+ - pymdownx.emoji:
+ emoji_index: !!python/name:materialx.emoji.twemoji
+ emoji_generator: !!python/name:materialx.emoji.to_svg
+ - pymdownx.inlinehilite
+ - pymdownx.magiclink
+ - pymdownx.mark
+ - pymdownx.smartsymbols
+ - pymdownx.superfences
+ - pymdownx.tasklist:
+ custom_checkbox: true
+ - pymdownx.tabbed
+ - pymdownx.tilde
diff --git a/overrides/announce.html b/overrides/announce.html
new file mode 100644
index 0000000..f93988a
--- /dev/null
+++ b/overrides/announce.html
@@ -0,0 +1,2 @@
+{% include ".icons/material/alert-decagram.svg" %}
+See what's new in v3.0.
\ No newline at end of file
diff --git a/overrides/main.html b/overrides/main.html
new file mode 100644
index 0000000..674c9d8
--- /dev/null
+++ b/overrides/main.html
@@ -0,0 +1,2 @@
+{% extends "base.html" %}
+{% block announce %}{% include "announce.html" ignore missing %}{% endblock %}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 7d4ccbf..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,2915 +0,0 @@
-{
- "name": "@eartharoid/discordtickets",
- "version": "2.1.3",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
- "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
- "dev": true
- },
- "@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- }
- }
- },
- "@discordjs/collection": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz",
- "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ=="
- },
- "@discordjs/form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- },
- "@eartharoid/dtf": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@eartharoid/dtf/-/dtf-1.0.8.tgz",
- "integrity": "sha512-e3mR8JY6Uuy1Zj89iYEZfvK6s81GlWEPP4gO8NzfItzF4xFGFTVTwRjZ6sCVBmbhj3ouX2pyvx8O9snx4r5Xrg=="
- },
- "@eslint/eslintrc": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz",
- "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
- "globals": "^12.1.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
- "lodash": "^4.17.20",
- "minimatch": "^3.0.4",
- "strip-json-comments": "^3.1.1"
- },
- "dependencies": {
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- }
- }
- },
- "@sindresorhus/is": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
- "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
- "dev": true
- },
- "@szmarczak/http-timer": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
- "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
- "dev": true,
- "requires": {
- "defer-to-connect": "^1.0.1"
- }
- },
- "@types/node": {
- "version": "14.14.22",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz",
- "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw=="
- },
- "abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
- },
- "abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "requires": {
- "event-target-shim": "^5.0.0"
- }
- },
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true
- },
- "acorn-jsx": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
- "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
- "dev": true
- },
- "ajv": {
- "version": "6.12.3",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
- "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-align": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
- "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
- "requires": {
- "string-width": "^3.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
- },
- "ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true
- },
- "ansi-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
- "requires": {
- "type-fest": "^0.11.0"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ=="
- }
- }
- },
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "any-promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
- },
- "anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
- "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "optional": true,
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "optional": true
- },
- "astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "dev": true
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "optional": true
- },
- "aws4": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz",
- "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==",
- "optional": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "optional": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- },
- "dependencies": {
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "optional": true
- }
- }
- },
- "bignumber.js": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz",
- "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg="
- },
- "binary-extensions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
- "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
- "dev": true
- },
- "block-stream": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
- "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
- "optional": true,
- "requires": {
- "inherits": "~2.0.0"
- }
- },
- "boxen": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.0.tgz",
- "integrity": "sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA==",
- "requires": {
- "ansi-align": "^3.0.0",
- "camelcase": "^6.2.0",
- "chalk": "^4.1.0",
- "cli-boxes": "^2.2.1",
- "string-width": "^4.2.0",
- "type-fest": "^0.20.2",
- "widest-line": "^3.1.0",
- "wrap-ansi": "^7.0.0"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
- }
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "cacheable-request": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
- "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
- "dev": true,
- "requires": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^3.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^4.1.0",
- "responselike": "^1.0.2"
- },
- "dependencies": {
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
- "dev": true
- }
- }
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg=="
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
- "optional": true
- },
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "chokidar": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.0.tgz",
- "integrity": "sha512-JgQM9JS92ZbFR4P90EvmzNpSGhpPBGBSj10PILeDyYFwp4h2/D9OM03wsJ4zW1fEp4ka2DGrnUeD7FuvQ2aZ2Q==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "fsevents": "~2.3.1",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.5.0"
- }
- },
- "chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "optional": true
- },
- "ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
- "dev": true
- },
- "cli-boxes": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
- "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw=="
- },
- "clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "dev": true,
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "optional": true
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "configstore": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
- "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
- "dev": true,
- "requires": {
- "dot-prop": "^5.2.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "unique-string": "^2.0.0",
- "write-file-atomic": "^3.0.0",
- "xdg-basedir": "^4.0.0"
- }
- },
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "optional": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "optional": true
- },
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "crypto-random-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
- "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
- "dev": true
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "optional": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
- "dev": true,
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
- },
- "deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
- "dev": true
- },
- "defer-to-connect": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
- "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
- "dev": true
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
- "optional": true
- },
- "discord.js": {
- "version": "12.5.1",
- "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.1.tgz",
- "integrity": "sha512-VwZkVaUAIOB9mKdca0I5MefPMTQJTNg0qdgi1huF3iwsFwJ0L5s/Y69AQe+iPmjuV6j9rtKoG0Ta0n9vgEIL6w==",
- "requires": {
- "@discordjs/collection": "^0.1.6",
- "@discordjs/form-data": "^3.0.1",
- "abort-controller": "^3.0.0",
- "node-fetch": "^2.6.1",
- "prism-media": "^1.2.2",
- "setimmediate": "^1.0.5",
- "tweetnacl": "^1.0.3",
- "ws": "^7.3.1"
- }
- },
- "doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "dot-prop": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
- "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
- "dev": true,
- "requires": {
- "is-obj": "^2.0.0"
- }
- },
- "dotenv": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
- "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
- },
- "dottie": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz",
- "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg=="
- },
- "duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
- "dev": true
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "optional": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
- "dev": true,
- "requires": {
- "ansi-colors": "^4.1.1"
- }
- },
- "escape-goat": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
- "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- },
- "eslint": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.19.0.tgz",
- "integrity": "sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "@eslint/eslintrc": "^0.3.0",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.0.1",
- "doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.1",
- "esquery": "^1.2.0",
- "esutils": "^2.0.2",
- "file-entry-cache": "^6.0.0",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.0.0",
- "globals": "^12.1.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash": "^4.17.20",
- "minimatch": "^3.0.4",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.1.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
- "strip-json-comments": "^3.1.0",
- "table": "^6.0.4",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- }
- },
- "eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- }
- },
- "eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
- }
- },
- "eslint-visitor-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
- "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
- "dev": true
- },
- "espree": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
- "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
- "dev": true,
- "requires": {
- "acorn": "^7.4.0",
- "acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^1.3.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "esquery": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
- "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
- "dev": true,
- "requires": {
- "estraverse": "^5.1.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true
- }
- }
- },
- "esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "requires": {
- "estraverse": "^5.2.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true
- }
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
- },
- "event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "optional": true
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "optional": true
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "file-entry-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz",
- "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==",
- "dev": true,
- "requires": {
- "flat-cache": "^3.0.4"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "flat-cache": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
- "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
- "dev": true,
- "requires": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- },
- "dependencies": {
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- }
- }
- },
- "flatted": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz",
- "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==",
- "dev": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "optional": true
- },
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "optional": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "fs-minipass": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
- "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
- "optional": true,
- "requires": {
- "minipass": "^2.6.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
- },
- "fsevents": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz",
- "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==",
- "dev": true,
- "optional": true
- },
- "fstream": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
- "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
- "optional": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "inherits": "~2.0.0",
- "mkdirp": ">=0.5 0",
- "rimraf": "2"
- }
- },
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
- },
- "gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "optional": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "optional": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "optional": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
- }
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "optional": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
- "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "global-dirs": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz",
- "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==",
- "dev": true,
- "requires": {
- "ini": "1.3.7"
- },
- "dependencies": {
- "ini": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
- "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==",
- "dev": true
- }
- }
- },
- "globals": {
- "version": "12.4.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
- "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
- "dev": true,
- "requires": {
- "type-fest": "^0.8.1"
- }
- },
- "got": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
- "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
- "dev": true,
- "requires": {
- "@sindresorhus/is": "^0.14.0",
- "@szmarczak/http-timer": "^1.1.2",
- "cacheable-request": "^6.0.0",
- "decompress-response": "^3.3.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^4.1.0",
- "lowercase-keys": "^1.0.1",
- "mimic-response": "^1.0.1",
- "p-cancelable": "^1.0.0",
- "to-readable-stream": "^1.0.0",
- "url-parse-lax": "^3.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
- "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "optional": true
- },
- "har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "optional": true,
- "requires": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "optional": true
- },
- "has-yarn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
- "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
- "dev": true
- },
- "http-cache-semantics": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
- "dev": true
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "optional": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "optional": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- },
- "ignore-by-default": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
- "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=",
- "dev": true
- },
- "ignore-walk": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz",
- "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==",
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- }
- },
- "import-lazy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
- "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
- "dev": true
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "inflection": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz",
- "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY="
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-ci": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
- "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
- "dev": true,
- "requires": {
- "ci-info": "^2.0.0"
- }
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- },
- "is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-installed-globally": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz",
- "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==",
- "dev": true,
- "requires": {
- "global-dirs": "^2.0.1",
- "is-path-inside": "^3.0.1"
- }
- },
- "is-npm": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz",
- "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==",
- "dev": true
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "is-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
- "dev": true
- },
- "is-path-inside": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
- "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==",
- "dev": true
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
- },
- "is-yarn-global": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
- "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "optional": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "optional": true
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "optional": true
- },
- "json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
- "dev": true
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
- "optional": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "optional": true
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "optional": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "keyv": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
- "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
- "dev": true,
- "requires": {
- "json-buffer": "3.0.0"
- }
- },
- "latest-version": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
- "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
- "dev": true,
- "requires": {
- "package-json": "^6.3.0"
- }
- },
- "leeks.js": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/leeks.js/-/leeks.js-0.0.9.tgz",
- "integrity": "sha512-e6UVJ1fj8f2clpHy+KpXVWVxjzB3XYFGyKRJHDlT8Gy/75BT+9bYUacpHSCoXp7RTtyMSr4eBjZrp0nHyyQVbg=="
- },
- "leekslazylogger": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/leekslazylogger/-/leekslazylogger-2.0.7.tgz",
- "integrity": "sha512-HC0kNjPSOAKx4L9HwmKuvJp1OQQgS6U2IjXq6plKc845TcaAFRNw/2ILHze29z+fPn+44xUeI49FrLuVgSUL/A==",
- "requires": {
- "@eartharoid/dtf": "^1.0.8",
- "leeks.js": "0.0.9",
- "lodash.merge": "^4.6.2"
- }
- },
- "levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- }
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
- "dev": true
- },
- "lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
- },
- "lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
- "dev": true
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "mime-db": {
- "version": "1.44.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
- "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
- },
- "mime-types": {
- "version": "2.1.27",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
- "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
- "requires": {
- "mime-db": "1.44.0"
- }
- },
- "mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
- },
- "minipass": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
- "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
- "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
- "optional": true,
- "requires": {
- "minipass": "^2.9.0"
- }
- },
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "optional": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "moment": {
- "version": "2.29.1",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
- "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
- },
- "moment-timezone": {
- "version": "0.5.32",
- "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.32.tgz",
- "integrity": "sha512-Z8QNyuQHQAmWucp8Knmgei8YNo28aLjJq6Ma+jy1ZSpSk5nyfRT8xgUbSQvD2+2UajISfenndwvFuH3NGS+nvA==",
- "requires": {
- "moment": ">= 2.9.0"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "n-readlines": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/n-readlines/-/n-readlines-1.0.1.tgz",
- "integrity": "sha512-z4SyAIVgMy7CkgsoNw7YVz40v0g4+WWvvqy8+ZdHrCtgevcEO758WQyrYcw3XPxcLxF+//RszTz/rO48nzD0wQ=="
- },
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
- },
- "needle": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.0.tgz",
- "integrity": "sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==",
- "optional": true,
- "requires": {
- "debug": "^3.2.6",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "optional": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "node-addon-api": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz",
- "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA==",
- "optional": true
- },
- "node-fetch": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
- "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
- },
- "node-gyp": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
- "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
- "optional": true,
- "requires": {
- "fstream": "^1.0.0",
- "glob": "^7.0.3",
- "graceful-fs": "^4.1.2",
- "mkdirp": "^0.5.0",
- "nopt": "2 || 3",
- "npmlog": "0 || 1 || 2 || 3 || 4",
- "osenv": "0",
- "request": "^2.87.0",
- "rimraf": "2",
- "semver": "~5.3.0",
- "tar": "^2.0.0",
- "which": "1"
- },
- "dependencies": {
- "nopt": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
- "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
- "optional": true,
- "requires": {
- "abbrev": "1"
- }
- },
- "semver": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
- "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
- "optional": true
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "optional": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "node-pre-gyp": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz",
- "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==",
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.1",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.2.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
- },
- "dependencies": {
- "nopt": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
- "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "optional": true
- },
- "tar": {
- "version": "4.4.13",
- "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
- "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
- "optional": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.8.6",
- "minizlib": "^1.2.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.3"
- }
- }
- }
- },
- "nodemon": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz",
- "integrity": "sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==",
- "dev": true,
- "requires": {
- "chokidar": "^3.2.2",
- "debug": "^3.2.6",
- "ignore-by-default": "^1.0.1",
- "minimatch": "^3.0.4",
- "pstree.remy": "^1.1.7",
- "semver": "^5.7.1",
- "supports-color": "^5.5.0",
- "touch": "^3.1.0",
- "undefsafe": "^2.0.3",
- "update-notifier": "^4.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "nopt": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
- "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
- "dev": true,
- "requires": {
- "abbrev": "1"
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "normalize-url": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
- "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
- "dev": true
- },
- "npm-bundled": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz",
- "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==",
- "optional": true,
- "requires": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npm-normalize-package-bin": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
- "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==",
- "optional": true
- },
- "npm-packlist": {
- "version": "1.4.8",
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz",
- "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==",
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1",
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "optional": true
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "optional": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "requires": {
- "wrappy": "1"
- }
- },
- "optionator": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
- "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
- "dev": true,
- "requires": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
- "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "p-cancelable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
- "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
- "dev": true
- },
- "package-json": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
- "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
- "dev": true,
- "requires": {
- "got": "^9.6.0",
- "registry-auth-token": "^4.0.0",
- "registry-url": "^5.0.0",
- "semver": "^6.2.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "optional": true
- },
- "picomatch": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
- "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
- "dev": true
- },
- "prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true
- },
- "prepend-http": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
- "dev": true
- },
- "prism-media": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.2.tgz",
- "integrity": "sha512-I+nkWY212lJ500jLe4tN9tWO7nRiBAVdMv76P9kffZjYhw20raMlW1HSSvS+MLXC9MmbNZCazMrAr+5jEEgTuw=="
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "optional": true
- },
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true
- },
- "psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "optional": true
- },
- "pstree.remy": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
- "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
- "dev": true
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
- },
- "pupa": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz",
- "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==",
- "dev": true,
- "requires": {
- "escape-goat": "^2.0.0"
- }
- },
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "optional": true
- },
- "rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
- }
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "optional": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "readdirp": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
- "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "regexpp": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
- "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
- "dev": true
- },
- "registry-auth-token": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz",
- "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==",
- "dev": true,
- "requires": {
- "rc": "^1.2.8"
- }
- },
- "registry-url": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
- "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
- "dev": true,
- "requires": {
- "rc": "^1.2.8"
- }
- },
- "request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "optional": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "dependencies": {
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "optional": true
- }
- }
- },
- "require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "dev": true
- },
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
- },
- "responselike": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
- "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
- "dev": true,
- "requires": {
- "lowercase-keys": "^1.0.0"
- }
- },
- "retry-as-promised": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-3.2.0.tgz",
- "integrity": "sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg==",
- "requires": {
- "any-promise": "^1.3.0"
- }
- },
- "rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
- "optional": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "optional": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
- "optional": true
- },
- "semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ=="
- },
- "semver-diff": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
- "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
- "dev": true,
- "requires": {
- "semver": "^6.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "sequelize": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.5.0.tgz",
- "integrity": "sha512-owBt8fnzVy8E1OvyCyfCdVk7OOLyPVrBCMEf+CvRReC5oCyo+UqeXCtwaex9L6LM9ifZ1i3TG3sFeM5MgLK0CQ==",
- "requires": {
- "debug": "^4.1.1",
- "dottie": "^2.0.0",
- "inflection": "1.12.0",
- "lodash": "^4.17.20",
- "moment": "^2.26.0",
- "moment-timezone": "^0.5.31",
- "retry-as-promised": "^3.2.0",
- "semver": "^7.3.2",
- "sequelize-pool": "^6.0.0",
- "toposort-class": "^1.0.1",
- "uuid": "^8.1.0",
- "validator": "^10.11.0",
- "wkx": "^0.5.0"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
- }
- }
- },
- "sequelize-pool": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-6.1.0.tgz",
- "integrity": "sha512-4YwEw3ZgK/tY/so+GfnSgXkdwIJJ1I32uZJztIEgZeAO6HMgj64OzySbWLgxj+tXhZCJnzRfkY9gINw8Ft8ZMg=="
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "optional": true
- },
- "setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
- },
- "slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- }
- }
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "sqlite3": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.0.tgz",
- "integrity": "sha512-rjvqHFUaSGnzxDy2AHCwhHy6Zp6MNJzCPGYju4kD8yi6bze4d1/zMTg6C7JI49b7/EM7jKMTvyfN/4ylBKdwfw==",
- "optional": true,
- "requires": {
- "node-addon-api": "2.0.0",
- "node-gyp": "3.x",
- "node-pre-gyp": "^0.11.0"
- }
- },
- "sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "optional": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- },
- "dependencies": {
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "optional": true
- }
- }
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
- }
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "supports-hyperlinks": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz",
- "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==",
- "requires": {
- "has-flag": "^4.0.0",
- "supports-color": "^7.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "table": {
- "version": "6.0.7",
- "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz",
- "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==",
- "dev": true,
- "requires": {
- "ajv": "^7.0.2",
- "lodash": "^4.17.20",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.0"
- },
- "dependencies": {
- "ajv": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz",
- "integrity": "sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
- }
- },
- "json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- }
- }
- },
- "tar": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
- "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
- "optional": true,
- "requires": {
- "block-stream": "*",
- "fstream": "^1.0.12",
- "inherits": "2"
- }
- },
- "term-size": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
- "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==",
- "dev": true
- },
- "terminal-link": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
- "requires": {
- "ansi-escapes": "^4.2.1",
- "supports-hyperlinks": "^2.0.0"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "to-readable-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
- "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
- "dev": true
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "to-time-monthsfork": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/to-time-monthsfork/-/to-time-monthsfork-1.1.3.tgz",
- "integrity": "sha512-SykQ/IAyihZJVtQUjB04ThztVYdQBFx9birBLyCm6i62bZJx8GiuDVis/l9VBPWWsz5NuT5gr7HCrrAb/2OIEg==",
- "requires": {
- "bignumber.js": "^2.4.0"
- }
- },
- "toposort-class": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz",
- "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg="
- },
- "touch": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
- "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
- "dev": true,
- "requires": {
- "nopt": "~1.0.10"
- }
- },
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "optional": true,
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "optional": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
- "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
- },
- "type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- },
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true
- },
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
- "undefsafe": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz",
- "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==",
- "dev": true,
- "requires": {
- "debug": "^2.2.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "unique-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
- "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
- "dev": true,
- "requires": {
- "crypto-random-string": "^2.0.0"
- }
- },
- "update-notifier": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz",
- "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==",
- "dev": true,
- "requires": {
- "boxen": "^4.2.0",
- "chalk": "^3.0.0",
- "configstore": "^5.0.1",
- "has-yarn": "^2.1.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^2.0.0",
- "is-installed-globally": "^0.3.1",
- "is-npm": "^4.0.0",
- "is-yarn-global": "^0.3.0",
- "latest-version": "^5.0.0",
- "pupa": "^2.0.1",
- "semver-diff": "^3.1.1",
- "xdg-basedir": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "boxen": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
- "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
- "dev": true,
- "requires": {
- "ansi-align": "^3.0.0",
- "camelcase": "^5.3.1",
- "chalk": "^3.0.0",
- "cli-boxes": "^2.2.0",
- "string-width": "^4.1.0",
- "term-size": "^2.1.0",
- "type-fest": "^0.8.1",
- "widest-line": "^3.1.0"
- }
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "uri-js": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
- "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "url-parse-lax": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
- "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
- "dev": true,
- "requires": {
- "prepend-http": "^2.0.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "optional": true
- },
- "uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
- },
- "v8-compile-cache": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
- "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
- "dev": true
- },
- "validator": {
- "version": "10.11.0",
- "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz",
- "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw=="
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "optional": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "wide-align": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
- "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
- "optional": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "optional": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "optional": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "optional": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
- "requires": {
- "string-width": "^4.0.0"
- }
- },
- "wkx": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz",
- "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==",
- "requires": {
- "@types/node": "*"
- }
- },
- "word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
- "dev": true
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
- "ws": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz",
- "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ=="
- },
- "xdg-basedir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
- "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
- "dev": true
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "optional": true
- }
- }
-}
diff --git a/package.json b/package.json
index f72174e..47f093a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@eartharoid/discordtickets",
- "version": "2.1.3",
+ "version": "3.0.0",
"private": true,
"description": "An open-source & self-hosted Discord bot for ticket management.",
"main": "src/index.js",
@@ -34,7 +34,7 @@
"test": "echo \"Nothing to test! Run with 'npm start'\" && exit 1"
},
"engines": {
- "node": ">=12"
+ "node": ">=14"
},
"repository": {
"type": "git",
@@ -42,8 +42,8 @@
},
"keywords": [
"discord",
- "bot",
- "tickets"
+ "tickets",
+ "bot"
],
"author": "eartharoid",
"license": "GPL-3.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..7295c24
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,2462 @@
+dependencies:
+ '@eartharoid/dtf': 1.0.8
+ boxen: 5.0.0
+ discord.js: 12.5.1
+ dotenv: 8.2.0
+ leekslazylogger: 2.0.7
+ n-readlines: 1.0.1
+ node-fetch: 2.6.1
+ sequelize: 6.5.0_sqlite3@5.0.1
+ terminal-link: 2.1.1
+ to-time-monthsfork: 1.1.4
+devDependencies:
+ eslint: 7.20.0
+ nodemon: 2.0.7
+lockfileVersion: 5.2
+optionalDependencies:
+ sqlite3: 5.0.1
+packages:
+ /@babel/code-frame/7.12.11:
+ dependencies:
+ '@babel/highlight': 7.12.13
+ dev: true
+ resolution:
+ integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
+ /@babel/helper-validator-identifier/7.12.11:
+ dev: true
+ resolution:
+ integrity: sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
+ /@babel/highlight/7.12.13:
+ dependencies:
+ '@babel/helper-validator-identifier': 7.12.11
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+ dev: true
+ resolution:
+ integrity: sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==
+ /@discordjs/collection/0.1.6:
+ dev: false
+ resolution:
+ integrity: sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==
+ /@discordjs/form-data/3.0.1:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.28
+ dev: false
+ engines:
+ node: '>= 6'
+ resolution:
+ integrity: sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==
+ /@eartharoid/dtf/1.0.8:
+ dev: false
+ resolution:
+ integrity: sha512-e3mR8JY6Uuy1Zj89iYEZfvK6s81GlWEPP4gO8NzfItzF4xFGFTVTwRjZ6sCVBmbhj3ouX2pyvx8O9snx4r5Xrg==
+ /@eslint/eslintrc/0.3.0:
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.3.1
+ espree: 7.3.1
+ globals: 12.4.0
+ ignore: 4.0.6
+ import-fresh: 3.3.0
+ js-yaml: 3.14.1
+ lodash: 4.17.20
+ minimatch: 3.0.4
+ strip-json-comments: 3.1.1
+ dev: true
+ engines:
+ node: ^10.12.0 || >=12.0.0
+ resolution:
+ integrity: sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==
+ /@sindresorhus/is/0.14.0:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==
+ /@szmarczak/http-timer/1.1.2:
+ dependencies:
+ defer-to-connect: 1.1.3
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==
+ /@types/node/14.14.28:
+ dev: false
+ resolution:
+ integrity: sha512-lg55ArB+ZiHHbBBttLpzD07akz0QPrZgUODNakeC09i62dnrywr9mFErHuaPlB6I7z+sEbK+IYmplahvplCj2g==
+ /abbrev/1.1.1:
+ resolution:
+ integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+ /abort-controller/3.0.0:
+ dependencies:
+ event-target-shim: 5.0.1
+ dev: false
+ engines:
+ node: '>=6.5'
+ resolution:
+ integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
+ /acorn-jsx/5.3.1_acorn@7.4.1:
+ dependencies:
+ acorn: 7.4.1
+ dev: true
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ resolution:
+ integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
+ /acorn/7.4.1:
+ dev: true
+ engines:
+ node: '>=0.4.0'
+ hasBin: true
+ resolution:
+ integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+ /ajv/6.12.6:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+ resolution:
+ integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ /ajv/7.1.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ uri-js: 4.4.1
+ dev: true
+ resolution:
+ integrity: sha512-svS9uILze/cXbH0z2myCK2Brqprx/+JJYK5pHicT/GQiBfzzhUVAIT6MwqJg8y4xV/zoGsUeuPuwtoiKSGE15g==
+ /ansi-align/3.0.0:
+ dependencies:
+ string-width: 3.1.0
+ resolution:
+ integrity: sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==
+ /ansi-colors/4.1.1:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
+ /ansi-escapes/4.3.1:
+ dependencies:
+ type-fest: 0.11.0
+ dev: false
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==
+ /ansi-regex/2.1.1:
+ dev: false
+ engines:
+ node: '>=0.10.0'
+ optional: true
+ resolution:
+ integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+ /ansi-regex/4.1.0:
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+ /ansi-regex/5.0.0:
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+ /ansi-styles/3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ /ansi-styles/4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ /any-promise/1.3.0:
+ dev: false
+ resolution:
+ integrity: sha1-q8av7tzqUugJzcA3au0845Y10X8=
+ /anymatch/3.1.1:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.2.2
+ dev: true
+ engines:
+ node: '>= 8'
+ resolution:
+ integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
+ /aproba/1.2.0:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+ /are-we-there-yet/1.1.5:
+ dependencies:
+ delegates: 1.0.0
+ readable-stream: 2.3.7
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ /argparse/1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+ dev: true
+ resolution:
+ integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ /asn1/0.2.4:
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ /assert-plus/1.0.0:
+ dev: false
+ engines:
+ node: '>=0.8'
+ optional: true
+ resolution:
+ integrity: sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+ /astral-regex/2.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+ /asynckit/0.4.0:
+ dev: false
+ resolution:
+ integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=
+ /aws-sign2/0.7.0:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+ /aws4/1.11.0:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
+ /balanced-match/1.0.0:
+ resolution:
+ integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+ /bcrypt-pbkdf/1.0.2:
+ dependencies:
+ tweetnacl: 0.14.5
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ /bignumber.js/2.4.0:
+ dev: false
+ resolution:
+ integrity: sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=
+ /binary-extensions/2.2.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+ /block-stream/0.0.9:
+ dependencies:
+ inherits: 2.0.4
+ dev: false
+ engines:
+ node: 0.4 || >=0.5.8
+ optional: true
+ resolution:
+ integrity: sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
+ /boxen/4.2.0:
+ dependencies:
+ ansi-align: 3.0.0
+ camelcase: 5.3.1
+ chalk: 3.0.0
+ cli-boxes: 2.2.1
+ string-width: 4.2.0
+ term-size: 2.2.1
+ type-fest: 0.8.1
+ widest-line: 3.1.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==
+ /boxen/5.0.0:
+ dependencies:
+ ansi-align: 3.0.0
+ camelcase: 6.2.0
+ chalk: 4.1.0
+ cli-boxes: 2.2.1
+ string-width: 4.2.0
+ type-fest: 0.20.2
+ widest-line: 3.1.0
+ wrap-ansi: 7.0.0
+ dev: false
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA==
+ /brace-expansion/1.1.11:
+ dependencies:
+ balanced-match: 1.0.0
+ concat-map: 0.0.1
+ resolution:
+ integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ /braces/3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ /cacheable-request/6.1.0:
+ dependencies:
+ clone-response: 1.0.2
+ get-stream: 5.2.0
+ http-cache-semantics: 4.1.0
+ keyv: 3.1.0
+ lowercase-keys: 2.0.0
+ normalize-url: 4.5.0
+ responselike: 1.0.2
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==
+ /callsites/3.1.0:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+ /camelcase/5.3.1:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+ /camelcase/6.2.0:
+ dev: false
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
+ /caseless/0.12.0:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+ /chalk/2.4.2:
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ /chalk/3.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
+ /chalk/4.1.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
+ /chokidar/3.5.1:
+ dependencies:
+ anymatch: 3.1.1
+ braces: 3.0.2
+ glob-parent: 5.1.1
+ is-binary-path: 2.1.0
+ is-glob: 4.0.1
+ normalize-path: 3.0.0
+ readdirp: 3.5.0
+ dev: true
+ engines:
+ node: '>= 8.10.0'
+ optionalDependencies:
+ fsevents: 2.3.2
+ resolution:
+ integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==
+ /chownr/1.1.4:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+ /ci-info/2.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+ /cli-boxes/2.2.1:
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
+ /clone-response/1.0.2:
+ dependencies:
+ mimic-response: 1.0.1
+ dev: true
+ resolution:
+ integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
+ /code-point-at/1.1.0:
+ dev: false
+ engines:
+ node: '>=0.10.0'
+ optional: true
+ resolution:
+ integrity: sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+ /color-convert/1.9.3:
+ dependencies:
+ color-name: 1.1.3
+ dev: true
+ resolution:
+ integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ /color-convert/2.0.1:
+ dependencies:
+ color-name: 1.1.4
+ engines:
+ node: '>=7.0.0'
+ resolution:
+ integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ /color-name/1.1.3:
+ dev: true
+ resolution:
+ integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+ /color-name/1.1.4:
+ resolution:
+ integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+ /combined-stream/1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+ dev: false
+ engines:
+ node: '>= 0.8'
+ resolution:
+ integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ /concat-map/0.0.1:
+ resolution:
+ integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+ /configstore/5.0.1:
+ dependencies:
+ dot-prop: 5.3.0
+ graceful-fs: 4.2.6
+ make-dir: 3.1.0
+ unique-string: 2.0.0
+ write-file-atomic: 3.0.3
+ xdg-basedir: 4.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==
+ /console-control-strings/1.1.0:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+ /core-util-is/1.0.2:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+ /cross-spawn/7.0.3:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+ dev: true
+ engines:
+ node: '>= 8'
+ resolution:
+ integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ /crypto-random-string/2.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
+ /dashdash/1.14.1:
+ dependencies:
+ assert-plus: 1.0.0
+ dev: false
+ engines:
+ node: '>=0.10'
+ optional: true
+ resolution:
+ integrity: sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ /debug/2.6.9:
+ dependencies:
+ ms: 2.0.0
+ dev: true
+ resolution:
+ integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ /debug/3.2.7:
+ dependencies:
+ ms: 2.1.3
+ resolution:
+ integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+ /debug/4.3.1:
+ dependencies:
+ ms: 2.1.2
+ engines:
+ node: '>=6.0'
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ resolution:
+ integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
+ /decompress-response/3.3.0:
+ dependencies:
+ mimic-response: 1.0.1
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
+ /deep-extend/0.6.0:
+ engines:
+ node: '>=4.0.0'
+ resolution:
+ integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+ /deep-is/0.1.3:
+ dev: true
+ resolution:
+ integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+ /defer-to-connect/1.1.3:
+ dev: true
+ resolution:
+ integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==
+ /delayed-stream/1.0.0:
+ dev: false
+ engines:
+ node: '>=0.4.0'
+ resolution:
+ integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+ /delegates/1.0.0:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+ /detect-libc/1.0.3:
+ dev: false
+ engines:
+ node: '>=0.10'
+ hasBin: true
+ optional: true
+ resolution:
+ integrity: sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+ /discord.js/12.5.1:
+ dependencies:
+ '@discordjs/collection': 0.1.6
+ '@discordjs/form-data': 3.0.1
+ abort-controller: 3.0.0
+ node-fetch: 2.6.1
+ prism-media: 1.2.6
+ setimmediate: 1.0.5
+ tweetnacl: 1.0.3
+ ws: 7.4.3
+ dev: false
+ engines:
+ node: '>=12.0.0'
+ resolution:
+ integrity: sha512-VwZkVaUAIOB9mKdca0I5MefPMTQJTNg0qdgi1huF3iwsFwJ0L5s/Y69AQe+iPmjuV6j9rtKoG0Ta0n9vgEIL6w==
+ /doctrine/3.0.0:
+ dependencies:
+ esutils: 2.0.3
+ dev: true
+ engines:
+ node: '>=6.0.0'
+ resolution:
+ integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ /dot-prop/5.3.0:
+ dependencies:
+ is-obj: 2.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
+ /dotenv/8.2.0:
+ dev: false
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
+ /dottie/2.0.2:
+ dev: false
+ resolution:
+ integrity: sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==
+ /duplexer3/0.1.4:
+ dev: true
+ resolution:
+ integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
+ /ecc-jsbn/0.1.2:
+ dependencies:
+ jsbn: 0.1.1
+ safer-buffer: 2.1.2
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ /emoji-regex/7.0.3:
+ resolution:
+ integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+ /emoji-regex/8.0.0:
+ resolution:
+ integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+ /end-of-stream/1.4.4:
+ dependencies:
+ once: 1.4.0
+ dev: true
+ resolution:
+ integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ /enquirer/2.3.6:
+ dependencies:
+ ansi-colors: 4.1.1
+ dev: true
+ engines:
+ node: '>=8.6'
+ resolution:
+ integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
+ /escape-goat/2.1.1:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==
+ /escape-string-regexp/1.0.5:
+ dev: true
+ engines:
+ node: '>=0.8.0'
+ resolution:
+ integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+ /eslint-scope/5.1.1:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+ dev: true
+ engines:
+ node: '>=8.0.0'
+ resolution:
+ integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+ /eslint-utils/2.1.0:
+ dependencies:
+ eslint-visitor-keys: 1.3.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
+ /eslint-visitor-keys/1.3.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
+ /eslint-visitor-keys/2.0.0:
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
+ /eslint/7.20.0:
+ dependencies:
+ '@babel/code-frame': 7.12.11
+ '@eslint/eslintrc': 0.3.0
+ ajv: 6.12.6
+ chalk: 4.1.0
+ cross-spawn: 7.0.3
+ debug: 4.3.1
+ doctrine: 3.0.0
+ enquirer: 2.3.6
+ eslint-scope: 5.1.1
+ eslint-utils: 2.1.0
+ eslint-visitor-keys: 2.0.0
+ espree: 7.3.1
+ esquery: 1.4.0
+ esutils: 2.0.3
+ file-entry-cache: 6.0.0
+ functional-red-black-tree: 1.0.1
+ glob-parent: 5.1.1
+ globals: 12.4.0
+ ignore: 4.0.6
+ import-fresh: 3.3.0
+ imurmurhash: 0.1.4
+ is-glob: 4.0.1
+ js-yaml: 3.14.1
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.4.1
+ lodash: 4.17.20
+ minimatch: 3.0.4
+ natural-compare: 1.4.0
+ optionator: 0.9.1
+ progress: 2.0.3
+ regexpp: 3.1.0
+ semver: 7.3.4
+ strip-ansi: 6.0.0
+ strip-json-comments: 3.1.1
+ table: 6.0.7
+ text-table: 0.2.0
+ v8-compile-cache: 2.2.0
+ dev: true
+ engines:
+ node: ^10.12.0 || >=12.0.0
+ hasBin: true
+ resolution:
+ integrity: sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==
+ /espree/7.3.1:
+ dependencies:
+ acorn: 7.4.1
+ acorn-jsx: 5.3.1_acorn@7.4.1
+ eslint-visitor-keys: 1.3.0
+ dev: true
+ engines:
+ node: ^10.12.0 || >=12.0.0
+ resolution:
+ integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
+ /esprima/4.0.1:
+ dev: true
+ engines:
+ node: '>=4'
+ hasBin: true
+ resolution:
+ integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+ /esquery/1.4.0:
+ dependencies:
+ estraverse: 5.2.0
+ dev: true
+ engines:
+ node: '>=0.10'
+ resolution:
+ integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
+ /esrecurse/4.3.0:
+ dependencies:
+ estraverse: 5.2.0
+ dev: true
+ engines:
+ node: '>=4.0'
+ resolution:
+ integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ /estraverse/4.3.0:
+ dev: true
+ engines:
+ node: '>=4.0'
+ resolution:
+ integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+ /estraverse/5.2.0:
+ dev: true
+ engines:
+ node: '>=4.0'
+ resolution:
+ integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
+ /esutils/2.0.3:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+ /event-target-shim/5.0.1:
+ dev: false
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
+ /extend/3.0.2:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+ /extsprintf/1.3.0:
+ dev: false
+ engines:
+ '0': node >=0.6.0
+ optional: true
+ resolution:
+ integrity: sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+ /fast-deep-equal/3.1.3:
+ resolution:
+ integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+ /fast-json-stable-stringify/2.1.0:
+ resolution:
+ integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+ /fast-levenshtein/2.0.6:
+ dev: true
+ resolution:
+ integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+ /file-entry-cache/6.0.0:
+ dependencies:
+ flat-cache: 3.0.4
+ dev: true
+ engines:
+ node: ^10.12.0 || >=12.0.0
+ resolution:
+ integrity: sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==
+ /fill-range/7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ /flat-cache/3.0.4:
+ dependencies:
+ flatted: 3.1.1
+ rimraf: 3.0.2
+ dev: true
+ engines:
+ node: ^10.12.0 || >=12.0.0
+ resolution:
+ integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+ /flatted/3.1.1:
+ dev: true
+ resolution:
+ integrity: sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
+ /forever-agent/0.6.1:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+ /form-data/2.3.3:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.28
+ dev: false
+ engines:
+ node: '>= 0.12'
+ optional: true
+ resolution:
+ integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ /fs-minipass/1.2.7:
+ dependencies:
+ minipass: 2.9.0
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
+ /fs.realpath/1.0.0:
+ resolution:
+ integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+ /fsevents/2.3.2:
+ dev: true
+ engines:
+ node: ^8.16.0 || ^10.6.0 || >=11.0.0
+ optional: true
+ os:
+ - darwin
+ resolution:
+ integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+ /fstream/1.0.12:
+ dependencies:
+ graceful-fs: 4.2.6
+ inherits: 2.0.4
+ mkdirp: 0.5.5
+ rimraf: 2.7.1
+ dev: false
+ engines:
+ node: '>=0.6'
+ optional: true
+ resolution:
+ integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
+ /functional-red-black-tree/1.0.1:
+ dev: true
+ resolution:
+ integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+ /gauge/2.7.4:
+ dependencies:
+ aproba: 1.2.0
+ console-control-strings: 1.1.0
+ has-unicode: 2.0.1
+ object-assign: 4.1.1
+ signal-exit: 3.0.3
+ string-width: 1.0.2
+ strip-ansi: 3.0.1
+ wide-align: 1.1.3
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ /get-stream/4.1.0:
+ dependencies:
+ pump: 3.0.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ /get-stream/5.2.0:
+ dependencies:
+ pump: 3.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+ /getpass/0.1.7:
+ dependencies:
+ assert-plus: 1.0.0
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ /glob-parent/5.1.1:
+ dependencies:
+ is-glob: 4.0.1
+ dev: true
+ engines:
+ node: '>= 6'
+ resolution:
+ integrity: sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
+ /glob/7.1.6:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.0.4
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ resolution:
+ integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ /global-dirs/2.1.0:
+ dependencies:
+ ini: 1.3.7
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==
+ /globals/12.4.0:
+ dependencies:
+ type-fest: 0.8.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
+ /got/9.6.0:
+ dependencies:
+ '@sindresorhus/is': 0.14.0
+ '@szmarczak/http-timer': 1.1.2
+ cacheable-request: 6.1.0
+ decompress-response: 3.3.0
+ duplexer3: 0.1.4
+ get-stream: 4.1.0
+ lowercase-keys: 1.0.1
+ mimic-response: 1.0.1
+ p-cancelable: 1.1.0
+ to-readable-stream: 1.0.0
+ url-parse-lax: 3.0.0
+ dev: true
+ engines:
+ node: '>=8.6'
+ resolution:
+ integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==
+ /graceful-fs/4.2.6:
+ resolution:
+ integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
+ /har-schema/2.0.0:
+ dev: false
+ engines:
+ node: '>=4'
+ optional: true
+ resolution:
+ integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+ /har-validator/5.1.5:
+ dependencies:
+ ajv: 6.12.6
+ har-schema: 2.0.0
+ deprecated: this library is no longer supported
+ dev: false
+ engines:
+ node: '>=6'
+ optional: true
+ resolution:
+ integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
+ /has-flag/3.0.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+ /has-flag/4.0.0:
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+ /has-unicode/2.0.1:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+ /has-yarn/2.1.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==
+ /http-cache-semantics/4.1.0:
+ dev: true
+ resolution:
+ integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
+ /http-signature/1.2.0:
+ dependencies:
+ assert-plus: 1.0.0
+ jsprim: 1.4.1
+ sshpk: 1.16.1
+ dev: false
+ engines:
+ node: '>=0.8'
+ npm: '>=1.3.7'
+ optional: true
+ resolution:
+ integrity: sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ /iconv-lite/0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: false
+ engines:
+ node: '>=0.10.0'
+ optional: true
+ resolution:
+ integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ /ignore-by-default/1.0.1:
+ dev: true
+ resolution:
+ integrity: sha1-SMptcvbGo68Aqa1K5odr44ieKwk=
+ /ignore-walk/3.0.3:
+ dependencies:
+ minimatch: 3.0.4
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==
+ /ignore/4.0.6:
+ dev: true
+ engines:
+ node: '>= 4'
+ resolution:
+ integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+ /import-fresh/3.3.0:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ /import-lazy/2.1.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
+ /imurmurhash/0.1.4:
+ dev: true
+ engines:
+ node: '>=0.8.19'
+ resolution:
+ integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=
+ /inflection/1.12.0:
+ dev: false
+ engines:
+ '0': node >= 0.4.0
+ resolution:
+ integrity: sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=
+ /inflight/1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+ resolution:
+ integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ /inherits/2.0.4:
+ resolution:
+ integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+ /ini/1.3.7:
+ dev: true
+ resolution:
+ integrity: sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
+ /ini/1.3.8:
+ resolution:
+ integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+ /is-binary-path/2.1.0:
+ dependencies:
+ binary-extensions: 2.2.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ /is-ci/2.0.0:
+ dependencies:
+ ci-info: 2.0.0
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+ /is-extglob/2.1.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+ /is-fullwidth-code-point/1.0.0:
+ dependencies:
+ number-is-nan: 1.0.1
+ dev: false
+ engines:
+ node: '>=0.10.0'
+ optional: true
+ resolution:
+ integrity: sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ /is-fullwidth-code-point/2.0.0:
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+ /is-fullwidth-code-point/3.0.0:
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+ /is-glob/4.0.1:
+ dependencies:
+ is-extglob: 2.1.1
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ /is-installed-globally/0.3.2:
+ dependencies:
+ global-dirs: 2.1.0
+ is-path-inside: 3.0.2
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==
+ /is-npm/4.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==
+ /is-number/7.0.0:
+ dev: true
+ engines:
+ node: '>=0.12.0'
+ resolution:
+ integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+ /is-obj/2.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
+ /is-path-inside/3.0.2:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==
+ /is-typedarray/1.0.0:
+ resolution:
+ integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+ /is-yarn-global/0.3.0:
+ dev: true
+ resolution:
+ integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==
+ /isarray/1.0.0:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+ /isexe/2.0.0:
+ resolution:
+ integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+ /isstream/0.1.2:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+ /js-tokens/4.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+ /js-yaml/3.14.1:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+ /jsbn/0.1.1:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+ /json-buffer/3.0.0:
+ dev: true
+ resolution:
+ integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=
+ /json-schema-traverse/0.4.1:
+ resolution:
+ integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+ /json-schema-traverse/1.0.0:
+ dev: true
+ resolution:
+ integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+ /json-schema/0.2.3:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+ /json-stable-stringify-without-jsonify/1.0.1:
+ dev: true
+ resolution:
+ integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+ /json-stringify-safe/5.0.1:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+ /jsprim/1.4.1:
+ dependencies:
+ assert-plus: 1.0.0
+ extsprintf: 1.3.0
+ json-schema: 0.2.3
+ verror: 1.10.0
+ dev: false
+ engines:
+ '0': node >=0.6.0
+ optional: true
+ resolution:
+ integrity: sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ /keyv/3.1.0:
+ dependencies:
+ json-buffer: 3.0.0
+ dev: true
+ resolution:
+ integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==
+ /latest-version/5.1.0:
+ dependencies:
+ package-json: 6.5.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==
+ /leeks.js/0.0.9:
+ dev: false
+ resolution:
+ integrity: sha512-e6UVJ1fj8f2clpHy+KpXVWVxjzB3XYFGyKRJHDlT8Gy/75BT+9bYUacpHSCoXp7RTtyMSr4eBjZrp0nHyyQVbg==
+ /leekslazylogger/2.0.7:
+ dependencies:
+ '@eartharoid/dtf': 1.0.8
+ leeks.js: 0.0.9
+ lodash.merge: 4.6.2
+ dev: false
+ resolution:
+ integrity: sha512-HC0kNjPSOAKx4L9HwmKuvJp1OQQgS6U2IjXq6plKc845TcaAFRNw/2ILHze29z+fPn+44xUeI49FrLuVgSUL/A==
+ /levn/0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ dev: true
+ engines:
+ node: '>= 0.8.0'
+ resolution:
+ integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ /lodash.merge/4.6.2:
+ dev: false
+ resolution:
+ integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+ /lodash/4.17.20:
+ resolution:
+ integrity: sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
+ /lowercase-keys/1.0.1:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
+ /lowercase-keys/2.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
+ /lru-cache/6.0.0:
+ dependencies:
+ yallist: 4.0.0
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ /make-dir/3.1.0:
+ dependencies:
+ semver: 6.3.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ /mime-db/1.45.0:
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==
+ /mime-types/2.1.28:
+ dependencies:
+ mime-db: 1.45.0
+ dev: false
+ engines:
+ node: '>= 0.6'
+ resolution:
+ integrity: sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==
+ /mimic-response/1.0.1:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
+ /minimatch/3.0.4:
+ dependencies:
+ brace-expansion: 1.1.11
+ resolution:
+ integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ /minimist/1.2.5:
+ resolution:
+ integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+ /minipass/2.9.0:
+ dependencies:
+ safe-buffer: 5.2.1
+ yallist: 3.1.1
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
+ /minizlib/1.3.3:
+ dependencies:
+ minipass: 2.9.0
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
+ /mkdirp/0.5.5:
+ dependencies:
+ minimist: 1.2.5
+ dev: false
+ hasBin: true
+ optional: true
+ resolution:
+ integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+ /moment-timezone/0.5.33:
+ dependencies:
+ moment: 2.29.1
+ dev: false
+ resolution:
+ integrity: sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==
+ /moment/2.29.1:
+ dev: false
+ resolution:
+ integrity: sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
+ /ms/2.0.0:
+ dev: true
+ resolution:
+ integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+ /ms/2.1.2:
+ resolution:
+ integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+ /ms/2.1.3:
+ resolution:
+ integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+ /n-readlines/1.0.1:
+ dev: false
+ engines:
+ node: '>=6.x.x'
+ resolution:
+ integrity: sha512-z4SyAIVgMy7CkgsoNw7YVz40v0g4+WWvvqy8+ZdHrCtgevcEO758WQyrYcw3XPxcLxF+//RszTz/rO48nzD0wQ==
+ /natural-compare/1.4.0:
+ dev: true
+ resolution:
+ integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+ /needle/2.6.0:
+ dependencies:
+ debug: 3.2.7
+ iconv-lite: 0.4.24
+ sax: 1.2.4
+ dev: false
+ engines:
+ node: '>= 4.4.x'
+ hasBin: true
+ optional: true
+ resolution:
+ integrity: sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==
+ /node-addon-api/3.1.0:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==
+ /node-fetch/2.6.1:
+ dev: false
+ engines:
+ node: 4.x || >=6.0.0
+ resolution:
+ integrity: sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
+ /node-gyp/3.8.0:
+ dependencies:
+ fstream: 1.0.12
+ glob: 7.1.6
+ graceful-fs: 4.2.6
+ mkdirp: 0.5.5
+ nopt: 3.0.6
+ npmlog: 4.1.2
+ osenv: 0.1.5
+ request: 2.88.2
+ rimraf: 2.7.1
+ semver: 5.3.0
+ tar: 2.2.2
+ which: 1.3.1
+ dev: false
+ engines:
+ node: '>= 0.8.0'
+ hasBin: true
+ optional: true
+ resolution:
+ integrity: sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==
+ /node-pre-gyp/0.11.0:
+ dependencies:
+ detect-libc: 1.0.3
+ mkdirp: 0.5.5
+ needle: 2.6.0
+ nopt: 4.0.3
+ npm-packlist: 1.4.8
+ npmlog: 4.1.2
+ rc: 1.2.8
+ rimraf: 2.7.1
+ semver: 5.7.1
+ tar: 4.4.13
+ deprecated: 'Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future'
+ dev: false
+ hasBin: true
+ optional: true
+ resolution:
+ integrity: sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==
+ /nodemon/2.0.7:
+ dependencies:
+ chokidar: 3.5.1
+ debug: 3.2.7
+ ignore-by-default: 1.0.1
+ minimatch: 3.0.4
+ pstree.remy: 1.1.8
+ semver: 5.7.1
+ supports-color: 5.5.0
+ touch: 3.1.0
+ undefsafe: 2.0.3
+ update-notifier: 4.1.3
+ dev: true
+ engines:
+ node: '>=8.10.0'
+ hasBin: true
+ requiresBuild: true
+ resolution:
+ integrity: sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==
+ /nopt/1.0.10:
+ dependencies:
+ abbrev: 1.1.1
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=
+ /nopt/3.0.6:
+ dependencies:
+ abbrev: 1.1.1
+ dev: false
+ hasBin: true
+ optional: true
+ resolution:
+ integrity: sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
+ /nopt/4.0.3:
+ dependencies:
+ abbrev: 1.1.1
+ osenv: 0.1.5
+ dev: false
+ hasBin: true
+ optional: true
+ resolution:
+ integrity: sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
+ /normalize-path/3.0.0:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+ /normalize-url/4.5.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==
+ /npm-bundled/1.1.1:
+ dependencies:
+ npm-normalize-package-bin: 1.0.1
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==
+ /npm-normalize-package-bin/1.0.1:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
+ /npm-packlist/1.4.8:
+ dependencies:
+ ignore-walk: 3.0.3
+ npm-bundled: 1.1.1
+ npm-normalize-package-bin: 1.0.1
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
+ /npmlog/4.1.2:
+ dependencies:
+ are-we-there-yet: 1.1.5
+ console-control-strings: 1.1.0
+ gauge: 2.7.4
+ set-blocking: 2.0.0
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ /number-is-nan/1.0.1:
+ dev: false
+ engines:
+ node: '>=0.10.0'
+ optional: true
+ resolution:
+ integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+ /oauth-sign/0.9.0:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+ /object-assign/4.1.1:
+ dev: false
+ engines:
+ node: '>=0.10.0'
+ optional: true
+ resolution:
+ integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+ /once/1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+ resolution:
+ integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ /optionator/0.9.1:
+ dependencies:
+ deep-is: 0.1.3
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.3
+ dev: true
+ engines:
+ node: '>= 0.8.0'
+ resolution:
+ integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+ /os-homedir/1.0.2:
+ dev: false
+ engines:
+ node: '>=0.10.0'
+ optional: true
+ resolution:
+ integrity: sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+ /os-tmpdir/1.0.2:
+ dev: false
+ engines:
+ node: '>=0.10.0'
+ optional: true
+ resolution:
+ integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+ /osenv/0.1.5:
+ dependencies:
+ os-homedir: 1.0.2
+ os-tmpdir: 1.0.2
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+ /p-cancelable/1.1.0:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==
+ /package-json/6.5.0:
+ dependencies:
+ got: 9.6.0
+ registry-auth-token: 4.2.1
+ registry-url: 5.1.0
+ semver: 6.3.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==
+ /parent-module/1.0.1:
+ dependencies:
+ callsites: 3.1.0
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ /path-is-absolute/1.0.1:
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+ /path-key/3.1.1:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+ /performance-now/2.1.0:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+ /picomatch/2.2.2:
+ dev: true
+ engines:
+ node: '>=8.6'
+ resolution:
+ integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
+ /prelude-ls/1.2.1:
+ dev: true
+ engines:
+ node: '>= 0.8.0'
+ resolution:
+ integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+ /prepend-http/2.0.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
+ /prism-media/1.2.6:
+ dev: false
+ peerDependencies:
+ '@discordjs/opus': ^0.4.0
+ ffmpeg-static: ^4.2.7 || ^3.0.0 || ^2.4.0
+ node-opus: ^0.3.3
+ opusscript: ^0.0.7
+ peerDependenciesMeta:
+ '@discordjs/opus':
+ optional: true
+ ffmpeg-static:
+ optional: true
+ node-opus:
+ optional: true
+ opusscript:
+ optional: true
+ resolution:
+ integrity: sha512-I1Ys8HA+9aSKQ2jbkO3r6p9Z+tMpSssGhucgxXvc0sSpOi0kK550rDQnKtAS7Z5TzPQeLJdBmK2Br8x+5137lg==
+ /process-nextick-args/2.0.1:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+ /progress/2.0.3:
+ dev: true
+ engines:
+ node: '>=0.4.0'
+ resolution:
+ integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+ /psl/1.8.0:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
+ /pstree.remy/1.1.8:
+ dev: true
+ resolution:
+ integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
+ /pump/3.0.0:
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+ dev: true
+ resolution:
+ integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ /punycode/2.1.1:
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+ /pupa/2.1.1:
+ dependencies:
+ escape-goat: 2.1.1
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==
+ /qs/6.5.2:
+ dev: false
+ engines:
+ node: '>=0.6'
+ optional: true
+ resolution:
+ integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+ /rc/1.2.8:
+ dependencies:
+ deep-extend: 0.6.0
+ ini: 1.3.8
+ minimist: 1.2.5
+ strip-json-comments: 2.0.1
+ hasBin: true
+ resolution:
+ integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ /readable-stream/2.3.7:
+ dependencies:
+ core-util-is: 1.0.2
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ /readdirp/3.5.0:
+ dependencies:
+ picomatch: 2.2.2
+ dev: true
+ engines:
+ node: '>=8.10.0'
+ resolution:
+ integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
+ /regexpp/3.1.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
+ /registry-auth-token/4.2.1:
+ dependencies:
+ rc: 1.2.8
+ dev: true
+ engines:
+ node: '>=6.0.0'
+ resolution:
+ integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==
+ /registry-url/5.1.0:
+ dependencies:
+ rc: 1.2.8
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==
+ /request/2.88.2:
+ dependencies:
+ aws-sign2: 0.7.0
+ aws4: 1.11.0
+ caseless: 0.12.0
+ combined-stream: 1.0.8
+ extend: 3.0.2
+ forever-agent: 0.6.1
+ form-data: 2.3.3
+ har-validator: 5.1.5
+ http-signature: 1.2.0
+ is-typedarray: 1.0.0
+ isstream: 0.1.2
+ json-stringify-safe: 5.0.1
+ mime-types: 2.1.28
+ oauth-sign: 0.9.0
+ performance-now: 2.1.0
+ qs: 6.5.2
+ safe-buffer: 5.2.1
+ tough-cookie: 2.5.0
+ tunnel-agent: 0.6.0
+ uuid: 3.4.0
+ deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
+ dev: false
+ engines:
+ node: '>= 6'
+ optional: true
+ resolution:
+ integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
+ /require-from-string/2.0.2:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+ /resolve-from/4.0.0:
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+ /responselike/1.0.2:
+ dependencies:
+ lowercase-keys: 1.0.1
+ dev: true
+ resolution:
+ integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=
+ /retry-as-promised/3.2.0:
+ dependencies:
+ any-promise: 1.3.0
+ dev: false
+ resolution:
+ integrity: sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg==
+ /rimraf/2.7.1:
+ dependencies:
+ glob: 7.1.6
+ dev: false
+ hasBin: true
+ optional: true
+ resolution:
+ integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ /rimraf/3.0.2:
+ dependencies:
+ glob: 7.1.6
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ /safe-buffer/5.1.2:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+ /safe-buffer/5.2.1:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+ /safer-buffer/2.1.2:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+ /sax/1.2.4:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+ /semver-diff/3.1.1:
+ dependencies:
+ semver: 6.3.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==
+ /semver/5.3.0:
+ dev: false
+ hasBin: true
+ optional: true
+ resolution:
+ integrity: sha1-myzl094C0XxgEq0yaqa00M9U+U8=
+ /semver/5.7.1:
+ hasBin: true
+ resolution:
+ integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+ /semver/6.3.0:
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+ /semver/7.3.4:
+ dependencies:
+ lru-cache: 6.0.0
+ engines:
+ node: '>=10'
+ hasBin: true
+ resolution:
+ integrity: sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
+ /sequelize-pool/6.1.0:
+ dev: false
+ engines:
+ node: '>= 10.0.0'
+ resolution:
+ integrity: sha512-4YwEw3ZgK/tY/so+GfnSgXkdwIJJ1I32uZJztIEgZeAO6HMgj64OzySbWLgxj+tXhZCJnzRfkY9gINw8Ft8ZMg==
+ /sequelize/6.5.0_sqlite3@5.0.1:
+ dependencies:
+ debug: 4.3.1
+ dottie: 2.0.2
+ inflection: 1.12.0
+ lodash: 4.17.20
+ moment: 2.29.1
+ moment-timezone: 0.5.33
+ retry-as-promised: 3.2.0
+ semver: 7.3.4
+ sequelize-pool: 6.1.0
+ sqlite3: 5.0.1
+ toposort-class: 1.0.1
+ uuid: 8.3.2
+ validator: 10.11.0
+ wkx: 0.5.0
+ dev: false
+ engines:
+ node: '>=10.0.0'
+ peerDependencies:
+ mariadb: '*'
+ mysql2: '*'
+ pg: '*'
+ pg-hstore: '*'
+ sqlite3: '*'
+ tedious: '*'
+ peerDependenciesMeta:
+ mariadb:
+ optional: true
+ mysql2:
+ optional: true
+ pg:
+ optional: true
+ pg-hstore:
+ optional: true
+ sqlite3:
+ optional: true
+ tedious:
+ optional: true
+ resolution:
+ integrity: sha512-owBt8fnzVy8E1OvyCyfCdVk7OOLyPVrBCMEf+CvRReC5oCyo+UqeXCtwaex9L6LM9ifZ1i3TG3sFeM5MgLK0CQ==
+ /set-blocking/2.0.0:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+ /setimmediate/1.0.5:
+ dev: false
+ resolution:
+ integrity: sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+ /shebang-command/2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ /shebang-regex/3.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+ /signal-exit/3.0.3:
+ resolution:
+ integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
+ /slice-ansi/4.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ astral-regex: 2.0.0
+ is-fullwidth-code-point: 3.0.0
+ dev: true
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
+ /sprintf-js/1.0.3:
+ dev: true
+ resolution:
+ integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+ /sqlite3/5.0.1:
+ dependencies:
+ node-addon-api: 3.1.0
+ node-pre-gyp: 0.11.0
+ dev: false
+ optional: true
+ optionalDependencies:
+ node-gyp: 3.8.0
+ peerDependenciesMeta:
+ node-gyp:
+ optional: true
+ requiresBuild: true
+ resolution:
+ integrity: sha512-kh2lTIcYNfmVcvhVJihsYuPj9U0xzBbh6bmqILO2hkryWSC9RRhzYmkIDtJkJ+d8Kg4wZRJ0T1reyHUEspICfg==
+ /sshpk/1.16.1:
+ dependencies:
+ asn1: 0.2.4
+ assert-plus: 1.0.0
+ bcrypt-pbkdf: 1.0.2
+ dashdash: 1.14.1
+ ecc-jsbn: 0.1.2
+ getpass: 0.1.7
+ jsbn: 0.1.1
+ safer-buffer: 2.1.2
+ tweetnacl: 0.14.5
+ dev: false
+ engines:
+ node: '>=0.10.0'
+ hasBin: true
+ optional: true
+ resolution:
+ integrity: sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+ /string-width/1.0.2:
+ dependencies:
+ code-point-at: 1.1.0
+ is-fullwidth-code-point: 1.0.0
+ strip-ansi: 3.0.1
+ dev: false
+ engines:
+ node: '>=0.10.0'
+ optional: true
+ resolution:
+ integrity: sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ /string-width/3.1.0:
+ dependencies:
+ emoji-regex: 7.0.3
+ is-fullwidth-code-point: 2.0.0
+ strip-ansi: 5.2.0
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ /string-width/4.2.0:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.0
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
+ /string_decoder/1.1.1:
+ dependencies:
+ safe-buffer: 5.1.2
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ /strip-ansi/3.0.1:
+ dependencies:
+ ansi-regex: 2.1.1
+ dev: false
+ engines:
+ node: '>=0.10.0'
+ optional: true
+ resolution:
+ integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ /strip-ansi/5.2.0:
+ dependencies:
+ ansi-regex: 4.1.0
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ /strip-ansi/6.0.0:
+ dependencies:
+ ansi-regex: 5.0.0
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ /strip-json-comments/2.0.1:
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+ /strip-json-comments/3.1.1:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+ /supports-color/5.5.0:
+ dependencies:
+ has-flag: 3.0.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ /supports-color/7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ /supports-hyperlinks/2.1.0:
+ dependencies:
+ has-flag: 4.0.0
+ supports-color: 7.2.0
+ dev: false
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==
+ /table/6.0.7:
+ dependencies:
+ ajv: 7.1.0
+ lodash: 4.17.20
+ slice-ansi: 4.0.0
+ string-width: 4.2.0
+ dev: true
+ engines:
+ node: '>=10.0.0'
+ resolution:
+ integrity: sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==
+ /tar/2.2.2:
+ dependencies:
+ block-stream: 0.0.9
+ fstream: 1.0.12
+ inherits: 2.0.4
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==
+ /tar/4.4.13:
+ dependencies:
+ chownr: 1.1.4
+ fs-minipass: 1.2.7
+ minipass: 2.9.0
+ minizlib: 1.3.3
+ mkdirp: 0.5.5
+ safe-buffer: 5.2.1
+ yallist: 3.1.1
+ dev: false
+ engines:
+ node: '>=4.5'
+ optional: true
+ resolution:
+ integrity: sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
+ /term-size/2.2.1:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==
+ /terminal-link/2.1.1:
+ dependencies:
+ ansi-escapes: 4.3.1
+ supports-hyperlinks: 2.1.0
+ dev: false
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
+ /text-table/0.2.0:
+ dev: true
+ resolution:
+ integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+ /to-readable-stream/1.0.0:
+ dev: true
+ engines:
+ node: '>=6'
+ resolution:
+ integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==
+ /to-regex-range/5.0.1:
+ dependencies:
+ is-number: 7.0.0
+ dev: true
+ engines:
+ node: '>=8.0'
+ resolution:
+ integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ /to-time-monthsfork/1.1.4:
+ dependencies:
+ bignumber.js: 2.4.0
+ dev: false
+ engines:
+ node: '>=4.6'
+ resolution:
+ integrity: sha512-3bWuIwm9QeOAq/UClxFp86QMSJ4GVHmAT8X+pkM0mIMVrpJPLfSieY5qvSsfLJugLNWTVpYJ2ayKWXH3jcAdow==
+ /toposort-class/1.0.1:
+ dev: false
+ resolution:
+ integrity: sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=
+ /touch/3.1.0:
+ dependencies:
+ nopt: 1.0.10
+ dev: true
+ hasBin: true
+ resolution:
+ integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==
+ /tough-cookie/2.5.0:
+ dependencies:
+ psl: 1.8.0
+ punycode: 2.1.1
+ dev: false
+ engines:
+ node: '>=0.8'
+ optional: true
+ resolution:
+ integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ /tunnel-agent/0.6.0:
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ /tweetnacl/0.14.5:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+ /tweetnacl/1.0.3:
+ dev: false
+ resolution:
+ integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==
+ /type-check/0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+ dev: true
+ engines:
+ node: '>= 0.8.0'
+ resolution:
+ integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ /type-fest/0.11.0:
+ dev: false
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
+ /type-fest/0.20.2:
+ dev: false
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+ /type-fest/0.8.1:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+ /typedarray-to-buffer/3.1.5:
+ dependencies:
+ is-typedarray: 1.0.0
+ dev: true
+ resolution:
+ integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ /undefsafe/2.0.3:
+ dependencies:
+ debug: 2.6.9
+ dev: true
+ resolution:
+ integrity: sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==
+ /unique-string/2.0.0:
+ dependencies:
+ crypto-random-string: 2.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
+ /update-notifier/4.1.3:
+ dependencies:
+ boxen: 4.2.0
+ chalk: 3.0.0
+ configstore: 5.0.1
+ has-yarn: 2.1.0
+ import-lazy: 2.1.0
+ is-ci: 2.0.0
+ is-installed-globally: 0.3.2
+ is-npm: 4.0.0
+ is-yarn-global: 0.3.0
+ latest-version: 5.1.0
+ pupa: 2.1.1
+ semver-diff: 3.1.1
+ xdg-basedir: 4.0.0
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==
+ /uri-js/4.4.1:
+ dependencies:
+ punycode: 2.1.1
+ resolution:
+ integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ /url-parse-lax/3.0.0:
+ dependencies:
+ prepend-http: 2.0.0
+ dev: true
+ engines:
+ node: '>=4'
+ resolution:
+ integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=
+ /util-deprecate/1.0.2:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+ /uuid/3.4.0:
+ dev: false
+ hasBin: true
+ optional: true
+ resolution:
+ integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+ /uuid/8.3.2:
+ dev: false
+ hasBin: true
+ resolution:
+ integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+ /v8-compile-cache/2.2.0:
+ dev: true
+ resolution:
+ integrity: sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==
+ /validator/10.11.0:
+ dev: false
+ engines:
+ node: '>= 0.10'
+ resolution:
+ integrity: sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==
+ /verror/1.10.0:
+ dependencies:
+ assert-plus: 1.0.0
+ core-util-is: 1.0.2
+ extsprintf: 1.3.0
+ dev: false
+ engines:
+ '0': node >=0.6.0
+ optional: true
+ resolution:
+ integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ /which/1.3.1:
+ dependencies:
+ isexe: 2.0.0
+ dev: false
+ hasBin: true
+ optional: true
+ resolution:
+ integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ /which/2.0.2:
+ dependencies:
+ isexe: 2.0.0
+ dev: true
+ engines:
+ node: '>= 8'
+ hasBin: true
+ resolution:
+ integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ /wide-align/1.1.3:
+ dependencies:
+ string-width: 1.0.2
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ /widest-line/3.1.0:
+ dependencies:
+ string-width: 4.2.0
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==
+ /wkx/0.5.0:
+ dependencies:
+ '@types/node': 14.14.28
+ dev: false
+ resolution:
+ integrity: sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==
+ /word-wrap/1.2.3:
+ dev: true
+ engines:
+ node: '>=0.10.0'
+ resolution:
+ integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+ /wrap-ansi/7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.0
+ strip-ansi: 6.0.0
+ dev: false
+ engines:
+ node: '>=10'
+ resolution:
+ integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ /wrappy/1.0.2:
+ resolution:
+ integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+ /write-file-atomic/3.0.3:
+ dependencies:
+ imurmurhash: 0.1.4
+ is-typedarray: 1.0.0
+ signal-exit: 3.0.3
+ typedarray-to-buffer: 3.1.5
+ dev: true
+ resolution:
+ integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ /ws/7.4.3:
+ dev: false
+ engines:
+ node: '>=8.3.0'
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ resolution:
+ integrity: sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==
+ /xdg-basedir/4.0.0:
+ dev: true
+ engines:
+ node: '>=8'
+ resolution:
+ integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
+ /yallist/3.1.1:
+ dev: false
+ optional: true
+ resolution:
+ integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+ /yallist/4.0.0:
+ resolution:
+ integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+specifiers:
+ '@eartharoid/dtf': ^1.0.8
+ boxen: ^5.0.0
+ discord.js: ^12.5.1
+ dotenv: ^8.2.0
+ eslint: ^7.19.0
+ leekslazylogger: ^2.0.7
+ n-readlines: ^1.0.1
+ node-fetch: ^2.6.1
+ nodemon: ^2.0.7
+ sequelize: ^6.5.0
+ sqlite3: ^5.0.0
+ terminal-link: ^2.1.1
+ to-time-monthsfork: ^1.1.3
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..4121502
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,3 @@
+mkdocs-material
+mkdocs-awesome-pages-plugin
+mkdocs-git-revision-date-localized-plugin
diff --git a/src/commands/add.js b/src/commands/add.js
deleted file mode 100644
index 53aa84b..0000000
--- a/src/commands/add.js
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const { MessageEmbed } = require('discord.js');
-
-module.exports = {
- name: 'add',
- description: 'Add a member to a ticket channel',
- usage: '<@member> [... #channel]',
- aliases: ['none'],
- example: 'add @member to #ticket-23',
- args: true,
- async execute(client, message, args, log, {config, Ticket}) {
- const guild = client.guilds.cache.get(config.guild);
-
- const notTicket = new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **This isn\'t a ticket channel**')
- .setDescription('Use this command in the ticket channel you want to add a user to, or mention the channel.')
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL());
-
- let ticket;
-
- let channel = message.mentions.channels.first();
-
- if (!channel) {
- channel = message.channel;
- ticket = await Ticket.findOne({ where: { channel: message.channel.id } });
- if (!ticket) return message.channel.send(notTicket);
-
- } else {
- ticket = await Ticket.findOne({ where: { channel: channel.id } });
- if (!ticket) {
- notTicket
- .setTitle('❌ **Channel is not a ticket**')
- .setDescription(`${channel} is not a ticket channel.`);
- return message.channel.send(notTicket);
- }
- }
-
- if (message.author.id !== ticket.creator && !message.member.roles.cache.has(config.staff_role)) {
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **No permission**')
- .setDescription(`You don't have permission to alter ${channel} as it does not belong to you and you are not staff.`)
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- let member = guild.member(message.mentions.users.first() || guild.members.cache.get(args[0]));
-
- if (!member) {
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **Unknown member**')
- .setDescription('Please mention a valid member.')
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- try {
- channel.updateOverwrite(member.user, {
- VIEW_CHANNEL: true,
- SEND_MESSAGES: true,
- ATTACH_FILES: true,
- READ_MESSAGE_HISTORY: true
- });
-
- if (channel.id !== message.channel.id) {
- channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(member.user.username, member.user.displayAvatarURL())
- .setTitle('**Member added**')
- .setDescription(`${member} has been added by ${message.author}`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- message.channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(member.user.username, member.user.displayAvatarURL())
- .setTitle('✅ **Member added**')
- .setDescription(`${member} has been added to <#${ticket.channel}>`)
- .setFooter(guild.name, guild.iconURL())
- );
-
- log.info(`${message.author.tag} added a user to a ticket (#${message.channel.id})`);
- } catch (error) {
- log.error(error);
- }
- // command ends here
- },
-};
diff --git a/src/commands/close.js b/src/commands/close.js
deleted file mode 100644
index d42fe6a..0000000
--- a/src/commands/close.js
+++ /dev/null
@@ -1,238 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const { MessageEmbed } = require('discord.js');
-const fs = require('fs');
-const { join } = require('path');
-const archive = require('../modules/archive');
-
-module.exports = {
- name: 'close',
- description: 'Close a ticket; either a specified (mentioned) channel, or the channel the command is used in.',
- usage: '[ticket]',
- aliases: ['none'],
- example: 'close #ticket-17',
- args: false,
- async execute(client, message, _args, log, { config, Ticket }) {
- const guild = client.guilds.cache.get(config.guild);
-
- const notTicket = new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **This isn\'t a ticket channel**')
- .setDescription('Use this command in the ticket channel you want to close, or mention the channel.')
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL());
-
- let ticket;
- let channel = message.mentions.channels.first();
- // || client.channels.resolve(await Ticket.findOne({ where: { id: args[0] } }).channel) // channels.fetch()
-
- if (!channel) {
- channel = message.channel;
-
- ticket = await Ticket.findOne({
- where: {
- channel: channel.id
- }
- });
- if (!ticket) return message.channel.send(notTicket);
- } else {
- ticket = await Ticket.findOne({
- where: {
- channel: channel.id
- }
- });
- if (!ticket) {
- notTicket
- .setTitle('❌ **Channel is not a ticket**')
- .setDescription(`${channel} is not a ticket channel.`);
- return message.channel.send(notTicket);
- }
-
- }
-
- let paths = {
- text: join(__dirname, `../../user/transcripts/text/${ticket.get('channel')}.txt`),
- log: join(__dirname, `../../user/transcripts/raw/${ticket.get('channel')}.log`),
- json: join(__dirname, `../../user/transcripts/raw/entities/${ticket.get('channel')}.json`)
- };
-
- if (message.author.id !== ticket.creator && !message.member.roles.cache.has(config.staff_role))
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **No permission**')
- .setDescription(`You don't have permission to close ${channel} as it does not belong to you and you are not staff.`)
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
-
-
- if (config.commands.close.confirmation) {
- let success;
- let pre = fs.existsSync(paths.text) || fs.existsSync(paths.log)
- ? `You will be able to view an archived version later with \`${config.prefix}transcript ${ticket.id}\``
- : '';
-
- let confirm = await message.channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❔ Are you sure?')
- .setDescription(`${pre}\n**React with ✅ to confirm.**`)
- .setFooter(guild.name + ' | Expires in 15 seconds', guild.iconURL())
- );
-
- await confirm.react('✅');
-
- const collector = confirm.createReactionCollector(
- (r, u) => r.emoji.name === '✅' && u.id === message.author.id, {
- time: 15000
- });
-
- collector.on('collect', async () => {
- if (channel.id !== message.channel.id) {
- channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('**Ticket closed**')
- .setDescription(`Ticket closed by ${message.author}`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- confirm.reactions.removeAll();
- confirm.edit(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle(`✅ **Ticket ${ticket.id} closed**`)
- .setDescription('The channel will be automatically deleted in a few seconds, once the contents have been archived.')
- .setFooter(guild.name, guild.iconURL())
- );
-
-
- if (channel.id !== message.channel.id)
- message.delete({
- timeout: 5000
- }).then(() => confirm.delete());
-
- success = true;
- close();
- });
-
-
- collector.on('end', () => {
- if (!success) {
- confirm.reactions.removeAll();
- confirm.edit(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **Expired**')
- .setDescription('You took too long to react; confirmation failed.')
- .setFooter(guild.name, guild.iconURL()));
-
- message.delete({
- timeout: 10000
- }).then(() => confirm.delete());
- }
- });
- } else {
- close();
- }
-
-
- async function close () {
- let users = [];
-
- if (config.transcripts.text.enabled || config.transcripts.web.enabled) {
- let u = await client.users.fetch(ticket.creator);
- if (u) {
- let dm;
- try {
- dm = u.dmChannel || await u.createDM();
- } catch (e) {
- log.warn(`Could not create DM channel with ${u.tag}`);
- }
-
- let res = {};
- const embed = new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle(`Ticket ${ticket.id}`)
- .setFooter(guild.name, guild.iconURL());
-
- if (fs.existsSync(paths.text)) {
- embed.addField('Text transcript', 'See attachment');
- res.files = [{
- attachment: paths.text,
- name: `ticket-${ticket.id}-${ticket.get('channel')}.txt`
- }];
- }
-
- if (fs.existsSync(paths.log) && fs.existsSync(paths.json)) {
- let data = JSON.parse(fs.readFileSync(paths.json));
- for (u in data.entities.users) users.push(u);
- embed.addField('Web archive', await archive.export(Ticket, channel)); // this will also delete these files
- }
-
- if (embed.fields.length < 1) {
- embed.setDescription(`No text transcripts or archive data exists for ticket ${ticket.id}`);
- }
-
- res.embed = embed;
-
- try {
- if (config.commands.close.send_transcripts) dm.send(res);
- if (config.transcripts.channel.length > 1) client.channels.cache.get(config.transcripts.channel).send(res);
- } catch (e) {
- message.channel.send('❌ Couldn\'t send DM or transcript log message');
- }
- }
- }
-
- // update database
- ticket.update({
- open: false
- }, {
- where: {
- channel: channel.id
- }
- });
-
- // delete channel
- channel.delete({
- timeout: 5000
- });
-
- log.info(`${message.author.tag} closed a ticket (#ticket-${ticket.id})`);
-
- if (config.logs.discord.enabled) {
- let embed = new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle(`Ticket ${ticket.id} closed`)
- .addField('Creator', `<@${ticket.creator}>`, true)
- .addField('Closed by', message.author, true)
- .setFooter(guild.name, guild.iconURL())
- .setTimestamp();
-
- if (users.length > 1)
- embed.addField('Members', users.map(u => `<@${u}>`).join('\n'));
-
- client.channels.cache.get(config.logs.discord.channel).send(embed);
- }
- }
- }
-};
diff --git a/src/commands/closeall.js b/src/commands/closeall.js
deleted file mode 100644
index 4091902..0000000
--- a/src/commands/closeall.js
+++ /dev/null
@@ -1,258 +0,0 @@
-/**
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const { MessageEmbed } = require('discord.js');
-const fs = require('fs');
-const { join } = require('path');
-const config = require(join(__dirname, '../../user/', require('../').config));
-const archive = require('../modules/archive');
-const { plural } = require('../modules/utils');
-const { Op } = require('sequelize');
-const toTime = require('to-time-monthsfork');
-
-// A slight modification to the 'close' command to allow multiple tickets to be closed at once
-
-module.exports = {
- name: 'closeall',
- description: 'Closes all currently open tickets older than a specified time length',
- usage: '[time]',
- aliases: ['ca'],
- example: 'closeall 1mo 1w',
- args: false,
- disabled: !config.commands.closeall.enabled,
- async execute(client, message, args, log, {
- config,
- Ticket
- }) {
- const guild = client.guilds.cache.get(config.guild);
-
- if (!message.member.roles.cache.has(config.staff_role))
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **No permission**')
- .setDescription('You do not have permission to use this command as you are not a staff member.')
- .addField('Usage', `\`${config.prefix}${this.name}${' ' + this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
-
- let tickets;
-
- if (args.length > 0) {
- let time, maxDate;
- let timestamp = args.join(' ');
-
- try {
- time = toTime(timestamp).milliseconds();
- maxDate = new Date(Date.now() - time);
- } catch (error) {
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **Invalid Timestamp**')
- .setDescription(`The timestamp that you specified, \`${timestamp}\`, was invalid.`)
- .addField('Usage', `\`${config.prefix}${this.name}${' ' + this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- tickets = await Ticket.findAndCountAll({
- where: {
- open: true,
- updatedAt: {
- [Op.lte]: maxDate,
- }
- },
- });
- } else {
- tickets = await Ticket.findAndCountAll({
- where: {
- open: true,
- },
- });
- }
-
- if (tickets.count === 0)
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.display)
- .setTitle('❌ **No open tickets**')
- .setDescription('There are no open tickets to close.')
- .setFooter(guild.name, guild.iconURL())
- );
-
- log.info(`Found ${tickets.count} open tickets`);
-
- if (config.commands.close.confirmation) {
- let success;
- let pre = config.transcripts.text.enabled || config.transcripts.web.enabled
- ? `You will be able to view an archived version of each ticket later with \`${config.prefix}transcript \``
- : '';
-
- let confirm = await message.channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle(`❔ Are you sure you want to close **${tickets.count}** tickets?`)
- .setDescription(`${pre}\n**React with ✅ to confirm.**`)
- .setFooter(guild.name + ' | Expires in 15 seconds', guild.iconURL())
- );
-
- await confirm.react('✅');
-
- const collector = confirm.createReactionCollector(
- (reaction, user) => reaction.emoji.name === '✅' && user.id === message.author.id, {
- time: 15000,
- });
-
- collector.on('collect', async () => {
- message.channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle(`**\`${tickets.count}\` tickets closed**`)
- .setDescription(`**\`${tickets.count}\`** tickets closed by ${message.author}`)
- .setFooter(guild.name, guild.iconURL())
- );
-
- confirm.reactions.removeAll();
- confirm.edit(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle(`✅ ** \`${tickets.count}\` tickets closed**`)
- .setDescription('The channels will be automatically deleted in a few seconds, once the contents have been archived.')
- .setFooter(guild.name, guild.iconURL())
- );
-
- message.delete({
- timeout: 5000,
- }).then(() => confirm.delete());
-
- success = true;
- closeAll();
- });
-
- collector.on('end', () => {
- if (!success) {
- confirm.reactions.removeAll();
- confirm.edit(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **Expired**')
- .setDescription('You took too long to react; confirmation failed.')
- .setFooter(guild.name, guild.iconURL()));
-
- message.delete({
- timeout: 10000
- }).then(() => confirm.delete());
- }
- });
- } else {
- closeAll();
- }
-
-
- async function closeAll() {
- tickets.rows.forEach(async ticket => {
- let users = [];
-
- if (config.transcripts.text.enabled || config.transcripts.web.enabled) {
- let {
- channel,
- id,
- creator
- } = ticket;
-
- let user = await client.users.fetch(creator);
- let paths = {
- text: join(__dirname, `../../user/transcripts/text/${channel}.txt`),
- log: join(__dirname, `../../user/transcripts/raw/${channel}.log`),
- json: join(__dirname, `../../user/transcripts/raw/entities/${channel}.json`)
- };
-
- if (user) {
- let dm;
- try {
- dm = user.dmChannel || await user.createDM();
- } catch (e) {
- log.warn(`Could not create DM channel with ${user.tag}`);
- }
-
- let res = {};
- const embed = new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username)
- .setTitle(`Ticket ${id}`)
- .setFooter(guild.name, guild.iconURL());
-
- if (fs.existsSync(paths.text)) {
- embed.addField('Text Transcript', 'See attachment');
- res.files = [{
- attachment: paths.text,
- name: `ticket-${id}-${channel}.txt`
- }];
- }
-
- if (fs.existsSync(paths.log) && fs.existsSync(paths.json)) {
- let data = JSON.parse(fs.readFileSync(paths.json));
- data.entities.users.forEach(u => users.push(u));
- embed.addField('Web archive', await archive.export(Ticket, channel));
- }
-
- res.embed = embed;
-
- try {
- if (config.commands.close.send_transcripts) dm.send(res);
- if (config.transcripts.channel.length > 1) client.channels.cache.get(config.transcripts.channel).send(res);
- } catch (e) {
- message.channel.send('❌ Couldn\'t send DM or transcript log message');
- }
- }
-
- await Ticket.update({
- open: false,
- }, {
- where: {
- id,
- }
- });
-
- log.info(log.format(`${message.author.tag} closed ticket &7${id}&f`));
-
- client.channels.fetch(channel)
- .then(c => c.delete()
- .then(o => log.info(`Deleted channel with name: '#${o.name}' <${o.id}>`))
- .catch(e => log.error(e)))
- .catch(e => log.error(e));
-
- if (config.logs.discord.enabled) {
- let embed = new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle(`${tickets.count} ${plural('ticket', tickets.count)} closed (${config.prefix}closeall)`)
- .addField('Closed by', message.author, true)
- .setFooter(guild.name, guild.iconURL())
- .setTimestamp();
-
- if (users.length > 1)
- embed.addField('Members', users.map(u => `<@${u}>`).join('\n'));
-
- client.channels.cache.get(config.logs.discord.channel).send(embed);
- }
- }
- });
- }
-
- },
-};
diff --git a/src/commands/delete.js b/src/commands/delete.js
deleted file mode 100644
index 681d50c..0000000
--- a/src/commands/delete.js
+++ /dev/null
@@ -1,185 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const {
- MessageEmbed
-} = require('discord.js');
-const fs = require('fs');
-const { join } = require('path');
-
-module.exports = {
- name: 'delete',
- description: 'Delete a ticket. Similar to closing a ticket, but does not save transcript or archives.',
- usage: '[ticket]',
- aliases: ['del'],
- example: 'delete #ticket-17',
- args: false,
- async execute(client, message, _args, log, {
- config,
- Ticket
- }) {
- const guild = client.guilds.cache.get(config.guild);
-
- const notTicket = new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **This isn\'t a ticket channel**')
- .setDescription('Use this command in the ticket channel you want to delete, or mention the channel.')
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL());
-
- let ticket;
- let channel = message.mentions.channels.first();
- // || client.channels.resolve(await Ticket.findOne({ where: { id: args[0] } }).channel) // channels.fetch()
-
- if (!channel) {
- channel = message.channel;
-
- ticket = await Ticket.findOne({
- where: {
- channel: channel.id
- }
- });
- if (!ticket) return channel.send(notTicket);
-
- } else {
- ticket = await Ticket.findOne({
- where: {
- channel: channel.id
- }
- });
- if (!ticket) {
- notTicket
- .setTitle('❌ **Channel is not a ticket**')
- .setDescription(`${channel} is not a ticket channel.`);
- return message.channel.send(notTicket);
- }
-
- }
- if (message.author.id !== ticket.creator && !message.member.roles.cache.has(config.staff_role))
- return channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **No permission**')
- .setDescription(`You don't have permission to delete ${channel} as it does not belong to you and you are not staff.`)
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
-
-
- if (config.commands.delete.confirmation) {
- let success;
- let confirm = await message.channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❔ Are you sure?')
- .setDescription(
- `:warning: This action is **irreversible**, the ticket will be completely removed from the database.
- You will **not** be able to view a transcript/archive of the channel later.
- Use the \`close\` command instead if you don't want this behaviour.\n**React with ✅ to confirm.**`)
- .setFooter(guild.name + ' | Expires in 15 seconds', guild.iconURL())
- );
-
- await confirm.react('✅');
-
- const collector = confirm.createReactionCollector(
- (r, u) => r.emoji.name === '✅' && u.id === message.author.id, {
- time: 15000
- });
-
- collector.on('collect', async () => {
- if (channel.id !== message.channel.id)
- channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('**Ticket deleted**')
- .setDescription(`Ticket deleted by ${message.author}`)
- .setFooter(guild.name, guild.iconURL())
- );
-
- confirm.reactions.removeAll();
- confirm.edit(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle(`✅ **Ticket ${ticket.id} deleted**`)
- .setDescription('The channel will be automatically deleted in a few seconds.')
- .setFooter(guild.name, guild.iconURL())
- );
-
- if (channel.id !== message.channel.id)
- message.delete({
- timeout: 5000
- }).then(() => confirm.delete());
-
- success = true;
- del();
- });
-
- collector.on('end', () => {
- if (!success) {
- confirm.reactions.removeAll();
- confirm.edit(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **Expired**')
- .setDescription('You took too long to react; confirmation failed.')
- .setFooter(guild.name, guild.iconURL()));
-
- message.delete({
- timeout: 10000
- }).then(() => confirm.delete());
- }
- });
- } else {
- del();
- }
-
-
- async function del () {
- let txt = join(__dirname, `../../user/transcripts/text/${ticket.get('channel')}.txt`),
- raw = join(__dirname, `../../user/transcripts/raw/${ticket.get('channel')}.log`),
- json = join(__dirname, `../../user/transcripts/raw/entities/${ticket.get('channel')}.json`);
-
- if (fs.existsSync(txt)) fs.unlinkSync(txt);
- if (fs.existsSync(raw)) fs.unlinkSync(raw);
- if (fs.existsSync(json)) fs.unlinkSync(json);
-
- // update database
- ticket.destroy(); // remove ticket from database
-
- // channel
- channel.delete({
- timeout: 5000
- });
-
-
- log.info(`${message.author.tag} deleted a ticket (#ticket-${ticket.id})`);
-
- if (config.logs.discord.enabled) {
- client.channels.cache.get(config.logs.discord.channel).send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('Ticket deleted')
- .addField('Creator', `<@${ticket.creator}>`, true)
- .addField('Deleted by', message.author, true)
- .setFooter(guild.name, guild.iconURL())
- .setTimestamp()
- );
- }
- }
-
- }
-};
\ No newline at end of file
diff --git a/src/commands/help.js b/src/commands/help.js
deleted file mode 100644
index 2853fd4..0000000
--- a/src/commands/help.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const { MessageEmbed } = require('discord.js');
-
-module.exports = {
- name: 'help',
- description: 'Display help menu',
- usage: '[command]',
- aliases: ['command', 'commands'],
- example: 'help new',
- args: false,
- execute(client, message, args, log, {config}) {
- const guild = client.guilds.cache.get(config.guild);
-
- const commands = Array.from(client.commands.values());
-
- if (!args.length) {
- let cmds = [];
-
- for (let command of commands) {
- if (command.hide || command.disabled) continue;
- if (command.permission && !message.member.hasPermission(command.permission)) continue;
-
- let desc = command.description;
-
- if (desc.length > 50) desc = desc.substring(0, 50) + '...';
- cmds.push(`**${config.prefix}${command.name}** **·** ${desc}`);
- }
-
- message.channel.send(
- new MessageEmbed()
- .setTitle('Commands')
- .setColor(config.colour)
- .setDescription(
- `\nThe commands you have access to are listed below. Type \`${config.prefix}help [command]\` for more information about a specific command.
- \n${cmds.join('\n\n')}
- \nPlease contact a member of staff if you require assistance.`
- )
- .setFooter(guild.name, guild.iconURL())
- ).catch((error) => {
- log.warn('Could not send help menu');
- log.error(error);
- });
-
- } else {
- const name = args[0].toLowerCase();
- const command = client.commands.get(name) || client.commands.find(c => c.aliases && c.aliases.includes(name));
-
- if (!command)
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setDescription(`❌ **Invalid command name** (\`${config.prefix}help\`)`)
- );
-
-
- const cmd = new MessageEmbed()
- .setColor(config.colour)
- .setTitle(command.name);
-
-
- if (command.long) cmd.setDescription(command.long);
- else cmd.setDescription(command.description);
-
- if (command.aliases) cmd.addField('Aliases', `\`${command.aliases.join(', ')}\``, true);
-
- if (command.usage) cmd.addField('Usage', `\`${config.prefix}${command.name} ${command.usage}\``, false);
-
- if (command.usage) cmd.addField('Example', `\`${config.prefix}${command.example}\``, false);
-
-
- if (command.permission && !message.member.hasPermission(command.permission)) {
- cmd.addField('Required Permission', `\`${command.permission}\` :exclamation: You don't have permission to use this command`, true);
- } else cmd.addField('Required Permission', `\`${command.permission || 'none'}\``, true);
-
- message.channel.send(cmd);
- }
-
- // command ends here
- },
-};
\ No newline at end of file
diff --git a/src/commands/new.js b/src/commands/new.js
deleted file mode 100644
index 801f8b1..0000000
--- a/src/commands/new.js
+++ /dev/null
@@ -1,205 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const { MessageEmbed } = require('discord.js');
-const fs = require('fs');
-const { join } = require('path');
-const config = require(join(__dirname, '../../user/', require('../').config));
-
-module.exports = {
- name: 'new',
- description: 'Create a new support ticket',
- usage: '[brief description]',
- aliases: ['ticket', 'open'],
- example: 'new my server won\'t start',
- args: false,
- disabled: !config.commands.new.enabled,
- async execute(client, message, args, log, {config, Ticket}) {
-
- if (!config.commands.new.enabled) return; // stop if the command is disabled
-
-
- const guild = client.guilds.cache.get(config.guild);
-
- const supportRole = guild.roles.cache.get(config.staff_role);
-
- if (!supportRole)
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setTitle('❌ **Error**')
- .setDescription(`${config.name} has not been set up correctly. Could not find a 'support team' role with the id \`${config.staff_role}\``)
- .setFooter(guild.name, guild.iconURL())
- );
-
-
- let tickets = await Ticket.findAndCountAll({
- where: {
- creator: message.author.id,
- open: true
- },
- limit: config.tickets.max
- });
-
- if (tickets.count >= config.tickets.max) {
- let ticketList = [];
- for (let t in tickets.rows) {
- let desc = tickets.rows[t].topic.substring(0, 30);
- ticketList
- .push(`<#${tickets.rows[t].channel}>: \`${desc}${desc.length > 30 ? '...' : ''}\``);
- }
-
- let m = await message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle(`❌ **You already have ${tickets.count} or more open tickets**`)
- .setDescription(`Use \`${config.prefix}close\` to close unneeded tickets.\n\n${ticketList.join(',\n')}`)
- .setFooter(guild.name + ' | This message will be deleted in 15 seconds', guild.iconURL())
- );
-
- return setTimeout(async () => {
- await message.delete();
- await m.delete();
- }, 15000);
- }
-
-
- let topic = args.join(' ');
- if (topic.length > 256) {
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **Description too long**')
- .setDescription('Please limit your ticket topic to less than 256 characters. A short sentence will do.')
- .setFooter(guild.name, guild.iconURL())
- );
- }
- else if (topic.length < 1) {
- topic = config.tickets.default_topic.command;
- }
-
- let ticket = await Ticket.create({
- channel: '',
- creator: message.author.id,
- open: true,
- archived: false,
- topic: topic
- });
-
- let name = 'ticket-' + ticket.get('id');
-
- guild.channels.create(name, {
- type: 'text',
- topic: `${message.author} | ${topic}`,
- parent: config.tickets.category,
- permissionOverwrites: [{
- id: guild.roles.everyone,
- deny: ['VIEW_CHANNEL', 'SEND_MESSAGES']
- },
- {
- id: client.user,
- allow: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'ATTACH_FILES', 'READ_MESSAGE_HISTORY']
- },
- {
- id: message.member,
- allow: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'ATTACH_FILES', 'READ_MESSAGE_HISTORY']
- },
- {
- id: supportRole,
- allow: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'ATTACH_FILES', 'READ_MESSAGE_HISTORY']
- }
- ],
- reason: 'User requested a new support ticket channel'
- }).then(async c => {
-
- Ticket.update({
- channel: c.id
- }, {
- where: {
- id: ticket.id
- }
- });
-
- let m = await message.channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('✅ **Ticket created**')
- .setDescription(`Your ticket has been created: ${c}`)
- .setFooter(client.user.username + ' | This message will be deleted in 15 seconds', client.user.displayAvatarURL())
- );
-
- setTimeout(async () => {
- await message.delete();
- await m.delete();
- }, 15000);
-
- // require('../modules/archive').create(client, c); // create files
-
- let ping;
- switch (config.tickets.ping) {
- case 'staff':
- ping = `<@&${config.staff_role}>,\n`;
- break;
- case false:
- ping = '';
- break;
- default:
- ping = `@${config.tickets.ping},\n`;
- }
-
- await c.send(ping + `${message.author} has created a new ticket`);
-
- if (config.tickets.send_img) {
- const images = fs.readdirSync(join(__dirname, '../../user/images'));
- await c.send({
- files: [
- join(__dirname, '../../user/images', images[Math.floor(Math.random() * images.length)])
- ]
- });
- }
-
- let text = config.tickets.text
- .replace(/{{ ?name ?}}/gmi, message.author.username)
- .replace(/{{ ?(tag|mention) ?}}/gmi, message.author);
-
-
- let w = await c.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setDescription(text)
- .addField('Topic', `\`${topic}\``)
- .setFooter(guild.name, guild.iconURL())
- );
-
- if (config.tickets.pin) await w.pin();
- // await w.pin().then(m => m.delete()); // oopsie, this deletes the pinned message
-
- if (config.logs.discord.enabled)
- client.channels.cache.get(config.logs.discord.channel).send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('New ticket')
- .setDescription(`\`${topic}\``)
- .addField('Creator', message.author, true)
- .addField('Channel', c, true)
- .setFooter(guild.name, guild.iconURL())
- .setTimestamp()
- );
-
- log.info(`${message.author.tag} created a new ticket (#${name})`);
-
-
- }).catch(log.error);
-
- },
-};
diff --git a/src/commands/panel.js b/src/commands/panel.js
deleted file mode 100644
index f31a07a..0000000
--- a/src/commands/panel.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const { MessageEmbed } = require('discord.js');
-
-module.exports = {
- name: 'panel',
- description: 'Create or a panel widget in the channel the command is used in. Note that there can only be 1 panel.',
- usage: '',
- aliases: ['widget'],
- args: false,
- permission: 'MANAGE_GUILD',
- async execute(client, message, _args, log, {config, Setting}) {
- const guild = client.guilds.cache.get(config.guild);
-
- let msgID = await Setting.findOne({ where: { key: 'panel_msg_id' } });
- let chanID = await Setting.findOne({ where: { key: 'panel_chan_id' } });
- let panel;
-
- if (!chanID) {
- chanID = await Setting.create({
- key: 'panel_chan_id',
- value: message.channel.id,
- });
- }
-
- if (!msgID) {
- msgID = await Setting.create({
- key: 'panel_msg_id',
- value: '',
- });
- } else {
- try {
- panel = await client.channels.cache.get(chanID.get('value')).messages.fetch(msgID.get('value')); // get old panel message
- if (panel) {
- panel.delete({ reason: 'Creating new panel/widget' }).then(() => log.info('Deleted old panel')).catch(e => log.warn(e)); // delete old panel
- }
- } catch (e) {
- log.warn('Couldn\'t delete old panel');
- }
- }
-
- message.delete();
-
- panel = await message.channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setTitle(config.panel.title)
- .setDescription(config.panel.description)
- .setFooter(guild.name, guild.iconURL())
- ); // send new panel
-
- let emoji = panel.guild.emojis.cache.get(config.panel.reaction) || config.panel.reaction;
- panel.react(emoji); // add reaction
- Setting.update({ value: message.channel.id }, { where: { key: 'panel_chan_id' }}); // update database
- Setting.update({ value: panel.id }, { where: { key: 'panel_msg_id' }}); // update database
-
- log.info(`${message.author.tag} created a panel widget`);
- }
-};
diff --git a/src/commands/remove.js b/src/commands/remove.js
deleted file mode 100644
index baae520..0000000
--- a/src/commands/remove.js
+++ /dev/null
@@ -1,112 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const { MessageEmbed } = require('discord.js');
-
-module.exports = {
- name: 'remove',
- description: 'Remove a member from ticket channel',
- usage: '<@member> [... #channel]',
- aliases: ['none'],
- example: 'remove @member from #ticket-23',
- args: true,
- async execute(client, message, args, log, {config, Ticket}) {
- const guild = client.guilds.cache.get(config.guild);
-
- const notTicket = new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **This isn\'t a ticket channel**')
- .setDescription('Use this command in the ticket channel you want to remove a user from, or mention the channel.')
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL());
-
- let ticket;
-
- let channel = message.mentions.channels.first();
-
- if (!channel) {
-
- channel = message.channel;
- ticket = await Ticket.findOne({ where: { channel: message.channel.id } });
- if (!ticket)
- return message.channel.send(notTicket);
-
- } else {
-
- ticket = await Ticket.findOne({ where: { channel: channel.id } });
- if (!ticket) {
- notTicket
- .setTitle('❌ **Channel is not a ticket**')
- .setDescription(`${channel} is not a ticket channel.`);
- return message.channel.send(notTicket);
- }
- }
-
- if (message.author.id !== ticket.creator && !message.member.roles.cache.has(config.staff_role)) {
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **No permission**')
- .setDescription(`You don't have permission to alter ${channel} as it does not belong to you and you are not staff.`)
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- let member = guild.member(message.mentions.users.first() || guild.members.cache.get(args[0]));
-
- if (!member || member.id === message.author.id || member.id === guild.me.id)
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **Unknown member**')
- .setDescription('Please mention a valid member.')
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
-
- try {
- channel.updateOverwrite(member.user, {
- VIEW_CHANNEL: false,
- SEND_MESSAGES: false,
- ATTACH_FILES: false,
- READ_MESSAGE_HISTORY: false
- });
-
- if (channel.id !== message.channel.id) {
- channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(member.user.username, member.user.displayAvatarURL())
- .setTitle('**Member removed**')
- .setDescription(`${member} has been removed by ${message.author}`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- message.channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(member.user.username, member.user.displayAvatarURL())
- .setTitle('✅ **Member removed**')
- .setDescription(`${member} has been removed from <#${ticket.channel}>`)
- .setFooter(guild.name, guild.iconURL())
- );
-
- log.info(`${message.author.tag} removed a user from a ticket (#${message.channel.id})`);
- } catch (error) {
- log.error(error);
- }
- },
-};
diff --git a/src/commands/rename.js b/src/commands/rename.js
deleted file mode 100644
index 816305e..0000000
--- a/src/commands/rename.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author iFusion for eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const { MessageEmbed } = require('discord.js');
-
-module.exports = {
- name: 'rename',
- description: 'Rename a ticket channel',
- usage: '',
- aliases: ['none'],
- example: 'rename important-ticket',
- args: true,
- async execute(client, message, args, {config, Ticket}) {
- const guild = client.guilds.cache.get(config.guild);
-
- let ticket = await Ticket.findOne({
- where: {
- channel: message.channel.id
- }
- });
-
- if (!ticket) {
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **This isn\'t a ticket channel**')
- .setDescription('Use this command in the ticket channel you want to rename.')
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- if (!message.member.roles.cache.has(config.staff_role))
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **No permission**')
- .setDescription('You don\'t have permission to rename this channel as you are not staff.')
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
-
- message.channel.setName(args.join('-')); // new channel name
-
- message.channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('✅ **Ticket updated**')
- .setDescription('The name has been changed.')
- .setFooter(client.user.username, client.user.displayAvatarURL())
- );
- }
-};
diff --git a/src/commands/stats.js b/src/commands/stats.js
deleted file mode 100644
index c8d7520..0000000
--- a/src/commands/stats.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const { MessageEmbed } = require('discord.js');
-
-module.exports = {
- name: 'stats',
- description: 'View ticket stats.',
- usage: '',
- aliases: ['data', 'statistics'],
-
- args: false,
- async execute(client, message, _args, {config, Ticket}) {
- const guild = client.guilds.cache.get(config.guild);
-
- let open = await Ticket.count({ where: { open: true } });
- let closed = await Ticket.count({ where: { open: false } });
-
- message.channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setTitle(':bar_chart: Statistics')
- .addField('Open tickets', open, true)
- .addField('Closed tickets', closed, true)
- .addField('Total tickets', open + closed, true)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-};
\ No newline at end of file
diff --git a/src/commands/tickets.js b/src/commands/tickets.js
deleted file mode 100644
index 778b52b..0000000
--- a/src/commands/tickets.js
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const { MessageEmbed } = require('discord.js');
-const fs = require('fs');
-const { join } = require('path');
-
-module.exports = {
- name: 'tickets',
- description: 'List your recent tickets to access transcripts / archives.',
- usage: '[@member]',
- aliases: ['list'],
- args: false,
- async execute(client, message, args, {config, Ticket}) {
- const guild = client.guilds.cache.get(config.guild);
-
- const supportRole = guild.roles.cache.get(config.staff_role);
- if (!supportRole) {
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setTitle('❌ **Error**')
- .setDescription(`${config.name} has not been set up correctly. Could not find a 'support team' role with the id \`${config.staff_role}\``)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- let context = 'self';
- let user = message.mentions.users.first() || guild.members.cache.get(args[0]);
-
- if (user) {
- if (!message.member.roles.cache.has(config.staff_role)) {
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **No permission**')
- .setDescription('You don\'t have permission to list others\' tickets as you are not staff.')
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- context = 'staff';
- } else user = message.author;
-
- let openTickets = await Ticket.findAndCountAll({
- where: {
- creator: user.id,
- open: true
- }
- });
-
- let closedTickets = await Ticket.findAndCountAll({
- where: {
- creator: user.id,
- open: false
- }
- });
-
- closedTickets.rows = closedTickets.rows.slice(-10); // get most recent 10
-
- let embed = new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(user.username, user.displayAvatarURL())
- .setTitle(`${context === 'self' ? 'Your' : user.username + '\'s'} tickets`)
- .setFooter(guild.name + ' | This message will be deleted in 60 seconds', guild.iconURL());
-
- /* if (config.transcripts.web.enabled) {
- embed.setDescription(`You can access all of your ticket archives on the [web portal](${config.transcripts.web.server}/${user.id}).`);
- } */
-
- let open = [],
- closed = [];
-
- for (let t in openTickets.rows) {
- let desc = openTickets.rows[t].topic.substring(0, 30);
- open.push(`> <#${openTickets.rows[t].channel}>: \`${desc}${desc.length > 20 ? '...' : ''}\``);
- }
-
- for (let t in closedTickets.rows) {
- let desc = closedTickets.rows[t].topic.substring(0, 30);
- let transcript = '';
- let c = closedTickets.rows[t].channel;
- if (config.transcripts.web.enabled || fs.existsSync(join(__dirname, `../../user/transcripts/text/${c}.txt`))) {
- transcript = `\n> Type \`${config.prefix}transcript ${closedTickets.rows[t].id}\` to view.`;
- }
-
- closed.push(`> **#${closedTickets.rows[t].id}**: \`${desc}${desc.length > 20 ? '...' : ''}\`${transcript}`);
-
- }
-
- let pre = context === 'self' ? 'You have' : user.username + ' has';
- embed.addField('Open tickets', openTickets.count === 0 ? `${pre} no open tickets.` : open.join('\n\n'), false);
- embed.addField('Closed tickets', closedTickets.count === 0 ? `${pre} no old tickets` : closed.join('\n\n'), false);
-
- message.delete({timeout: 15000});
-
- let channel;
- try {
- channel = message.author.dmChannel || await message.author.createDM();
- message.channel.send('Sent to DM').then(msg => msg.delete({timeout: 15000}));
- } catch (e) {
- channel = message.channel;
- }
-
- let m = await channel.send(embed);
- m.delete({timeout: 60000});
- },
-};
\ No newline at end of file
diff --git a/src/commands/topic.js b/src/commands/topic.js
deleted file mode 100644
index 969eafc..0000000
--- a/src/commands/topic.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const { MessageEmbed } = require('discord.js');
-
-module.exports = {
- name: 'topic',
- description: 'Edit a ticket topic',
- usage: '',
- aliases: ['edit'],
- example: 'topic need help error',
- args: true,
- async execute(client, message, args, {config, Ticket}) {
- const guild = client.guilds.cache.get(config.guild);
-
- let ticket = await Ticket.findOne({
- where: {
- channel: message.channel.id
- }
- });
-
- if (!ticket) {
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **This isn\'t a ticket channel**')
- .setDescription('Use this command in the ticket channel you want to close, or mention the channel.')
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- let topic = args.join(' ');
- if (topic.length > 256) {
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **Description too long**')
- .setDescription('Please limit your ticket topic to less than 256 characters. A short sentence will do.')
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- message.channel.setTopic(`<@${ticket.creator}> | ` + topic);
-
- Ticket.update({
- topic: topic
- }, {
- where: {
- channel: message.channel.id
- }
- });
-
- message.channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('✅ **Ticket updated**')
- .setDescription('The topic has been changed.')
- .setFooter(client.user.username, client.user.displayAvatarURL())
- );
- }
-};
\ No newline at end of file
diff --git a/src/commands/transcript.js b/src/commands/transcript.js
deleted file mode 100644
index 5703042..0000000
--- a/src/commands/transcript.js
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const fs = require('fs');
-const { join } = require('path');
-
-const {
- MessageEmbed
-} = require('discord.js');
-
-module.exports = {
- name: 'transcript',
- description: 'Download a transcript',
- usage: '',
- aliases: ['archive', 'download'],
- example: 'transcript 57',
- args: true,
- async execute(client, message, args, {config, Ticket}) {
- const guild = client.guilds.cache.get(config.guild);
- const id = args[0];
-
- let ticket = await Ticket.findOne({
- where: {
- id: id,
- open: false
- }
- });
-
-
- if (!ticket) {
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **Unknown ticket**')
- .setDescription('Couldn\'t find a closed ticket with that ID')
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- if (message.author.id !== ticket.creator && !message.member.roles.cache.has(config.staff_role)) {
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **No permission**')
- .setDescription(`You don't have permission to view ticket ${id} as it does not belong to you and you are not staff.`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- let res = {};
- const embed = new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle(`Ticket ${id}`)
- .setFooter(guild.name, guild.iconURL());
-
- let file = `../../user/transcripts/text/${ticket.channel}.txt`;
- if (fs.existsSync(join(__dirname, file))) {
- embed.addField('Text transcript', 'See attachment');
- res.files = [
- {
- attachment: join(__dirname, file),
- name: `ticket-${id}-${ticket.channel}.txt`
- }
- ];
- }
-
-
- const BASE_URL = config.transcripts.web.server;
- if (config.transcripts.web.enabled) embed.addField('Web archive', `${BASE_URL}/${ticket.creator}/${ticket.channel}`);
-
- if (embed.fields.length < 1) embed.setDescription(`No text transcripts or archive data exists for ticket ${id}`);
-
- res.embed = embed;
-
- let channel;
- try {
- channel = message.author.dmChannel || await message.author.createDM();
- } catch (e) {
- channel = message.channel;
- }
-
- channel.send(res).then(m => {
- if (channel.id === message.channel.id) m.delete({timeout: 15000});
- });
- message.delete({timeout: 1500});
- }
-};
\ No newline at end of file
diff --git a/src/commands/transfer.js b/src/commands/transfer.js
deleted file mode 100644
index 9c9ef46..0000000
--- a/src/commands/transfer.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const { MessageEmbed } = require('discord.js');
-
-module.exports = {
- name: 'transfer',
- description: 'Transfer ownership of a ticket channel',
- usage: '<@member>',
- aliases: ['none'],
- example: 'transfer @user',
- args: true,
- async execute(client, message, args, { config, Ticket }) {
- const guild = client.guilds.cache.get(config.guild);
-
- let ticket = await Ticket.findOne({
- where: {
- channel: message.channel.id
- }
- });
-
- if (!ticket) {
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **This isn\'t a ticket channel**')
- .setDescription('Use this command in the ticket channel you want to change owner.')
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- if (!message.member.roles.cache.has(config.staff_role))
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **No permission**')
- .setDescription('You don\'t have permission to change ownership of this channel as you are not staff.')
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
-
- let member = guild.member(message.mentions.users.first() || guild.members.cache.get(args[0]));
-
- if (!member) {
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('❌ **Unknown member**')
- .setDescription('Please mention a valid member.')
- .addField('Usage', `\`${config.prefix}${this.name} ${this.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${this.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
-
- message.channel.setTopic(`${member} | ${ticket.topic}`);
-
- Ticket.update({
- creator: member.user.id
- }, {
- where: {
- channel: message.channel.id
- }
- });
-
- message.channel.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(message.author.username, message.author.displayAvatarURL())
- .setTitle('✅ **Ticket transferred**')
- .setDescription(`Ownership of this ticket has been transferred to ${member}.`)
- .setFooter(client.user.username, client.user.displayAvatarURL())
- );
- }
-};
diff --git a/src/events/debug.js b/src/events/debug.js
deleted file mode 100644
index 04bb2b6..0000000
--- a/src/events/debug.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-module.exports = {
- event: 'debug',
- execute(_client, log, [e]) {
- log.debug(e);
- }
-};
\ No newline at end of file
diff --git a/src/events/error.js b/src/events/error.js
deleted file mode 100644
index 53f68f6..0000000
--- a/src/events/error.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-module.exports = {
- event: 'error',
- execute(_client, log, [e]) {
- log.error(e);
- }
-};
\ No newline at end of file
diff --git a/src/events/message.js b/src/events/message.js
deleted file mode 100644
index 8d5dbfd..0000000
--- a/src/events/message.js
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const { Collection, MessageEmbed } = require('discord.js');
-const archive = require('../modules/archive');
-
-module.exports = {
- event: 'message',
- async execute(client, log, [message], {config, Ticket, Setting}) {
-
- const guild = client.guilds.cache.get(config.guild);
-
- if (message.channel.type === 'dm' && !message.author.bot) {
- log.console(`Received a DM from ${message.author.tag}: ${message.cleanContent}`);
- return message.channel.send(`Hello there, ${message.author.username}!
-I am the support bot for **${guild}**.
-Type \`${config.prefix}new\` on the server to create a new ticket.`);
- } // stop here if is DM
-
- /**
- * Ticket transcripts
- * (bots currently still allowed)
- */
-
- let ticket = await Ticket.findOne({ where: { channel: message.channel.id } });
- if (ticket) {
- archive.add(message); // add message to archive
- // Update the ticket updated at so closeall can get most recent
- ticket.changed('updatedAt', true);
- ticket.save();
- }
-
- if (message.author.bot || message.author.id === client.user.id) return; // goodbye bots
-
-
- /**
- * Command handler
- * (no bots / self)
- */
-
- const regex = new RegExp(`^(<@!?${client.user.id}>|\\${config.prefix.toLowerCase()})\\s*`);
- if (!regex.test(message.content.toLowerCase())) return; // not a command
-
- const [, prefix] = message.content.toLowerCase().match(regex);
- const args = message.content.slice(prefix.length).trim().split(/ +/);
- const commandName = args.shift().toLowerCase();
- const command = client.commands.get(commandName)
- || client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));
-
- if (!command || commandName === 'none') return; // not an existing command
-
- if (message.guild.id !== guild.id) return message.reply(`This bot can only be used within the "${guild}" server`); // not in this server
-
- if (command.permission && !message.member.hasPermission(command.permission)) {
- log.console(`${message.author.tag} tried to use the '${command.name}' command without permission`);
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setTitle('❌ No permission')
- .setDescription(`**You do not have permission to use the \`${command.name}\` command** (requires \`${command.permission}\`).`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- if (command.args && !args.length) {
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .addField('Usage', `\`${config.prefix}${command.name} ${command.usage}\`\n`)
- .addField('Help', `Type \`${config.prefix}help ${command.name}\` for more information`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
-
- if (!client.cooldowns.has(command.name)) client.cooldowns.set(command.name, new Collection());
-
- const now = Date.now();
- const timestamps = client.cooldowns.get(command.name);
- const cooldownAmount = (command.cooldown || config.cooldown) * 1000;
-
- if (timestamps.has(message.author.id)) {
- const expirationTime = timestamps.get(message.author.id) + cooldownAmount;
-
- if (now < expirationTime) {
- const timeLeft = (expirationTime - now) / 1000;
- log.console(`${message.author.tag} attempted to use the '${command.name}' command before the cooldown was over`);
- return message.channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setDescription(`❌ Please wait ${timeLeft.toFixed(1)} second(s) before reusing the \`${command.name}\` command.`)
- .setFooter(guild.name, guild.iconURL())
- );
- }
- }
-
- timestamps.set(message.author.id, now);
- setTimeout(() => timestamps.delete(message.author.id), cooldownAmount);
-
- try {
- command.execute(client, message, args, log, {config, Ticket, Setting});
- log.console(`${message.author.tag} used the '${command.name}' command`);
- } catch (error) {
- log.warn(`An error occurred whilst executing the '${command.name}' command`);
- log.error(error);
- message.channel.send(`❌ An error occurred whilst executing the \`${command.name}\` command.`);
- }
- }
-};
diff --git a/src/events/messageDelete.js b/src/events/messageDelete.js
deleted file mode 100644
index 1e35e63..0000000
--- a/src/events/messageDelete.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const fs = require('fs');
-const { join } = require('path');
-
-module.exports = {
- event: 'messageDelete',
- async execute(_client, log, [message], {config, Ticket}) {
- if (!config.transcripts.web.enabled) return;
-
- if (message.partial) {
- try {
- await message.fetch();
- } catch (err) {
- log.warn('Failed to fetch deleted message');
- log.error(err.message);
- return;
- }
- }
-
- let ticket = await Ticket.findOne({ where: { channel: message.channel.id } });
- if (!ticket) return;
-
-
- let path = `../../user/transcripts/raw/${message.channel.id}.log`;
- let embeds = [];
- for (let embed in message.embeds) embeds.push(message.embeds[embed].toJSON());
-
- fs.appendFileSync(join(__dirname, path), JSON.stringify({
- id: message.id,
- author: message.author.id,
- content: message.content, // do not use cleanContent!
- time: message.createdTimestamp,
- embeds: embeds,
- attachments: [...message.attachments.values()],
- edited: message.edits.length > 1,
- deleted: true // delete the message
- }) + '\n');
- }
-};
\ No newline at end of file
diff --git a/src/events/messageReactionAdd.js b/src/events/messageReactionAdd.js
deleted file mode 100644
index d69c961..0000000
--- a/src/events/messageReactionAdd.js
+++ /dev/null
@@ -1,191 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const { MessageEmbed } = require('discord.js');
-const fs = require('fs');
-const { join } = require('path');
-
-module.exports = {
- event: 'messageReactionAdd',
- async execute(client, log, [r, u], {config, Ticket, Setting}) {
- if (r.partial) {
- try {
- await r.fetch();
- } catch (err) {
- log.error(err);
- return;
- }
- }
-
- let panelID = await Setting.findOne({ where: { key: 'panel_msg_id' } });
- if (!panelID) return;
-
- if (r.message.id !== panelID.get('value')) return;
-
- if (u.id === client.user.id) return;
-
- if (r.emoji.name !== config.panel.reaction && r.emoji.id !== config.panel.reaction) return;
-
- let channel = r.message.channel;
-
- const supportRole = channel.guild.roles.cache.get(config.staff_role);
- if (!supportRole) {
- return channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setTitle('❌ **Error**')
- .setDescription(`${config.name} has not been set up correctly. Could not find a 'support team' role with the id \`${config.staff_role}\``)
- .setFooter(channel.guild.name, channel.guild.iconURL())
- );
- }
-
- // everything is cool
-
- await r.users.remove(u.id); // effectively cancel reaction
-
- let tickets = await Ticket.findAndCountAll({
- where: {
- creator: u.id,
- open: true
- },
- limit: config.tickets.max
- });
-
- if (tickets.count >= config.tickets.max) {
- let ticketList = [];
- for (let t in tickets.rows) {
- let desc = tickets.rows[t].topic.substring(0, 30);
- ticketList
- .push(`<#${tickets.rows[t].channel}>: \`${desc}${desc.length > 30 ? '...' : ''}\``);
- }
- let dm = u.dmChannel || await u.createDM();
-
- try {
- return dm.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(u.username, u.displayAvatarURL())
- .setTitle(`❌ **You already have ${tickets.count} or more open tickets**`)
- .setDescription(`Use \`${config.prefix}close\` in a server channel to close unneeded tickets.\n\n${ticketList.join(',\n')}`)
- .setFooter(channel.guild.name, channel.guild.iconURL())
- );
- } catch (e) {
- let m = await channel.send(
- new MessageEmbed()
- .setColor(config.err_colour)
- .setAuthor(u.username, u.displayAvatarURL())
- .setTitle(`❌ **You already have ${tickets.count} or more open tickets**`)
- .setDescription(`Use \`${config.prefix}close\` to close unneeded tickets.\n\n${ticketList.join(',\n')}`)
- .setFooter(channel.guild.name + ' | This message will be deleted in 15 seconds', channel.guild.iconURL())
- );
- return m.delete({ timeout: 15000 });
- }
- }
-
- let topic = config.tickets.default_topic.command;
-
- let ticket = await Ticket.create({
- channel: '',
- creator: u.id,
- open: true,
- archived: false,
- topic: topic
- });
-
- let name = 'ticket-' + ticket.id;
-
- channel.guild.channels.create(name, {
- type: 'text',
- topic: `${u} | ${topic}`,
- parent: config.tickets.category,
- permissionOverwrites: [{
- id: channel.guild.roles.everyone,
- deny: ['VIEW_CHANNEL', 'SEND_MESSAGES']
- },
- {
- id: client.user,
- allow: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'ATTACH_FILES', 'READ_MESSAGE_HISTORY']
- },
- {
- id: channel.guild.member(u),
- allow: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'ATTACH_FILES', 'READ_MESSAGE_HISTORY']
- },
- {
- id: supportRole,
- allow: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'ATTACH_FILES', 'READ_MESSAGE_HISTORY']
- }
- ],
- reason: 'User requested a new support ticket channel (panel reaction)'
- }).then(async c => {
- Ticket.update({
- channel: c.id
- }, {
- where: {
- id: ticket.id
- }
- });
-
- // require('../modules/archive').create(client, c); // create files
-
- let ping;
- switch (config.tickets.ping) {
- case 'staff':
- ping = `<@&${config.staff_role}>,\n`;
- break;
- case false:
- ping = '';
- break;
- default:
- ping = `@${config.tickets.ping},\n`;
- }
-
- await c.send(ping + `${u} has created a new ticket`);
-
- if (config.tickets.send_img) {
- const images = fs.readdirSync(join(__dirname, '../../user/images'));
- await c.send({
- files: [
- join(__dirname, '../../user/images', images[Math.floor(Math.random() * images.length)])
- ]
- });
- }
-
- let text = config.tickets.text
- .replace(/{{ ?name ?}}/gmi, u.username)
- .replace(/{{ ?(tag|mention) ?}}/gmi, u);
-
-
- let w = await c.send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(u.username, u.displayAvatarURL())
- .setDescription(text)
- .addField('Topic', `\`${topic}\``)
- .setFooter(channel.guild.name, channel.guild.iconURL())
- );
-
- if (config.tickets.pin) await w.pin();
- // await w.pin().then(m => m.delete()); // oopsie, this deletes the pinned message
-
- if (config.logs.discord.enabled)
- client.channels.cache.get(config.logs.discord.channel).send(
- new MessageEmbed()
- .setColor(config.colour)
- .setAuthor(u.username, u.displayAvatarURL())
- .setTitle('New ticket (via panel)')
- .setDescription(`\`${topic}\``)
- .addField('Creator', u, true)
- .addField('Channel', c, true)
- .setFooter(channel.guild.name, channel.guild.iconURL())
- .setTimestamp()
- );
-
- log.info(`${u.tag} created a new ticket (#${name}) via panel`);
- }).catch(log.error);
- }
-};
diff --git a/src/events/messageUpdate.js b/src/events/messageUpdate.js
deleted file mode 100644
index 5ec7d4a..0000000
--- a/src/events/messageUpdate.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const fs = require('fs');
-const { join } = require('path');
-
-module.exports = {
- event: 'messageUpdate',
- async execute(_client, log, [o, n], {config, Ticket}) {
- if (!config.transcripts.web.enabled) return;
-
- if (o.partial) {
- try {
- await o.fetch();
- } catch (err) {
- log.error(err);
- return;
- }
- }
-
- if (n.partial) {
- try {
- await n.fetch();
- } catch (err) {
- log.error(err);
- return;
- }
- }
-
- let ticket = await Ticket.findOne({ where: { channel: n.channel.id } });
- if (!ticket) return;
-
- let path = `../../user/transcripts/raw/${n.channel.id}.log`;
- let embeds = [];
- for (let embed in n.embeds) embeds.push({ ...n.embeds[embed] });
-
- fs.appendFileSync(join(__dirname, path), JSON.stringify({
- id: n.id,
- author: n.author.id,
- content: n.content, // do not use cleanContent!
- time: n.createdTimestamp,
- embeds: embeds,
- attachments: [...n.attachments.values()],
- edited: true
- }) + '\n');
-
- }
-};
\ No newline at end of file
diff --git a/src/events/rateLimit.js b/src/events/rateLimit.js
deleted file mode 100644
index 4ef9107..0000000
--- a/src/events/rateLimit.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-module.exports = {
- event: 'rateLimit',
- execute(_client, log, [limit]) {
- log.warn('Rate-limited! (Enable debug mode in config for details)');
- log.debug(limit);
- }
-};
\ No newline at end of file
diff --git a/src/events/ready.js b/src/events/ready.js
deleted file mode 100644
index d1afb17..0000000
--- a/src/events/ready.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const Logger = require('leekslazylogger');
-const log = new Logger();
-const config = require('../../user/' + require('../').config);
-
-module.exports = {
- event: 'ready',
- execute(client, log) {
- log.success(`Authenticated as ${client.user.tag}`);
-
- const updatePresence = () => {
- const presence = config.presences[Math.floor(Math.random() * config.presences.length)];
- let activity = presence.activity + config.append_presence;
- activity = activity.replace(/%s/g, config.prefix);
- client.user.setPresence({
- activity: {
- name: activity,
- type: presence.type.toUpperCase()
- }
- }).catch(log.error);
- log.debug(`Updated presence: ${activity} ${presence.type}`);
- };
-
- updatePresence();
- setInterval(() => {
- updatePresence();
- }, 60000);
-
-
- if (client.guilds.cache.get(config.guild).member(client.user).hasPermission('ADMINISTRATOR', false)) {
- log.success('\'ADMINISTRATOR\' permission has been granted');
- } else log.warn('Bot does not have \'ADMINISTRATOR\' permission');
- }
-};
diff --git a/src/events/warn.js b/src/events/warn.js
deleted file mode 100644
index e442402..0000000
--- a/src/events/warn.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-module.exports = {
- event: 'warn',
- execute(_client, log, [e]) {
- log.warn(e);
- }
-};
\ No newline at end of file
diff --git a/src/index.js b/src/index.js
index 5bb5530..aecee1d 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,174 +1,22 @@
/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- * DiscordTickets Copyright (C) 2020 Isaac "eartharoid" Saunders
- * This program comes with ABSOLUTELY NO WARRANTY.
- * This is free software, and you are welcome to redistribute it
- * under certain conditions. See the included LICENSE file for details.
- *
- */
+ * DiscordTickets
+ * Copyright (C) 2021 Isaac Saunders
-const version = Number(process.version.split('.')[0].replace('v', ''));
-if (version < 12) return console.log('Please upgrade to Node v12 or higher');
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
-const fs = require('fs');
-const { join } = require('path');
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
-let dev = fs.existsSync(join(__dirname, '../user/dev.env')) && fs.existsSync(join(__dirname, '../user/dev.config.js'));
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
-require('dotenv').config({ path: join(__dirname, '../user/', dev ? 'dev.env' : '.env') });
-
-module.exports.config = dev ? 'dev.config.js' : 'config.js';
-const config = require(join(__dirname, '../user/', module.exports.config));
-
-const Discord = require('discord.js');
-const client = new Discord.Client({
- autoReconnect: true,
- partials: ['MESSAGE', 'CHANNEL', 'REACTION'],
-});
-
-client.events = new Discord.Collection();
-client.commands = new Discord.Collection();
-client.cooldowns = new Discord.Collection();
-
-const utils = require('./modules/utils');
-const leeks = require('leeks.js');
-
-require('./modules/banner')(leeks); // big coloured text thing
-
-const Logger = require('leekslazylogger');
-const log = new Logger({
- name: config.name,
- logToFile: config.logs.files.enabled,
- maxAge: config.logs.files.keep_for,
- debug: config.debug
-});
-
-require('./modules/updater')(); // check for updates
-
-/**
- * storage
- */
-const { Sequelize, Model, DataTypes } = require('sequelize');
-
-let sequelize;
-
-switch (config.storage.type) {
-case 'mysql':
- log.info('Connecting to MySQL database...');
- sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
- dialect: 'mysql',
- host: process.env.DB_HOST,
- logging: log.debug
- });
- break;
-case 'mariadb':
- log.info('Connecting to MariaDB database...');
- sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
- dialect: 'mariadb',
- host: process.env.DB_HOST,
- logging: log.debug
- });
- break;
-case 'postgre':
- log.info('Connecting to PostgreSQL database...');
- sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
- dialect: 'postgres',
- host: process.env.DB_HOST,
- logging: log.debug
- });
- break;
-case 'microsoft':
- log.info('Connecting to Microsoft SQL Server database...');
- sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
- dialect: 'mssql',
- host: process.env.DB_HOST,
- logging: log.debug
- });
- break;
-default:
- log.info('Using SQLite storage');
- sequelize = new Sequelize({
- dialect: 'sqlite',
- storage: join(__dirname, '../user/storage.db'),
- logging: log.debug
- });
-}
-
-class Ticket extends Model {}
-Ticket.init({
- channel: DataTypes.STRING,
- creator: DataTypes.STRING,
- open: DataTypes.BOOLEAN,
- topic: DataTypes.TEXT
-}, {
- sequelize,
- modelName: 'ticket'
-});
-
-class Setting extends Model {}
-Setting.init({
- key: DataTypes.STRING,
- value: DataTypes.STRING,
-}, {
- sequelize,
- modelName: 'setting'
-});
-
-Ticket.sync();
-Setting.sync();
-
-/**
- * event loader
- */
-const events = fs.readdirSync(join(__dirname, 'events')).filter(file => file.endsWith('.js'));
-for (const file of events) {
- const event = require(`./events/${file}`);
- client.events.set(event.event, event);
- // client.on(event.event, e => client.events.get(event.event).execute(client, e, Ticket, Setting));
- client.on(event.event, (e1, e2) => client.events.get(event.event).execute(client, log, [e1, e2], {config, Ticket, Setting}));
- log.console(log.format(`> Loaded &7${event.event}&f event`));
-}
-
-/**
- * command loader
- */
-const commands = fs.readdirSync(join(__dirname, 'commands')).filter(file => file.endsWith('.js'));
-for (const file of commands) {
- const command = require(`./commands/${file}`);
- client.commands.set(command.name, command);
- log.console(log.format(`> Loaded &7${config.prefix}${command.name}&f command`));
-}
-
-log.info(`Loaded ${events.length} events and ${commands.length} commands`);
-
-const one_day = 1000 * 60 * 60 * 24;
-const txt = '../user/transcripts/text';
-const clean = () => {
- const files = fs.readdirSync(join(__dirname, txt)).filter(file => file.endsWith('.txt'));
- let total = 0;
- for (const file of files) {
- let diff = (new Date() - new Date(fs.statSync(join(__dirname, txt, file)).mtime));
- if (Math.floor(diff / one_day) > config.transcripts.text.keep_for) {
- fs.unlinkSync(join(__dirname, txt, file));
- total++;
- }
- }
- if (total > 0) log.info(`Deleted ${total} old text ${utils.plural('transcript', total)}`);
-};
-
-if (config.transcripts.text.enabled) {
- clean();
- setInterval(clean, one_day);
-}
-
-process.on('unhandledRejection', error => {
- log.warn('An error was not caught');
- log.warn(`Uncaught ${error.name}: ${error.message}`);
- log.error(error);
-});
-
-client.login(process.env.TOKEN);
+ * @name @eartharoid/discordtickets
+ * @description An open-source & self-hosted Discord bot for ticket management.
+ * @copyright 2021 Isaac Saunders
+ * @license GNU-GPLv3
+ */
\ No newline at end of file
diff --git a/src/modules/archive.js b/src/modules/archive.js
deleted file mode 100644
index 6b11fd7..0000000
--- a/src/modules/archive.js
+++ /dev/null
@@ -1,161 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-
-const Logger = require('leekslazylogger');
-const log = new Logger();
-const Readlines = require('n-readlines');
-const fs = require('fs');
-const { join } = require('path');
-const dtf = require('@eartharoid/dtf');
-const config = require('../../user/' + require('../').config);
-const fetch = require('node-fetch');
-
-module.exports.add = (message) => {
-
- if (message.type !== 'DEFAULT') return;
-
- if (config.transcripts.text.enabled) { // text transcripts
- let path = `../../user/transcripts/text/${message.channel.id}.txt`,
- time = dtf('HH:mm:ss n_D MMM YY', message.createdAt),
- msg = message.cleanContent;
- message.attachments.each(a => msg += '\n' + a.url);
- let string = `[${time}] [${message.author.tag}] :> ${msg}`;
- fs.appendFileSync(join(__dirname, path), string + '\n');
- }
-
- if (config.transcripts.web.enabled) { // web archives
- let raw = `../../user/transcripts/raw/${message.channel.id}.log`,
- json = `../../user/transcripts/raw/entities/${message.channel.id}.json`;
-
- let embeds = [];
- for (let embed in message.embeds) embeds.push({ ...message.embeds[embed] });
-
- // message
- fs.appendFileSync(join(__dirname, raw), JSON.stringify({
- id: message.id,
- author: message.author.id,
- content: message.content, // do not use cleanContent, we want to include the mentions!
- time: message.createdTimestamp,
- embeds: embeds,
- attachments: [...message.attachments.values()]
- }) + '\n');
-
- // channel entities
- if (!fs.existsSync(join(__dirname, json)))
- fs.writeFileSync(join(__dirname, json), JSON.stringify({
- entities: {
- users: {},
- channels: {},
- roles: {}
- }
- })); // create new
-
- let data = JSON.parse(fs.readFileSync(join(__dirname, json)));
-
- // if (!data.entities.users[message.author.id])
- data.entities.users[message.author.id] = {
- avatar: message.author.displayAvatarURL(),
- username: message.author.username,
- discriminator: message.author.discriminator,
- displayName: message.member.displayName,
- color: message.member.displayColor === 0 ? null : message.member.displayColor,
- badge: message.author.bot ? 'bot' : null
- };
-
- // mentions.users
- message.mentions.members.each(m => data.entities.users[m.id] = { // for mentions
- avatar: m.user.displayAvatarURL(),
- username: m.user.username,
- discriminator: m.user.discriminator,
- displayName: m.user.displayName || m.user.username,
- color: m.displayColor === 0 ? null : m.displayColor,
- badge: m.user.bot ? 'bot' : null
- });
-
- message.mentions.channels.each(c => data.entities.channels[c.id] = { // for mentions only
- name: c.name
- });
-
- message.mentions.roles.each(r => data.entities.roles[r.id] = { // for mentions only
- name: r.name,
- color: r.color === 0 ? 7506394 : r.color
- });
-
- fs.writeFileSync(join(__dirname, json), JSON.stringify(data));
-
- }
-};
-
-module.exports.export = (Ticket, channel) => new Promise((resolve, reject) => {
-
- (async () => {
- let ticket = await Ticket.findOne({
- where: {
- channel: channel.id
- }
- });
-
- let raw = `../../user/transcripts/raw/${channel.id}.log`,
- json = `../../user/transcripts/raw/entities/${channel.id}.json`;
-
- if (!config.transcripts.web.enabled || !fs.existsSync(join(__dirname, raw)) || !fs.existsSync(join(__dirname, json))) return reject(false);
-
- let data = JSON.parse(fs.readFileSync(join(__dirname, json)));
-
- data.ticket = {
- id: ticket.id,
- name: channel.name,
- creator: ticket.creator,
- channel: channel.id,
- topic: channel.topic
- };
-
- data.messages = [];
- let line;
-
- const lineByLine = new Readlines(join(__dirname, raw));
-
- // eslint-disable-next-line no-cond-assign
- while (line = lineByLine.next()) {
- let message = JSON.parse(line.toString('utf8'));
- let index = data.messages.findIndex(m => m.id === message.id);
- if (index === -1) data.messages.push(message);
- else data.messages[index] = message;
- }
-
- let endpoint = config.transcripts.web.server;
-
- if (endpoint[endpoint.length - 1] === '/') endpoint = endpoint.slice(0, -1);
-
- endpoint += `/${data.ticket.creator}/${data.ticket.channel}/?key=${process.env.ARCHIVES_KEY}`;
-
- fetch(encodeURI(endpoint), {
- method: 'post',
- body: JSON.stringify(data),
- headers: { 'Content-Type': 'application/json' },
- })
- .then(res => res.json())
- .then(res => {
- if (res.status !== 200) {
- log.warn(res);
- return resolve(new Error(`${res.status} (${res.message})`));
- }
-
- log.success(`Uploaded ticket #${ticket.id} archive to server`);
-
- fs.unlinkSync(join(__dirname, raw));
- fs.unlinkSync(join(__dirname, json));
-
- resolve(res.url);
- }).catch(e => {
- log.warn(e);
- return resolve(e);
- });
- })();
-});
diff --git a/src/modules/banner.js b/src/modules/banner.js
deleted file mode 100644
index e686532..0000000
--- a/src/modules/banner.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const { version, homepage } = require('../../package.json');
-const link = require('terminal-link');
-
-module.exports = (leeks) => {
- console.log(leeks.colours.cyan(`
-######## #### ###### ###### ####### ######## ########
-## ## ## ## ## ## ## ## ## ## ## ## ##
-## ## ## ## ## ## ## ## ## ## ##
-## ## ## ###### ## ## ## ######## ## ##
-## ## ## ## ## ## ## ## ## ## ##
-## ## ## ## ## ## ## ## ## ## ## ## ##
-######## #### ###### ###### ####### ## ## ########
-
-######## #### ###### ## ## ######## ######## ######
- ## ## ## ## ## ## ## ## ## ##
- ## ## ## ## ## ## ## ##
- ## ## ## ##### ###### ## ######
- ## ## ## ## ## ## ## ##
- ## ## ## ## ## ## ## ## ## ##
- ## #### ###### ## ## ######## ## ######
-`));
- console.log(leeks.colours.cyanBright(`DiscordTickets bot v${version} by eartharoid`));
- console.log(leeks.colours.cyanBright(homepage + '\n'));
- console.log(leeks.colours.cyanBright(`Please ${link('donate', 'https://ko-fi.com/eartharoid')} if you find this bot useful`));
- console.log('\n\n');
-};
\ No newline at end of file
diff --git a/src/modules/updater.js b/src/modules/updater.js
deleted file mode 100644
index ce472c8..0000000
--- a/src/modules/updater.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-const Logger = require('leekslazylogger');
-const log = new Logger();
-const fetch = require('node-fetch');
-const config = require('../../user/' + require('../').config);
-let {version} = require('../../package.json');
-version = 'v' + version;
-const boxen = require('boxen');
-const link = require('terminal-link');
-
-module.exports = async () => {
- if (!config.updater) return;
- const json = await (await fetch('https://api.github.com/repos/eartharoid/DiscordTickets/releases')).json();
- const update = json[0];
- let notice = [];
-
- if (version !== update.tag_name) {
- log.notice(log.f(`There is an update available for Discord Tickets (${version} -> ${update.tag_name})`));
-
- notice.push(`&6You are currently using &c${version}&6, the latest is &a${update.tag_name}&6.`);
- notice.push(`&6Download "&f${update.name}&6" from`);
- notice.push(link('&6the GitHub releases page', 'https://github.com/eartharoid/DiscordTickets/releases/'));
-
- console.log(
- boxen(log.f(notice.join('\n')), {
- padding: 1,
- margin: 1,
- align: 'center',
- borderColor: 'yellow',
- borderStyle: 'round'
- })
- );
- }
-};
\ No newline at end of file
diff --git a/src/modules/utils.js b/src/modules/utils.js
deleted file mode 100644
index 3eeecc1..0000000
--- a/src/modules/utils.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- *
- * @name DiscordTickets
- * @author eartharoid
- * @license GNU-GPLv3
- *
- */
-
-module.exports = {
- /**
- * @description Appends 's' to a word if plural number
- * @param {string} word - singular version of word
- * @param {number} num - integer
- */
- plural(word, num) {
- return num !== 1 ? word + 's' : word;
- }
-};
\ No newline at end of file
diff --git a/user/.env b/user/.env
deleted file mode 100644
index f8e4b3c..0000000
--- a/user/.env
+++ /dev/null
@@ -1,8 +0,0 @@
-TOKEN=
-
-ARCHIVES_KEY=
-
-DB_HOST=
-DB_NAME=
-DB_USER=
-DB_PASS=
\ No newline at end of file
diff --git a/user/config.js b/user/config.js
index e5083ab..5e670c6 100644
--- a/user/config.js
+++ b/user/config.js
@@ -10,110 +10,48 @@
* Quick Start
* ---------------------
*
- * > For detailed instructions, visit the GitHub repository and read the documentation:
- * https://github.com/eartharoid/DiscordTickets/wiki
- *
- * > IMPORTANT: Also edit the TOKEN in 'user/.env'
+ * > For detailed instructions, visit the documentation: https://eartharoid.github.io/discordtickets
*
* ---------------------
* Support
* ---------------------
*
- * > Information: https://github.com/eartharoid/DiscordTickets/#readme
- * > Discord Support Server: https://go.eartharoid.me/discord
- * > Wiki: https://github.com/eartharoid/DiscordTickets/wiki
+ * > Discord support server: https://go.eartharoid.me/discord
+ * > Wiki: https://eartharoid.github.io/discordtickets
*
* ###############################################################################################
*/
module.exports = {
- prefix: '-',
- name: 'DiscordTickets',
- presences: [
- {
- activity: '%snew',
- type: 'PLAYING'
- },
- {
- activity: 'with tickets',
- type: 'PLAYING'
- },
- {
- activity: 'for new tickets',
- type: 'WATCHING'
- }
- ],
- append_presence: ' | %shelp',
- colour: '#009999',
- err_colour: 'RED',
- cooldown: 3,
- guild: '', // ID of your guild (REQUIRED)
- staff_role: '', // ID of your Support Team role (REQUIRED)
-
- tickets: {
- category: '', // ID of your tickets category (REQUIRED)
- send_img: true,
- ping: 'here',
- text: `Hello there, {{ tag }}!
- A member of staff will assist you shortly.
- In the mean time, please describe your issue in as much detail as possible! :)`,
- pin: false,
- max: 3,
- default_topic: {
- command: 'No topic given',
- panel: 'Created via panel'
- }
- },
-
- commands: {
- close: {
- confirmation: true,
- send_transcripts: true
- },
- delete: {
- confirmation: true
- },
- new: {
- enabled: true
- },
- closeall: {
- enabled: true,
- },
- },
-
- transcripts: {
- text: {
- enabled: true,
- keep_for: 90,
- },
- web: {
- enabled: false,
- server: 'https://tickets.example.com',
- },
- channel: '' // ID of your archives channel
- },
-
- panel: {
- title: 'Support Tickets',
- description: 'Need help? No problem! React to this panel to create a new support ticket so our Support Team can assist you.',
- reaction: '🧾'
- },
-
storage: {
type: 'sqlite'
},
-
- logs: {
- files: {
- enabled: true,
- keep_for: 7
- },
- discord: {
- enabled: false,
- channel: '' // ID of your log channel
- }
+ portal: {
+ enabled: true,
+ host: 'https://tickets.eartharoid.me'
+ },
+ presences: [
+ {
+ activity: '%snew | %shelp',
+ type: 'PLAYING'
+ },
+ {
+ activity: 'with tickets | %shelp',
+ type: 'PLAYING'
+ },
+ {
+ activity: 'for new tickets | %shelp',
+ type: 'WATCHING'
+ }
+ ],
+ defaults: {
+ prefix: '-',
+ colour: '#009999',
+ },
+ logs: {
+ enabled: true,
+ keep_for: 30
},
-
debug: false,
- updater: true
-};
+ update_notice: true,
+};
\ No newline at end of file
diff --git a/user/example.config.js b/user/example.config.js
new file mode 100644
index 0000000..8c58b28
--- /dev/null
+++ b/user/example.config.js
@@ -0,0 +1,57 @@
+/**
+ * ###############################################################################################
+ * ____ _ _____ _ _
+ * | _ \ (_) ___ ___ ___ _ __ __| | |_ _| (_) ___ | | __ ___ | |_ ___
+ * | | | | | | / __| / __| / _ \ | '__| / _` | | | | | / __| | |/ / / _ \ | __| / __|
+ * | |_| | | | \__ \ | (__ | (_) | | | | (_| | | | | | | (__ | < | __/ | |_ \__ \
+ * |____/ |_| |___/ \___| \___/ |_| \__,_| |_| |_| \___| |_|\_\ \___| \__| |___/
+ *
+ * ---------------------
+ * Quick Start
+ * ---------------------
+ *
+ * > For detailed instructions, visit the documentation: https://eartharoid.github.io/discordtickets
+ *
+ * ---------------------
+ * Support
+ * ---------------------
+ *
+ * > Discord support server: https://go.eartharoid.me/discord
+ * > Wiki: https://eartharoid.github.io/discordtickets
+ *
+ * ###############################################################################################
+ */
+
+module.exports = {
+ storage: {
+ type: 'sqlite'
+ },
+ portal: {
+ enabled: false,
+ host: 'https://tickets.example.com'
+ },
+ presences: [
+ {
+ activity: '%snew | %shelp',
+ type: 'PLAYING'
+ },
+ {
+ activity: 'with tickets | %shelp',
+ type: 'PLAYING'
+ },
+ {
+ activity: 'for new tickets | %shelp',
+ type: 'WATCHING'
+ }
+ ],
+ defaults: {
+ prefix: '-',
+ colour: '#009999',
+ },
+ logs: {
+ enabled: true,
+ keep_for: 30
+ },
+ debug: false,
+ update_notice: true,
+};
\ No newline at end of file
diff --git a/user/images/how-can-i-help-1.gif b/user/images/how-can-i-help-1.gif
deleted file mode 100644
index 185fde1..0000000
Binary files a/user/images/how-can-i-help-1.gif and /dev/null differ
diff --git a/user/images/how-can-i-help-2.gif b/user/images/how-can-i-help-2.gif
deleted file mode 100644
index 181a57e..0000000
Binary files a/user/images/how-can-i-help-2.gif and /dev/null differ
diff --git a/user/images/how-can-we-help.gif b/user/images/how-can-we-help.gif
deleted file mode 100644
index b57bd7d..0000000
Binary files a/user/images/how-can-we-help.gif and /dev/null differ
diff --git a/user/transcripts/raw/entities/.gitkeep b/user/transcripts/raw/entities/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/user/transcripts/text/.gitkeep b/user/transcripts/text/.gitkeep
deleted file mode 100644
index e69de29..0000000