summary refs log tree commit diff
path: root/api
diff options
context:
space:
mode:
authorMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2022-02-13 22:29:14 +1100
committerMadeline <46743919+MaddyUnderStars@users.noreply.github.com>2022-02-13 22:29:14 +1100
commit204fe2aed1ebaed98a842db785851eb4f64bc2be (patch)
treedbcbf5863f6ffe86d544608d5c206b207c6df307 /api
parent;jondfgsk (diff)
parentAppropriate DB charset (#629) (diff)
downloadserver-204fe2aed1ebaed98a842db785851eb4f64bc2be.tar.xz
Merge branch 'master' into maddyrtc
Diffstat (limited to 'api')
-rw-r--r--api/assets/fosscord-login.css6
-rw-r--r--api/assets/fosscord.css6
-rw-r--r--api/client_test/index.html17
-rw-r--r--api/package-lock.json831
-rw-r--r--api/package.json2
-rw-r--r--api/scripts/stresstest/package-lock.json20
-rw-r--r--api/src/routes/channels/#channel_id/messages/index.ts20
-rw-r--r--api/src/routes/channels/#channel_id/webhooks.ts4
-rw-r--r--api/src/routes/guilds/#guild_id/audit-logs.ts20
-rw-r--r--api/src/routes/guilds/#guild_id/integrations.ts12
-rw-r--r--api/src/routes/guilds/#guild_id/webhooks.ts12
-rw-r--r--api/src/routes/invites/index.ts3
12 files changed, 850 insertions, 103 deletions
diff --git a/api/assets/fosscord-login.css b/api/assets/fosscord-login.css
index bc32b82e..34cf542b 100644
--- a/api/assets/fosscord-login.css
+++ b/api/assets/fosscord-login.css
@@ -22,10 +22,10 @@ h3.title-jXR8lp.marginBottom8-AtZOdT.base-1x0h_U.size24-RIRrxO::after {
 /* Logo in top left when bg removed */
 #app-mount > div.app-1q1i1E > div > a {
 	/* replace me: original dimensions: 130x36 */
-	background: url(https://raw.githubusercontent.com/fosscord/fosscord/9900329e5ef2c17bdeb6893e04c0511f72027f97/assets/logo/temp.svg);
+	background: url(https://raw.githubusercontent.com/fosscord/fosscord/master/assets-rebrand/svg/Fosscord-Wordmark-Gradient.svg);
+	width: 130px;
+	height: 23px;
 	background-size: contain;
-	width: 128px;
-	height: 128px;
 	border-radius: 50%;
 }
 
diff --git a/api/assets/fosscord.css b/api/assets/fosscord.css
index 6a8b4c64..6078fdeb 100644
--- a/api/assets/fosscord.css
+++ b/api/assets/fosscord.css
@@ -13,10 +13,14 @@
 /* home button icon */
 #app-mount > div.app-1q1i1E > div > div.layers-3iHuyZ.layers-3q14ss > div > div > nav > ul > div.scroller-1Bvpku.none-2Eo-qx.scrollerBase-289Jih > div.tutorialContainer-2sGCg9 > div > div.listItemWrapper-KhRmzM > div > svg > foreignObject > div > div
 {
-    background-image: url(https://raw.githubusercontent.com/fosscord/fosscord/9900329e5ef2c17bdeb6893e04c0511f72027f97/assets/logo/temp.svg);
+    background-image: url(https://raw.githubusercontent.com/fosscord/fosscord/master/assets-rebrand/svg/Fosscord-Icon-Rounded-Subtract.svg);
     background-size: contain;
     border-radius: 50%;
 }
+
+#app-mount > div.app-1q1i1E > div > div.layers-3iHuyZ.layers-3q14ss > div > div > nav > ul > div.scroller-1Bvpku.none-2Eo-qx.scrollerBase-289Jih > div.tutorialContainer-2sGCg9 > div > div.listItemWrapper-KhRmzM > div > svg > foreignObject > div > div, #app-mount > div.app-1q1i1E > div > div.layers-3iHuyZ.layers-3q14ss > div > div > nav > ul > div.scroller-1Bvpku.none-2Eo-qx.scrollerBase-289Jih > div.tutorialContainer-2sGCg9 > div > div.listItemWrapper-KhRmzM > div > svg > foreignObject > div > div:hover {
+	background-color: white;
+}
 /* Login QR */
 #app-mount > div.app-1q1i1E > div > div > div > div > form > div > div > div.transitionGroup-aR7y1d.qrLogin-1AOZMt,
 #app-mount > div.app-1q1i1E > div > div > div > div > form > div > div > div.verticalSeparator-3huAjp,
diff --git a/api/client_test/index.html b/api/client_test/index.html
index 0b3a775a..39ff346d 100644
--- a/api/client_test/index.html
+++ b/api/client_test/index.html
@@ -54,9 +54,14 @@
 			setInterval(() => {
 				var token = JSON.parse(localStorage.getItem("token"));
 				if (token) {
+					var logincss = document.querySelector('#logincss'),
+					canRemove = logincss ? logincss: "";
+					if(canRemove !== "") {
 					document.querySelector("#logincss").remove();
+					canRemove = "";
+					}
 				}
-			}, 1000);
+			}, 1000)
 
 			const settings = JSON.parse(localStorage.getItem("UserSettingsStore"));
 			if (settings && settings.locale.length <= 2) {
@@ -65,11 +70,11 @@
 				localStorage.setItem("UserSettingsStore", JSON.stringify(settings));
 			}
 		</script>
-		<script src="/assets/checkLocale.js"></script>
-		<script src="/assets/479a2f1e7d625dc134b9.js"></script>
-		<script src="/assets/a15fd133a1d2d77a2424.js"></script>
-		<script src="/assets/97e6fa22aa08ee4daa5e.js"></script>
-		<script src="/assets/9b2b7f0632acd0c5e781.js"></script>
+	 	<script src="/assets/checkLocale.js"></script>
+		<script src="/assets/1e18f2aac02e172db283.js"></script>
+		<script src="/assets/681e53cdfefa5b82249a.js"></script>
+		<script src="/assets/7a036838c0a0e73f59d8.js"></script>
+		<script src="/assets/b6cf2184a7a05e7525ce.js"></script>
 		<!-- plugin marker -->
 	</body>
 </html>
diff --git a/api/package-lock.json b/api/package-lock.json
index aa0c07c5..21afe02c 100644
--- a/api/package-lock.json
+++ b/api/package-lock.json
@@ -8,11 +8,13 @@
 			"name": "@fosscord/api",
 			"version": "1.0.0",
 			"hasInstallScript": true,
-			"license": "ISC",
+			"license": "GPLV3",
 			"dependencies": {
 				"@babel/preset-env": "^7.15.8",
 				"@babel/preset-typescript": "^7.15.0",
 				"@fosscord/util": "file:../util",
+				"@sentry/node": "^6.16.1",
+				"@sentry/tracing": "^6.16.1",
 				"ajv": "8.6.2",
 				"ajv-formats": "^2.1.1",
 				"amqplib": "^0.8.0",
@@ -32,9 +34,10 @@
 				"missing-native-js-functions": "^1.2.18",
 				"morgan": "^1.10.0",
 				"multer": "^1.4.2",
-				"nanocolors": "^0.2.13",
-				"node-fetch": "^2.6.1",
+				"node": ">=15.0",
+				"node-fetch": "^3.1.1",
 				"patch-package": "^6.4.7",
+				"picocolors": "^1.0.0",
 				"proxy-agent": "^5.0.0",
 				"supertest": "^6.1.6",
 				"typeorm": "^0.2.37"
@@ -73,16 +76,15 @@
 			"license": "GPLV3",
 			"dependencies": {
 				"amqplib": "^0.8.0",
-				"better-sqlite3": "^7.4.3",
 				"form-data": "^4.0.0",
 				"jsonwebtoken": "^8.5.1",
 				"lambert-server": "^1.2.12",
 				"missing-native-js-functions": "^1.2.18",
 				"multer": "^1.4.3",
-				"nanocolors": "^0.2.12",
-				"node-fetch": "^2.6.1",
+				"node-fetch": "^2.6.2",
 				"patch-package": "^6.4.7",
 				"pg": "^8.7.1",
+				"picocolors": "^1.0.0",
 				"proxy-agent": "^5.0.0",
 				"reflect-metadata": "^0.1.13",
 				"typeorm": "^0.2.38",
@@ -1444,11 +1446,15 @@
 		},
 		"../util/node_modules/aproba": {
 			"version": "1.2.0",
-			"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+			"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+			"optional": true,
+			"peer": true
 		},
 		"../util/node_modules/are-we-there-yet": {
 			"version": "1.1.7",
 			"integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"delegates": "^1.0.0",
 				"readable-stream": "^2.0.6"
@@ -1456,11 +1462,15 @@
 		},
 		"../util/node_modules/are-we-there-yet/node_modules/isarray": {
 			"version": "1.0.0",
-			"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+			"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+			"optional": true,
+			"peer": true
 		},
 		"../util/node_modules/are-we-there-yet/node_modules/readable-stream": {
 			"version": "2.3.7",
 			"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"core-util-is": "~1.0.0",
 				"inherits": "~2.0.3",
@@ -1473,11 +1483,15 @@
 		},
 		"../util/node_modules/are-we-there-yet/node_modules/safe-buffer": {
 			"version": "5.1.2",
-			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+			"optional": true,
+			"peer": true
 		},
 		"../util/node_modules/are-we-there-yet/node_modules/string_decoder": {
 			"version": "1.1.1",
 			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"safe-buffer": "~5.1.0"
 			}
@@ -1658,6 +1672,8 @@
 			"version": "7.4.3",
 			"integrity": "sha512-07bKjClZg/f4KMVRkzWtoIvazVPcF1gsvVKVIXlxwleC2DxuIhnra3KCMlUT1rFeRYXXckot2a46UciF2d9KLw==",
 			"hasInstallScript": true,
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"bindings": "^1.5.0",
 				"prebuild-install": "^6.0.1",
@@ -1667,6 +1683,8 @@
 		"../util/node_modules/better-sqlite3/node_modules/chownr": {
 			"version": "2.0.0",
 			"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+			"optional": true,
+			"peer": true,
 			"engines": {
 				"node": ">=10"
 			}
@@ -1674,6 +1692,8 @@
 		"../util/node_modules/better-sqlite3/node_modules/fs-minipass": {
 			"version": "2.1.0",
 			"integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"minipass": "^3.0.0"
 			},
@@ -1684,6 +1704,8 @@
 		"../util/node_modules/better-sqlite3/node_modules/minipass": {
 			"version": "3.1.5",
 			"integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"yallist": "^4.0.0"
 			},
@@ -1694,6 +1716,8 @@
 		"../util/node_modules/better-sqlite3/node_modules/minizlib": {
 			"version": "2.1.2",
 			"integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"minipass": "^3.0.0",
 				"yallist": "^4.0.0"
@@ -1705,6 +1729,8 @@
 		"../util/node_modules/better-sqlite3/node_modules/mkdirp": {
 			"version": "1.0.4",
 			"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+			"optional": true,
+			"peer": true,
 			"bin": {
 				"mkdirp": "bin/cmd.js"
 			},
@@ -1715,6 +1741,8 @@
 		"../util/node_modules/better-sqlite3/node_modules/tar": {
 			"version": "6.1.11",
 			"integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"chownr": "^2.0.0",
 				"fs-minipass": "^2.0.0",
@@ -1730,6 +1758,8 @@
 		"../util/node_modules/bindings": {
 			"version": "1.5.0",
 			"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"file-uri-to-path": "1.0.0"
 			}
@@ -1753,6 +1783,8 @@
 		"../util/node_modules/bl": {
 			"version": "4.1.0",
 			"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"buffer": "^5.5.0",
 				"inherits": "^2.0.4",
@@ -1762,6 +1794,8 @@
 		"../util/node_modules/bl/node_modules/readable-stream": {
 			"version": "3.6.0",
 			"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"inherits": "^2.0.3",
 				"string_decoder": "^1.1.1",
@@ -1774,6 +1808,8 @@
 		"../util/node_modules/bl/node_modules/string_decoder": {
 			"version": "1.3.0",
 			"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"safe-buffer": "~5.2.0"
 			}
@@ -1883,6 +1919,8 @@
 					"url": "https://feross.org/support"
 				}
 			],
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"base64-js": "^1.3.1",
 				"ieee754": "^1.1.13"
@@ -1980,7 +2018,9 @@
 		},
 		"../util/node_modules/chownr": {
 			"version": "1.1.4",
-			"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
+			"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+			"optional": true,
+			"peer": true
 		},
 		"../util/node_modules/ci-info": {
 			"version": "3.2.0",
@@ -2055,6 +2095,8 @@
 		"../util/node_modules/code-point-at": {
 			"version": "1.1.0",
 			"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+			"optional": true,
+			"peer": true,
 			"engines": {
 				"node": ">=0.10.0"
 			}
@@ -2141,7 +2183,9 @@
 		},
 		"../util/node_modules/console-control-strings": {
 			"version": "1.1.0",
-			"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
+			"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+			"optional": true,
+			"peer": true
 		},
 		"../util/node_modules/content-disposition": {
 			"version": "0.5.3",
@@ -2270,6 +2314,8 @@
 		"../util/node_modules/decompress-response": {
 			"version": "4.2.1",
 			"integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"mimic-response": "^2.0.0"
 			},
@@ -2285,6 +2331,8 @@
 		"../util/node_modules/deep-extend": {
 			"version": "0.6.0",
 			"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+			"optional": true,
+			"peer": true,
 			"engines": {
 				"node": ">=4.0.0"
 			}
@@ -2312,7 +2360,9 @@
 		},
 		"../util/node_modules/delegates": {
 			"version": "1.0.0",
-			"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+			"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+			"optional": true,
+			"peer": true
 		},
 		"../util/node_modules/depd": {
 			"version": "1.1.2",
@@ -2328,6 +2378,8 @@
 		"../util/node_modules/detect-libc": {
 			"version": "1.0.3",
 			"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
+			"optional": true,
+			"peer": true,
 			"bin": {
 				"detect-libc": "bin/detect-libc.js"
 			},
@@ -2446,6 +2498,8 @@
 		"../util/node_modules/end-of-stream": {
 			"version": "1.4.4",
 			"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"once": "^1.4.0"
 			}
@@ -2558,6 +2612,8 @@
 		"../util/node_modules/expand-template": {
 			"version": "2.0.3",
 			"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+			"optional": true,
+			"peer": true,
 			"engines": {
 				"node": ">=6"
 			}
@@ -2687,7 +2743,9 @@
 		},
 		"../util/node_modules/file-uri-to-path": {
 			"version": "1.0.0",
-			"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
+			"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+			"optional": true,
+			"peer": true
 		},
 		"../util/node_modules/fill-range": {
 			"version": "7.0.1",
@@ -2759,7 +2817,9 @@
 		},
 		"../util/node_modules/fs-constants": {
 			"version": "1.0.0",
-			"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
+			"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+			"optional": true,
+			"peer": true
 		},
 		"../util/node_modules/fs-extra": {
 			"version": "7.0.1",
@@ -2834,6 +2894,8 @@
 		"../util/node_modules/gauge": {
 			"version": "2.7.4",
 			"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"aproba": "^1.0.3",
 				"console-control-strings": "^1.0.0",
@@ -2848,6 +2910,8 @@
 		"../util/node_modules/gauge/node_modules/ansi-regex": {
 			"version": "2.1.1",
 			"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+			"optional": true,
+			"peer": true,
 			"engines": {
 				"node": ">=0.10.0"
 			}
@@ -2855,6 +2919,8 @@
 		"../util/node_modules/gauge/node_modules/strip-ansi": {
 			"version": "3.0.1",
 			"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"ansi-regex": "^2.0.0"
 			},
@@ -2907,7 +2973,9 @@
 		},
 		"../util/node_modules/github-from-package": {
 			"version": "0.0.0",
-			"integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4="
+			"integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
+			"optional": true,
+			"peer": true
 		},
 		"../util/node_modules/glob": {
 			"version": "7.1.7",
@@ -2999,7 +3067,9 @@
 		},
 		"../util/node_modules/has-unicode": {
 			"version": "2.0.1",
-			"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
+			"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+			"optional": true,
+			"peer": true
 		},
 		"../util/node_modules/helmet": {
 			"version": "4.6.0",
@@ -3213,7 +3283,9 @@
 		},
 		"../util/node_modules/ini": {
 			"version": "1.3.8",
-			"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+			"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+			"optional": true,
+			"peer": true
 		},
 		"../util/node_modules/ipaddr.js": {
 			"version": "1.9.1",
@@ -3260,6 +3332,8 @@
 		"../util/node_modules/is-fullwidth-code-point": {
 			"version": "1.0.0",
 			"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"number-is-nan": "^1.0.0"
 			},
@@ -4418,6 +4492,8 @@
 		"../util/node_modules/mimic-response": {
 			"version": "2.1.0",
 			"integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
+			"optional": true,
+			"peer": true,
 			"engines": {
 				"node": ">=8"
 			},
@@ -4480,7 +4556,9 @@
 		},
 		"../util/node_modules/mkdirp-classic": {
 			"version": "0.5.3",
-			"integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
+			"integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+			"optional": true,
+			"peer": true
 		},
 		"../util/node_modules/ms": {
 			"version": "2.0.0",
@@ -4512,13 +4590,11 @@
 				"thenify-all": "^1.0.0"
 			}
 		},
-		"../util/node_modules/nanocolors": {
-			"version": "0.2.12",
-			"integrity": "sha512-SFNdALvzW+rVlzqexid6epYdt8H9Zol7xDoQarioEFcFN0JHo4CYNztAxmtfgGTVRCmFlEOqqhBpoFGKqSAMug=="
-		},
 		"../util/node_modules/napi-build-utils": {
 			"version": "1.0.2",
-			"integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg=="
+			"integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
+			"optional": true,
+			"peer": true
 		},
 		"../util/node_modules/natural-compare": {
 			"version": "1.4.0",
@@ -4571,6 +4647,8 @@
 		"../util/node_modules/node-abi": {
 			"version": "2.30.1",
 			"integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"semver": "^5.4.1"
 			}
@@ -4578,6 +4656,8 @@
 		"../util/node_modules/node-abi/node_modules/semver": {
 			"version": "5.7.1",
 			"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+			"optional": true,
+			"peer": true,
 			"bin": {
 				"semver": "bin/semver"
 			}
@@ -4812,6 +4892,8 @@
 		"../util/node_modules/npmlog": {
 			"version": "4.1.2",
 			"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"are-we-there-yet": "~1.1.2",
 				"console-control-strings": "~1.1.0",
@@ -4822,6 +4904,8 @@
 		"../util/node_modules/number-is-nan": {
 			"version": "1.0.1",
 			"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+			"optional": true,
+			"peer": true,
 			"engines": {
 				"node": ">=0.10.0"
 			}
@@ -5346,6 +5430,8 @@
 		"../util/node_modules/prebuild-install": {
 			"version": "6.1.4",
 			"integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"detect-libc": "^1.0.3",
 				"expand-template": "^2.0.3",
@@ -5436,6 +5522,8 @@
 		"../util/node_modules/pump": {
 			"version": "3.0.0",
 			"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"end-of-stream": "^1.1.0",
 				"once": "^1.3.1"
@@ -5483,6 +5571,8 @@
 		"../util/node_modules/rc": {
 			"version": "1.2.8",
 			"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"deep-extend": "^0.6.0",
 				"ini": "~1.3.0",
@@ -5722,7 +5812,9 @@
 		},
 		"../util/node_modules/set-blocking": {
 			"version": "2.0.0",
-			"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+			"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+			"optional": true,
+			"peer": true
 		},
 		"../util/node_modules/setprototypeof": {
 			"version": "1.1.1",
@@ -5760,7 +5852,8 @@
 		},
 		"../util/node_modules/signal-exit": {
 			"version": "3.0.4",
-			"integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q=="
+			"integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==",
+			"devOptional": true
 		},
 		"../util/node_modules/simple-concat": {
 			"version": "1.0.1",
@@ -5778,11 +5871,15 @@
 					"type": "consulting",
 					"url": "https://feross.org/support"
 				}
-			]
+			],
+			"optional": true,
+			"peer": true
 		},
 		"../util/node_modules/simple-get": {
 			"version": "3.1.0",
 			"integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"decompress-response": "^4.2.0",
 				"once": "^1.3.1",
@@ -5939,6 +6036,8 @@
 		"../util/node_modules/string-width": {
 			"version": "1.0.2",
 			"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"code-point-at": "^1.0.0",
 				"is-fullwidth-code-point": "^1.0.0",
@@ -5951,6 +6050,8 @@
 		"../util/node_modules/string-width/node_modules/ansi-regex": {
 			"version": "2.1.1",
 			"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+			"optional": true,
+			"peer": true,
 			"engines": {
 				"node": ">=0.10.0"
 			}
@@ -5958,6 +6059,8 @@
 		"../util/node_modules/string-width/node_modules/strip-ansi": {
 			"version": "3.0.1",
 			"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"ansi-regex": "^2.0.0"
 			},
@@ -5994,6 +6097,8 @@
 		"../util/node_modules/strip-json-comments": {
 			"version": "2.0.1",
 			"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+			"optional": true,
+			"peer": true,
 			"engines": {
 				"node": ">=0.10.0"
 			}
@@ -6040,6 +6145,8 @@
 		"../util/node_modules/tar-fs": {
 			"version": "2.1.1",
 			"integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"chownr": "^1.1.1",
 				"mkdirp-classic": "^0.5.2",
@@ -6050,6 +6157,8 @@
 		"../util/node_modules/tar-stream": {
 			"version": "2.2.0",
 			"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"bl": "^4.0.3",
 				"end-of-stream": "^1.4.1",
@@ -6064,6 +6173,8 @@
 		"../util/node_modules/tar-stream/node_modules/readable-stream": {
 			"version": "3.6.0",
 			"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"inherits": "^2.0.3",
 				"string_decoder": "^1.1.1",
@@ -6076,6 +6187,8 @@
 		"../util/node_modules/tar-stream/node_modules/string_decoder": {
 			"version": "1.3.0",
 			"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"safe-buffer": "~5.2.0"
 			}
@@ -6252,6 +6365,8 @@
 		"../util/node_modules/tunnel-agent": {
 			"version": "0.6.0",
 			"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"safe-buffer": "^5.0.1"
 			},
@@ -6751,6 +6866,8 @@
 		"../util/node_modules/wide-align": {
 			"version": "1.1.3",
 			"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+			"optional": true,
+			"peer": true,
 			"dependencies": {
 				"string-width": "^1.0.2 || 2"
 			}
@@ -6876,7 +6993,8 @@
 		},
 		"../util/node_modules/yallist": {
 			"version": "4.0.0",
-			"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+			"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+			"devOptional": true
 		},
 		"../util/node_modules/yargonaut": {
 			"version": "1.1.4",
@@ -8952,6 +9070,25 @@
 				"node-pre-gyp": "bin/node-pre-gyp"
 			}
 		},
+		"node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch": {
+			"version": "2.6.7",
+			"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+			"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+			"dependencies": {
+				"whatwg-url": "^5.0.0"
+			},
+			"engines": {
+				"node": "4.x || >=6.0.0"
+			},
+			"peerDependencies": {
+				"encoding": "^0.1.0"
+			},
+			"peerDependenciesMeta": {
+				"encoding": {
+					"optional": true
+				}
+			}
+		},
 		"node_modules/@mapbox/node-pre-gyp/node_modules/semver": {
 			"version": "7.3.5",
 			"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
@@ -8965,6 +9102,158 @@
 				"node": ">=10"
 			}
 		},
+		"node_modules/@mapbox/node-pre-gyp/node_modules/tr46": {
+			"version": "0.0.3",
+			"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+			"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
+		},
+		"node_modules/@mapbox/node-pre-gyp/node_modules/webidl-conversions": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+			"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+		},
+		"node_modules/@mapbox/node-pre-gyp/node_modules/whatwg-url": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+			"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+			"dependencies": {
+				"tr46": "~0.0.3",
+				"webidl-conversions": "^3.0.0"
+			}
+		},
+		"node_modules/@sentry/core": {
+			"version": "6.16.1",
+			"resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.16.1.tgz",
+			"integrity": "sha512-UFI0264CPUc5cR1zJH+S2UPOANpm6dLJOnsvnIGTjsrwzR0h8Hdl6rC2R/GPq+WNbnipo9hkiIwDlqbqvIU5vw==",
+			"dependencies": {
+				"@sentry/hub": "6.16.1",
+				"@sentry/minimal": "6.16.1",
+				"@sentry/types": "6.16.1",
+				"@sentry/utils": "6.16.1",
+				"tslib": "^1.9.3"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/@sentry/core/node_modules/tslib": {
+			"version": "1.14.1",
+			"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+			"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+		},
+		"node_modules/@sentry/hub": {
+			"version": "6.16.1",
+			"resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.16.1.tgz",
+			"integrity": "sha512-4PGtg6AfpqMkreTpL7ymDeQ/U1uXv03bKUuFdtsSTn/FRf9TLS4JB0KuTZCxfp1IRgAA+iFg6B784dDkT8R9eg==",
+			"dependencies": {
+				"@sentry/types": "6.16.1",
+				"@sentry/utils": "6.16.1",
+				"tslib": "^1.9.3"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/@sentry/hub/node_modules/tslib": {
+			"version": "1.14.1",
+			"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+			"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+		},
+		"node_modules/@sentry/minimal": {
+			"version": "6.16.1",
+			"resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.16.1.tgz",
+			"integrity": "sha512-dq+mI1EQIvUM+zJtGCVgH3/B3Sbx4hKlGf2Usovm9KoqWYA+QpfVBholYDe/H2RXgO7LFEefDLvOdHDkqeJoyA==",
+			"dependencies": {
+				"@sentry/hub": "6.16.1",
+				"@sentry/types": "6.16.1",
+				"tslib": "^1.9.3"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/@sentry/minimal/node_modules/tslib": {
+			"version": "1.14.1",
+			"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+			"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+		},
+		"node_modules/@sentry/node": {
+			"version": "6.16.1",
+			"resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.16.1.tgz",
+			"integrity": "sha512-SeDDoug2kUxeF1D7JGPa3h5EXxKtmA01mITBPYx5xbJ0sMksnv5I5bC1SJ8arRRzq6+W1C4IEeDBQtrVCk6ixA==",
+			"dependencies": {
+				"@sentry/core": "6.16.1",
+				"@sentry/hub": "6.16.1",
+				"@sentry/tracing": "6.16.1",
+				"@sentry/types": "6.16.1",
+				"@sentry/utils": "6.16.1",
+				"cookie": "^0.4.1",
+				"https-proxy-agent": "^5.0.0",
+				"lru_map": "^0.3.3",
+				"tslib": "^1.9.3"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/@sentry/node/node_modules/cookie": {
+			"version": "0.4.1",
+			"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+			"integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
+			"engines": {
+				"node": ">= 0.6"
+			}
+		},
+		"node_modules/@sentry/node/node_modules/tslib": {
+			"version": "1.14.1",
+			"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+			"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+		},
+		"node_modules/@sentry/tracing": {
+			"version": "6.16.1",
+			"resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-6.16.1.tgz",
+			"integrity": "sha512-MPSbqXX59P+OEeST+U2V/8Hu/8QjpTUxTNeNyTHWIbbchdcMMjDbXTS3etCgajZR6Ro+DHElOz5cdSxH6IBGlA==",
+			"dependencies": {
+				"@sentry/hub": "6.16.1",
+				"@sentry/minimal": "6.16.1",
+				"@sentry/types": "6.16.1",
+				"@sentry/utils": "6.16.1",
+				"tslib": "^1.9.3"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/@sentry/tracing/node_modules/tslib": {
+			"version": "1.14.1",
+			"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+			"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+		},
+		"node_modules/@sentry/types": {
+			"version": "6.16.1",
+			"resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.16.1.tgz",
+			"integrity": "sha512-Wh354g30UsJ5kYJbercektGX4ZMc9MHU++1NjeN2bTMnbofEcpUDWIiKeulZEY65IC1iU+1zRQQgtYO+/hgCUQ==",
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/@sentry/utils": {
+			"version": "6.16.1",
+			"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.16.1.tgz",
+			"integrity": "sha512-7ngq/i4R8JZitJo9Sl8PDnjSbDehOxgr1vsoMmerIsyRZ651C/8B+jVkMhaAPgSdyJ0AlE3O7DKKTP1FXFw9qw==",
+			"dependencies": {
+				"@sentry/types": "6.16.1",
+				"tslib": "^1.9.3"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/@sentry/utils/node_modules/tslib": {
+			"version": "1.14.1",
+			"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+			"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+		},
 		"node_modules/@sinonjs/commons": {
 			"version": "1.8.3",
 			"integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
@@ -10902,6 +11191,28 @@
 				"bser": "2.1.1"
 			}
 		},
+		"node_modules/fetch-blob": {
+			"version": "3.1.4",
+			"resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz",
+			"integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/jimmywarting"
+				},
+				{
+					"type": "paypal",
+					"url": "https://paypal.me/jimmywarting"
+				}
+			],
+			"dependencies": {
+				"node-domexception": "^1.0.0",
+				"web-streams-polyfill": "^3.0.3"
+			},
+			"engines": {
+				"node": "^12.20 || >= 14.13"
+			}
+		},
 		"node_modules/figlet": {
 			"version": "1.5.2",
 			"integrity": "sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ==",
@@ -10985,6 +11296,17 @@
 				"node": ">= 6"
 			}
 		},
+		"node_modules/formdata-polyfill": {
+			"version": "4.0.10",
+			"resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+			"integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+			"dependencies": {
+				"fetch-blob": "^3.1.2"
+			},
+			"engines": {
+				"node": ">=12.20.0"
+			}
+		},
 		"node_modules/formidable": {
 			"version": "1.2.2",
 			"integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==",
@@ -12569,6 +12891,11 @@
 			"version": "4.1.1",
 			"integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
 		},
+		"node_modules/lru_map": {
+			"version": "0.3.3",
+			"resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
+			"integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0="
+		},
 		"node_modules/lru-cache": {
 			"version": "6.0.0",
 			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
@@ -12792,11 +13119,6 @@
 				"thenify-all": "^1.0.0"
 			}
 		},
-		"node_modules/nanocolors": {
-			"version": "0.2.13",
-			"resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz",
-			"integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA=="
-		},
 		"node_modules/natural-compare": {
 			"version": "1.4.0",
 			"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
@@ -12825,11 +13147,47 @@
 			"version": "3.2.1",
 			"integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A=="
 		},
+		"node_modules/node-domexception": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+			"integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/jimmywarting"
+				},
+				{
+					"type": "github",
+					"url": "https://paypal.me/jimmywarting"
+				}
+			],
+			"engines": {
+				"node": ">=10.5.0"
+			}
+		},
 		"node_modules/node-fetch": {
-			"version": "2.6.2",
-			"integrity": "sha512-aLoxToI6RfZ+0NOjmWAgn9+LEd30YCkJKFSyWacNZdEKTit/ZMcKjGkTRo8uWEsnIb/hfKecNPEbln02PdWbcA==",
+			"version": "3.1.1",
+			"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.1.1.tgz",
+			"integrity": "sha512-SMk+vKgU77PYotRdWzqZGTZeuFKlsJ0hu4KPviQKkfY+N3vn2MIzr0rvpnYpR8MtB3IEuhlEcuOLbGvLRlA+yg==",
+			"dependencies": {
+				"data-uri-to-buffer": "^4.0.0",
+				"fetch-blob": "^3.1.3",
+				"formdata-polyfill": "^4.0.10"
+			},
 			"engines": {
-				"node": "4.x || >=6.0.0"
+				"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/node-fetch"
+			}
+		},
+		"node_modules/node-fetch/node_modules/data-uri-to-buffer": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz",
+			"integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==",
+			"engines": {
+				"node": ">= 12"
 			}
 		},
 		"node_modules/node-int64": {
@@ -13340,8 +13698,7 @@
 		},
 		"node_modules/picocolors": {
 			"version": "1.0.0",
-			"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
-			"dev": true
+			"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
 		},
 		"node_modules/picomatch": {
 			"version": "2.3.0",
@@ -14873,6 +15230,14 @@
 				"makeerror": "1.0.x"
 			}
 		},
+		"node_modules/web-streams-polyfill": {
+			"version": "3.2.0",
+			"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz",
+			"integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==",
+			"engines": {
+				"node": ">= 8"
+			}
+		},
 		"node_modules/webidl-conversions": {
 			"version": "6.1.0",
 			"integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
@@ -16270,17 +16635,16 @@
 				"@types/node": "^14.17.9",
 				"@types/node-fetch": "^2.5.12",
 				"amqplib": "^0.8.0",
-				"better-sqlite3": "^7.4.3",
 				"form-data": "^4.0.0",
 				"jest": "^27.0.6",
 				"jsonwebtoken": "^8.5.1",
 				"lambert-server": "^1.2.12",
 				"missing-native-js-functions": "^1.2.18",
 				"multer": "^1.4.3",
-				"nanocolors": "^0.2.12",
-				"node-fetch": "^2.6.1",
+				"node-fetch": "^2.6.2",
 				"patch-package": "^6.4.7",
 				"pg": "^8.7.1",
+				"picocolors": "^1.0.0",
 				"proxy-agent": "^5.0.0",
 				"reflect-metadata": "^0.1.13",
 				"ts-node": "^10.2.1",
@@ -17351,11 +17715,15 @@
 				},
 				"aproba": {
 					"version": "1.2.0",
-					"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+					"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+					"optional": true,
+					"peer": true
 				},
 				"are-we-there-yet": {
 					"version": "1.1.7",
 					"integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"delegates": "^1.0.0",
 						"readable-stream": "^2.0.6"
@@ -17363,11 +17731,15 @@
 					"dependencies": {
 						"isarray": {
 							"version": "1.0.0",
-							"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+							"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+							"optional": true,
+							"peer": true
 						},
 						"readable-stream": {
 							"version": "2.3.7",
 							"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+							"optional": true,
+							"peer": true,
 							"requires": {
 								"core-util-is": "~1.0.0",
 								"inherits": "~2.0.3",
@@ -17380,11 +17752,15 @@
 						},
 						"safe-buffer": {
 							"version": "5.1.2",
-							"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+							"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+							"optional": true,
+							"peer": true
 						},
 						"string_decoder": {
 							"version": "1.1.1",
 							"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+							"optional": true,
+							"peer": true,
 							"requires": {
 								"safe-buffer": "~5.1.0"
 							}
@@ -17525,6 +17901,8 @@
 				"better-sqlite3": {
 					"version": "7.4.3",
 					"integrity": "sha512-07bKjClZg/f4KMVRkzWtoIvazVPcF1gsvVKVIXlxwleC2DxuIhnra3KCMlUT1rFeRYXXckot2a46UciF2d9KLw==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"bindings": "^1.5.0",
 						"prebuild-install": "^6.0.1",
@@ -17533,11 +17911,15 @@
 					"dependencies": {
 						"chownr": {
 							"version": "2.0.0",
-							"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
+							"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+							"optional": true,
+							"peer": true
 						},
 						"fs-minipass": {
 							"version": "2.1.0",
 							"integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+							"optional": true,
+							"peer": true,
 							"requires": {
 								"minipass": "^3.0.0"
 							}
@@ -17545,6 +17927,8 @@
 						"minipass": {
 							"version": "3.1.5",
 							"integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==",
+							"optional": true,
+							"peer": true,
 							"requires": {
 								"yallist": "^4.0.0"
 							}
@@ -17552,6 +17936,8 @@
 						"minizlib": {
 							"version": "2.1.2",
 							"integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+							"optional": true,
+							"peer": true,
 							"requires": {
 								"minipass": "^3.0.0",
 								"yallist": "^4.0.0"
@@ -17559,11 +17945,15 @@
 						},
 						"mkdirp": {
 							"version": "1.0.4",
-							"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
+							"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+							"optional": true,
+							"peer": true
 						},
 						"tar": {
 							"version": "6.1.11",
 							"integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
+							"optional": true,
+							"peer": true,
 							"requires": {
 								"chownr": "^2.0.0",
 								"fs-minipass": "^2.0.0",
@@ -17578,6 +17968,8 @@
 				"bindings": {
 					"version": "1.5.0",
 					"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"file-uri-to-path": "1.0.0"
 					}
@@ -17600,6 +17992,8 @@
 				"bl": {
 					"version": "4.1.0",
 					"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"buffer": "^5.5.0",
 						"inherits": "^2.0.4",
@@ -17609,6 +18003,8 @@
 						"readable-stream": {
 							"version": "3.6.0",
 							"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+							"optional": true,
+							"peer": true,
 							"requires": {
 								"inherits": "^2.0.3",
 								"string_decoder": "^1.1.1",
@@ -17618,6 +18014,8 @@
 						"string_decoder": {
 							"version": "1.3.0",
 							"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+							"optional": true,
+							"peer": true,
 							"requires": {
 								"safe-buffer": "~5.2.0"
 							}
@@ -17696,6 +18094,8 @@
 				"buffer": {
 					"version": "5.7.1",
 					"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"base64-js": "^1.3.1",
 						"ieee754": "^1.1.13"
@@ -17765,7 +18165,9 @@
 				},
 				"chownr": {
 					"version": "1.1.4",
-					"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
+					"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+					"optional": true,
+					"peer": true
 				},
 				"ci-info": {
 					"version": "3.2.0",
@@ -17826,7 +18228,9 @@
 				},
 				"code-point-at": {
 					"version": "1.1.0",
-					"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+					"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+					"optional": true,
+					"peer": true
 				},
 				"collect-v8-coverage": {
 					"version": "1.0.1",
@@ -17903,7 +18307,9 @@
 				},
 				"console-control-strings": {
 					"version": "1.1.0",
-					"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
+					"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+					"optional": true,
+					"peer": true
 				},
 				"content-disposition": {
 					"version": "0.5.3",
@@ -18017,6 +18423,8 @@
 				"decompress-response": {
 					"version": "4.2.1",
 					"integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"mimic-response": "^2.0.0"
 					}
@@ -18028,7 +18436,9 @@
 				},
 				"deep-extend": {
 					"version": "0.6.0",
-					"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
+					"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+					"optional": true,
+					"peer": true
 				},
 				"deep-is": {
 					"version": "0.1.4",
@@ -18047,7 +18457,9 @@
 				},
 				"delegates": {
 					"version": "1.0.0",
-					"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+					"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+					"optional": true,
+					"peer": true
 				},
 				"depd": {
 					"version": "1.1.2",
@@ -18059,7 +18471,9 @@
 				},
 				"detect-libc": {
 					"version": "1.0.3",
-					"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
+					"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
+					"optional": true,
+					"peer": true
 				},
 				"detect-newline": {
 					"version": "3.1.0",
@@ -18144,6 +18558,8 @@
 				"end-of-stream": {
 					"version": "1.4.4",
 					"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"once": "^1.4.0"
 					}
@@ -18215,7 +18631,9 @@
 				},
 				"expand-template": {
 					"version": "2.0.3",
-					"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="
+					"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+					"optional": true,
+					"peer": true
 				},
 				"expect": {
 					"version": "27.2.0",
@@ -18326,7 +18744,9 @@
 				},
 				"file-uri-to-path": {
 					"version": "1.0.0",
-					"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
+					"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+					"optional": true,
+					"peer": true
 				},
 				"fill-range": {
 					"version": "7.0.1",
@@ -18380,7 +18800,9 @@
 				},
 				"fs-constants": {
 					"version": "1.0.0",
-					"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
+					"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+					"optional": true,
+					"peer": true
 				},
 				"fs-extra": {
 					"version": "7.0.1",
@@ -18441,6 +18863,8 @@
 				"gauge": {
 					"version": "2.7.4",
 					"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"aproba": "^1.0.3",
 						"console-control-strings": "^1.0.0",
@@ -18454,11 +18878,15 @@
 					"dependencies": {
 						"ansi-regex": {
 							"version": "2.1.1",
-							"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+							"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+							"optional": true,
+							"peer": true
 						},
 						"strip-ansi": {
 							"version": "3.0.1",
 							"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+							"optional": true,
+							"peer": true,
 							"requires": {
 								"ansi-regex": "^2.0.0"
 							}
@@ -18495,7 +18923,9 @@
 				},
 				"github-from-package": {
 					"version": "0.0.0",
-					"integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4="
+					"integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
+					"optional": true,
+					"peer": true
 				},
 				"glob": {
 					"version": "7.1.7",
@@ -18561,7 +18991,9 @@
 				},
 				"has-unicode": {
 					"version": "2.0.1",
-					"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
+					"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+					"optional": true,
+					"peer": true
 				},
 				"helmet": {
 					"version": "4.6.0",
@@ -18714,7 +19146,9 @@
 				},
 				"ini": {
 					"version": "1.3.8",
-					"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+					"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+					"optional": true,
+					"peer": true
 				},
 				"ipaddr.js": {
 					"version": "1.9.1",
@@ -18743,6 +19177,8 @@
 				"is-fullwidth-code-point": {
 					"version": "1.0.0",
 					"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"number-is-nan": "^1.0.0"
 					}
@@ -19642,7 +20078,9 @@
 				},
 				"mimic-response": {
 					"version": "2.1.0",
-					"integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA=="
+					"integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
+					"optional": true,
+					"peer": true
 				},
 				"minimatch": {
 					"version": "3.0.4",
@@ -19695,7 +20133,9 @@
 				},
 				"mkdirp-classic": {
 					"version": "0.5.3",
-					"integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
+					"integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+					"optional": true,
+					"peer": true
 				},
 				"ms": {
 					"version": "2.0.0",
@@ -19724,13 +20164,11 @@
 						"thenify-all": "^1.0.0"
 					}
 				},
-				"nanocolors": {
-					"version": "0.2.12",
-					"integrity": "sha512-SFNdALvzW+rVlzqexid6epYdt8H9Zol7xDoQarioEFcFN0JHo4CYNztAxmtfgGTVRCmFlEOqqhBpoFGKqSAMug=="
-				},
 				"napi-build-utils": {
 					"version": "1.0.2",
-					"integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg=="
+					"integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
+					"optional": true,
+					"peer": true
 				},
 				"natural-compare": {
 					"version": "1.4.0",
@@ -19776,13 +20214,17 @@
 				"node-abi": {
 					"version": "2.30.1",
 					"integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"semver": "^5.4.1"
 					},
 					"dependencies": {
 						"semver": {
 							"version": "5.7.1",
-							"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+							"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+							"optional": true,
+							"peer": true
 						}
 					}
 				},
@@ -19974,6 +20416,8 @@
 				"npmlog": {
 					"version": "4.1.2",
 					"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"are-we-there-yet": "~1.1.2",
 						"console-control-strings": "~1.1.0",
@@ -19983,7 +20427,9 @@
 				},
 				"number-is-nan": {
 					"version": "1.0.1",
-					"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+					"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+					"optional": true,
+					"peer": true
 				},
 				"nwsapi": {
 					"version": "2.2.0",
@@ -20353,6 +20799,8 @@
 				"prebuild-install": {
 					"version": "6.1.4",
 					"integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"detect-libc": "^1.0.3",
 						"expand-template": "^2.0.3",
@@ -20421,6 +20869,8 @@
 				"pump": {
 					"version": "3.0.0",
 					"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"end-of-stream": "^1.1.0",
 						"once": "^1.3.1"
@@ -20456,6 +20906,8 @@
 				"rc": {
 					"version": "1.2.8",
 					"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"deep-extend": "^0.6.0",
 						"ini": "~1.3.0",
@@ -20639,7 +21091,9 @@
 				},
 				"set-blocking": {
 					"version": "2.0.0",
-					"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+					"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+					"optional": true,
+					"peer": true
 				},
 				"setprototypeof": {
 					"version": "1.1.1",
@@ -20668,15 +21122,20 @@
 				},
 				"signal-exit": {
 					"version": "3.0.4",
-					"integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q=="
+					"integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==",
+					"devOptional": true
 				},
 				"simple-concat": {
 					"version": "1.0.1",
-					"integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="
+					"integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+					"optional": true,
+					"peer": true
 				},
 				"simple-get": {
 					"version": "3.1.0",
 					"integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"decompress-response": "^4.2.0",
 						"once": "^1.3.1",
@@ -20795,6 +21254,8 @@
 				"string-width": {
 					"version": "1.0.2",
 					"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"code-point-at": "^1.0.0",
 						"is-fullwidth-code-point": "^1.0.0",
@@ -20803,11 +21264,15 @@
 					"dependencies": {
 						"ansi-regex": {
 							"version": "2.1.1",
-							"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+							"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+							"optional": true,
+							"peer": true
 						},
 						"strip-ansi": {
 							"version": "3.0.1",
 							"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+							"optional": true,
+							"peer": true,
 							"requires": {
 								"ansi-regex": "^2.0.0"
 							}
@@ -20833,7 +21298,9 @@
 				},
 				"strip-json-comments": {
 					"version": "2.0.1",
-					"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
+					"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+					"optional": true,
+					"peer": true
 				},
 				"supports-color": {
 					"version": "7.2.0",
@@ -20870,6 +21337,8 @@
 				"tar-fs": {
 					"version": "2.1.1",
 					"integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"chownr": "^1.1.1",
 						"mkdirp-classic": "^0.5.2",
@@ -20880,6 +21349,8 @@
 				"tar-stream": {
 					"version": "2.2.0",
 					"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"bl": "^4.0.3",
 						"end-of-stream": "^1.4.1",
@@ -20891,6 +21362,8 @@
 						"readable-stream": {
 							"version": "3.6.0",
 							"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+							"optional": true,
+							"peer": true,
 							"requires": {
 								"inherits": "^2.0.3",
 								"string_decoder": "^1.1.1",
@@ -20900,6 +21373,8 @@
 						"string_decoder": {
 							"version": "1.3.0",
 							"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+							"optional": true,
+							"peer": true,
 							"requires": {
 								"safe-buffer": "~5.2.0"
 							}
@@ -21023,6 +21498,8 @@
 				"tunnel-agent": {
 					"version": "0.6.0",
 					"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"safe-buffer": "^5.0.1"
 					}
@@ -21333,6 +21810,8 @@
 				"wide-align": {
 					"version": "1.1.3",
 					"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+					"optional": true,
+					"peer": true,
 					"requires": {
 						"string-width": "^1.0.2 || 2"
 					}
@@ -21419,7 +21898,8 @@
 				},
 				"yallist": {
 					"version": "4.0.0",
-					"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+					"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+					"devOptional": true
 				},
 				"yargonaut": {
 					"version": "1.1.4",
@@ -21792,12 +22272,160 @@
 				"tar": "^6.1.0"
 			},
 			"dependencies": {
+				"node-fetch": {
+					"version": "2.6.7",
+					"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+					"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+					"requires": {
+						"whatwg-url": "^5.0.0"
+					}
+				},
 				"semver": {
 					"version": "7.3.5",
 					"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
 					"requires": {
 						"lru-cache": "^6.0.0"
 					}
+				},
+				"tr46": {
+					"version": "0.0.3",
+					"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+					"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
+				},
+				"webidl-conversions": {
+					"version": "3.0.1",
+					"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+					"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+				},
+				"whatwg-url": {
+					"version": "5.0.0",
+					"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+					"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+					"requires": {
+						"tr46": "~0.0.3",
+						"webidl-conversions": "^3.0.0"
+					}
+				}
+			}
+		},
+		"@sentry/core": {
+			"version": "6.16.1",
+			"resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.16.1.tgz",
+			"integrity": "sha512-UFI0264CPUc5cR1zJH+S2UPOANpm6dLJOnsvnIGTjsrwzR0h8Hdl6rC2R/GPq+WNbnipo9hkiIwDlqbqvIU5vw==",
+			"requires": {
+				"@sentry/hub": "6.16.1",
+				"@sentry/minimal": "6.16.1",
+				"@sentry/types": "6.16.1",
+				"@sentry/utils": "6.16.1",
+				"tslib": "^1.9.3"
+			},
+			"dependencies": {
+				"tslib": {
+					"version": "1.14.1",
+					"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+					"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+				}
+			}
+		},
+		"@sentry/hub": {
+			"version": "6.16.1",
+			"resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.16.1.tgz",
+			"integrity": "sha512-4PGtg6AfpqMkreTpL7ymDeQ/U1uXv03bKUuFdtsSTn/FRf9TLS4JB0KuTZCxfp1IRgAA+iFg6B784dDkT8R9eg==",
+			"requires": {
+				"@sentry/types": "6.16.1",
+				"@sentry/utils": "6.16.1",
+				"tslib": "^1.9.3"
+			},
+			"dependencies": {
+				"tslib": {
+					"version": "1.14.1",
+					"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+					"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+				}
+			}
+		},
+		"@sentry/minimal": {
+			"version": "6.16.1",
+			"resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.16.1.tgz",
+			"integrity": "sha512-dq+mI1EQIvUM+zJtGCVgH3/B3Sbx4hKlGf2Usovm9KoqWYA+QpfVBholYDe/H2RXgO7LFEefDLvOdHDkqeJoyA==",
+			"requires": {
+				"@sentry/hub": "6.16.1",
+				"@sentry/types": "6.16.1",
+				"tslib": "^1.9.3"
+			},
+			"dependencies": {
+				"tslib": {
+					"version": "1.14.1",
+					"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+					"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+				}
+			}
+		},
+		"@sentry/node": {
+			"version": "6.16.1",
+			"resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.16.1.tgz",
+			"integrity": "sha512-SeDDoug2kUxeF1D7JGPa3h5EXxKtmA01mITBPYx5xbJ0sMksnv5I5bC1SJ8arRRzq6+W1C4IEeDBQtrVCk6ixA==",
+			"requires": {
+				"@sentry/core": "6.16.1",
+				"@sentry/hub": "6.16.1",
+				"@sentry/tracing": "6.16.1",
+				"@sentry/types": "6.16.1",
+				"@sentry/utils": "6.16.1",
+				"cookie": "^0.4.1",
+				"https-proxy-agent": "^5.0.0",
+				"lru_map": "^0.3.3",
+				"tslib": "^1.9.3"
+			},
+			"dependencies": {
+				"cookie": {
+					"version": "0.4.1",
+					"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+					"integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
+				},
+				"tslib": {
+					"version": "1.14.1",
+					"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+					"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+				}
+			}
+		},
+		"@sentry/tracing": {
+			"version": "6.16.1",
+			"resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-6.16.1.tgz",
+			"integrity": "sha512-MPSbqXX59P+OEeST+U2V/8Hu/8QjpTUxTNeNyTHWIbbchdcMMjDbXTS3etCgajZR6Ro+DHElOz5cdSxH6IBGlA==",
+			"requires": {
+				"@sentry/hub": "6.16.1",
+				"@sentry/minimal": "6.16.1",
+				"@sentry/types": "6.16.1",
+				"@sentry/utils": "6.16.1",
+				"tslib": "^1.9.3"
+			},
+			"dependencies": {
+				"tslib": {
+					"version": "1.14.1",
+					"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+					"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+				}
+			}
+		},
+		"@sentry/types": {
+			"version": "6.16.1",
+			"resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.16.1.tgz",
+			"integrity": "sha512-Wh354g30UsJ5kYJbercektGX4ZMc9MHU++1NjeN2bTMnbofEcpUDWIiKeulZEY65IC1iU+1zRQQgtYO+/hgCUQ=="
+		},
+		"@sentry/utils": {
+			"version": "6.16.1",
+			"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.16.1.tgz",
+			"integrity": "sha512-7ngq/i4R8JZitJo9Sl8PDnjSbDehOxgr1vsoMmerIsyRZ651C/8B+jVkMhaAPgSdyJ0AlE3O7DKKTP1FXFw9qw==",
+			"requires": {
+				"@sentry/types": "6.16.1",
+				"tslib": "^1.9.3"
+			},
+			"dependencies": {
+				"tslib": {
+					"version": "1.14.1",
+					"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+					"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
 				}
 			}
 		},
@@ -23348,6 +23976,15 @@
 				"bser": "2.1.1"
 			}
 		},
+		"fetch-blob": {
+			"version": "3.1.4",
+			"resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz",
+			"integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==",
+			"requires": {
+				"node-domexception": "^1.0.0",
+				"web-streams-polyfill": "^3.0.3"
+			}
+		},
 		"figlet": {
 			"version": "1.5.2",
 			"integrity": "sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ=="
@@ -23415,6 +24052,14 @@
 				"mime-types": "^2.1.12"
 			}
 		},
+		"formdata-polyfill": {
+			"version": "4.0.10",
+			"resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+			"integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+			"requires": {
+				"fetch-blob": "^3.1.2"
+			}
+		},
 		"formidable": {
 			"version": "1.2.2",
 			"integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q=="
@@ -24606,6 +25251,11 @@
 			"version": "4.1.1",
 			"integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
 		},
+		"lru_map": {
+			"version": "0.3.3",
+			"resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
+			"integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0="
+		},
 		"lru-cache": {
 			"version": "6.0.0",
 			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
@@ -24776,11 +25426,6 @@
 				"thenify-all": "^1.0.0"
 			}
 		},
-		"nanocolors": {
-			"version": "0.2.13",
-			"resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz",
-			"integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA=="
-		},
 		"natural-compare": {
 			"version": "1.4.0",
 			"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
@@ -24803,9 +25448,27 @@
 			"version": "3.2.1",
 			"integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A=="
 		},
+		"node-domexception": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+			"integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="
+		},
 		"node-fetch": {
-			"version": "2.6.2",
-			"integrity": "sha512-aLoxToI6RfZ+0NOjmWAgn9+LEd30YCkJKFSyWacNZdEKTit/ZMcKjGkTRo8uWEsnIb/hfKecNPEbln02PdWbcA=="
+			"version": "3.1.1",
+			"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.1.1.tgz",
+			"integrity": "sha512-SMk+vKgU77PYotRdWzqZGTZeuFKlsJ0hu4KPviQKkfY+N3vn2MIzr0rvpnYpR8MtB3IEuhlEcuOLbGvLRlA+yg==",
+			"requires": {
+				"data-uri-to-buffer": "^4.0.0",
+				"fetch-blob": "^3.1.3",
+				"formdata-polyfill": "^4.0.10"
+			},
+			"dependencies": {
+				"data-uri-to-buffer": {
+					"version": "4.0.0",
+					"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz",
+					"integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA=="
+				}
+			}
 		},
 		"node-int64": {
 			"version": "0.4.0",
@@ -25175,8 +25838,7 @@
 		},
 		"picocolors": {
 			"version": "1.0.0",
-			"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
-			"dev": true
+			"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
 		},
 		"picomatch": {
 			"version": "2.3.0",
@@ -26261,6 +26923,11 @@
 				"makeerror": "1.0.x"
 			}
 		},
+		"web-streams-polyfill": {
+			"version": "3.2.0",
+			"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz",
+			"integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA=="
+		},
 		"webidl-conversions": {
 			"version": "6.1.0",
 			"integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
diff --git a/api/package.json b/api/package.json
index 182e53de..f4614c90 100644
--- a/api/package.json
+++ b/api/package.json
@@ -86,7 +86,7 @@
 		"missing-native-js-functions": "^1.2.18",
 		"morgan": "^1.10.0",
 		"multer": "^1.4.2",
-		"node-fetch": "^2.6.1",
+		"node-fetch": "^3.1.1",
 		"patch-package": "^6.4.7",
 		"picocolors": "^1.0.0",
 		"proxy-agent": "^5.0.0",
diff --git a/api/scripts/stresstest/package-lock.json b/api/scripts/stresstest/package-lock.json
index ca84a8cf..81c9b817 100644
--- a/api/scripts/stresstest/package-lock.json
+++ b/api/scripts/stresstest/package-lock.json
@@ -279,14 +279,22 @@
 			}
 		},
 		"node_modules/node-fetch": {
-			"version": "2.6.6",
-			"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz",
-			"integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==",
+			"version": "2.6.7",
+			"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+			"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
 			"dependencies": {
 				"whatwg-url": "^5.0.0"
 			},
 			"engines": {
 				"node": "4.x || >=6.0.0"
+			},
+			"peerDependencies": {
+				"encoding": "^0.1.0"
+			},
+			"peerDependenciesMeta": {
+				"encoding": {
+					"optional": true
+				}
 			}
 		},
 		"node_modules/oauth-sign": {
@@ -695,9 +703,9 @@
 			}
 		},
 		"node-fetch": {
-			"version": "2.6.6",
-			"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz",
-			"integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==",
+			"version": "2.6.7",
+			"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+			"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
 			"requires": {
 				"whatwg-url": "^5.0.0"
 			}
diff --git a/api/src/routes/channels/#channel_id/messages/index.ts b/api/src/routes/channels/#channel_id/messages/index.ts
index c3d3d408..2fd08b04 100644
--- a/api/src/routes/channels/#channel_id/messages/index.ts
+++ b/api/src/routes/channels/#channel_id/messages/index.ts
@@ -37,7 +37,11 @@ export function isTextChannel(type: ChannelType): boolean {
 		case ChannelType.GUILD_PUBLIC_THREAD:
 		case ChannelType.GUILD_PRIVATE_THREAD:
 		case ChannelType.GUILD_TEXT:
+		case ChannelType.ENCRYPTED:
+		case ChannelType.ENCRYPTED_THREAD:
 			return true;
+		default:
+			throw new HTTPError("unimplemented", 400);
 	}
 }
 
@@ -87,7 +91,7 @@ router.get("/", async (req: Request, res: Response) => {
 	permissions.hasThrow("VIEW_CHANNEL");
 	if (!permissions.has("READ_MESSAGE_HISTORY")) return res.json([]);
 
-	var query: FindManyOptions<Message> & { where: { id?: any } } = {
+	var query: FindManyOptions<Message> & { where: { id?: any; }; } = {
 		order: { id: "DESC" },
 		take: limit,
 		where: { channel_id },
@@ -122,6 +126,13 @@ router.get("/", async (req: Request, res: Response) => {
 				y.proxy_url = `${endpoint == null ? "" : endpoint}${new URL(uri).pathname}`;
 			});
 
+			//Some clients ( discord.js ) only check if a property exists within the response,
+			//which causes erorrs when, say, the `application` property is `null`.
+			for (var curr in x) {
+				if (x[curr] === null)
+					delete x[curr];
+			}
+
 			return x;
 		})
 	);
@@ -208,7 +219,10 @@ router.post(
 				})
 			);
 		}
-
+	
+		//Fix for the client bug
+		delete message.member
+		
 		await Promise.all([
 			message.save(),
 			emitEvent({ event: "MESSAGE_CREATE", channel_id: channel_id, data: message } as MessageCreateEvent),
@@ -216,7 +230,7 @@ router.post(
 			channel.save()
 		]);
 
-		postHandleMessage(message).catch((e) => {}); // no await as it shouldnt block the message send function and silently catch error
+		postHandleMessage(message).catch((e) => { }); // no await as it shouldnt block the message send function and silently catch error
 
 		return res.json(message);
 	}
diff --git a/api/src/routes/channels/#channel_id/webhooks.ts b/api/src/routes/channels/#channel_id/webhooks.ts
index 7b894455..92895da6 100644
--- a/api/src/routes/channels/#channel_id/webhooks.ts
+++ b/api/src/routes/channels/#channel_id/webhooks.ts
@@ -14,6 +14,10 @@ export interface WebhookCreateSchema {
 	name: string;
 	avatar: string;
 }
+//TODO: implement webhooks
+router.get("/", route({}), async (req: Request, res: Response) => {
+	res.json([]);
+});
 
 // TODO: use Image Data Type for avatar instead of String
 router.post("/", route({ body: "WebhookCreateSchema", permission: "MANAGE_WEBHOOKS" }), async (req: Request, res: Response) => {
diff --git a/api/src/routes/guilds/#guild_id/audit-logs.ts b/api/src/routes/guilds/#guild_id/audit-logs.ts
new file mode 100644
index 00000000..a4f2f800
--- /dev/null
+++ b/api/src/routes/guilds/#guild_id/audit-logs.ts
@@ -0,0 +1,20 @@
+import { Router, Response, Request } from "express";
+import { Channel, ChannelUpdateEvent, getPermission, emitEvent } from "@fosscord/util";
+import { HTTPError } from "lambert-server";
+import { route } from "@fosscord/api";
+import { ChannelModifySchema } from "../../channels/#channel_id";
+const router = Router();
+
+//TODO: implement audit logs
+router.get("/", route({}), async (req: Request, res: Response) => {
+	res.json({
+		audit_log_entries: [],
+		users: [],
+		integrations: [],
+		webhooks: [],
+		guild_scheduled_events: [],
+		threads: [],
+		application_commands: []
+	});
+});
+export default router;
diff --git a/api/src/routes/guilds/#guild_id/integrations.ts b/api/src/routes/guilds/#guild_id/integrations.ts
new file mode 100644
index 00000000..abf997c9
--- /dev/null
+++ b/api/src/routes/guilds/#guild_id/integrations.ts
@@ -0,0 +1,12 @@
+import { Router, Response, Request } from "express";
+import { Channel, ChannelUpdateEvent, getPermission, emitEvent } from "@fosscord/util";
+import { HTTPError } from "lambert-server";
+import { route } from "@fosscord/api";
+import { ChannelModifySchema } from "../../channels/#channel_id";
+const router = Router();
+
+//TODO: implement integrations list
+router.get("/", route({}), async (req: Request, res: Response) => {
+	res.json([]);
+});
+export default router;
diff --git a/api/src/routes/guilds/#guild_id/webhooks.ts b/api/src/routes/guilds/#guild_id/webhooks.ts
new file mode 100644
index 00000000..8b2febea
--- /dev/null
+++ b/api/src/routes/guilds/#guild_id/webhooks.ts
@@ -0,0 +1,12 @@
+import { Router, Response, Request } from "express";
+import { Channel, ChannelUpdateEvent, getPermission, emitEvent } from "@fosscord/util";
+import { HTTPError } from "lambert-server";
+import { route } from "@fosscord/api";
+import { ChannelModifySchema } from "../../channels/#channel_id";
+const router = Router();
+
+//TODO: implement webhooks
+router.get("/", route({}), async (req: Request, res: Response) => {
+	res.json([]);
+});
+export default router;
diff --git a/api/src/routes/invites/index.ts b/api/src/routes/invites/index.ts
index ac813126..37e9e05a 100644
--- a/api/src/routes/invites/index.ts
+++ b/api/src/routes/invites/index.ts
@@ -19,7 +19,8 @@ router.post("/:code", route({}), async (req: Request, res: Response) => {
 	const { features } = await Guild.findOneOrFail({ id: guild_id});
 	const { public_flags } = await User.findOneOrFail({ id: req.user_id });
 	
-	if(features.includes("INTERNAL_EMPLOYEE_ONLY") && (public_flags & 1) !== 1) throw new HTTPError("The Maze isn't meant for you.", 401)
+	if(features.includes("INTERNAL_EMPLOYEE_ONLY") && (public_flags & 1) !== 1) throw new HTTPError("Only intended for the staff of this server.", 401);
+	if(features.includes("INVITES_CLOSED")) throw new HTTPError("Sorry, this guild has joins closed.", 403);
 	
 	const invite = await Invite.joinGuild(req.user_id, code);