diff --git a/allowedStaticPaths.json b/allowedStaticPaths.json index 006c273..f538aee 100644 --- a/allowedStaticPaths.json +++ b/allowedStaticPaths.json @@ -10,7 +10,8 @@ "/@popperjs/core/dist/umd/popper.min.js", "/@popperjs/core/dist/umd/popper.min.js.map", "/bootstrap/dist/js/bootstrap.bundle.min.js.map", - "/bootstrap-icons/font/fonts/bootstrap-icons.woff" + "/bootstrap-icons/font/fonts/bootstrap-icons.woff", + "/tsparticles-confetti/tsparticles.confetti.bundle.min.js" ], "debugMode": false } diff --git a/package-lock.json b/package-lock.json index b87ea47..c348345 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,8 @@ "jquery": "^3.6.4", "lodash": "^4.17.21", "prisma": "^4.13.0", - "signale": "^1.4.0" + "signale": "^1.4.0", + "tsparticles-confetti": "^2.9.3" }, "devDependencies": { "@types/express": "^4.17.17", @@ -32,6 +33,7 @@ "eslint-config-prettier": "^8.8.0", "prisma-dbml-generator": "^0.10.0", "prisma-docs-generator": "^0.7.0", + "sass": "^1.62.1", "typescript": "^5.0.4" } }, @@ -958,6 +960,19 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/archiver": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", @@ -1097,6 +1112,15 @@ } ] }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -1342,6 +1366,33 @@ } } }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/ci-info": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", @@ -2304,6 +2355,20 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -2686,6 +2751,12 @@ "node": ">=10" } }, + "node_modules/immutable": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", + "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "dev": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -2760,6 +2831,18 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "node_modules/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, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-core-module": { "version": "2.12.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", @@ -4633,6 +4716,18 @@ "node": ">=10" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -4787,6 +4882,23 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sass": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz", + "integrity": "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -4992,6 +5104,15 @@ "node": ">=8" } }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -5322,6 +5443,234 @@ "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", "dev": true }, + "node_modules/tsparticles-confetti": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-confetti/-/tsparticles-confetti-2.9.3.tgz", + "integrity": "sha512-+w35tEgfCHHuu9kDVM5tcXV9nXS0KNzJXldfDaVeMUh/SQs3Hv7d2ZaeC6CnxEVDfioTPv2EFAV0V/dwHgL+Kg==", + "dependencies": { + "tsparticles-engine": "^2.9.3", + "tsparticles-move-base": "^2.9.3", + "tsparticles-plugin-emitters": "^2.9.3", + "tsparticles-plugin-motion": "^2.9.3", + "tsparticles-shape-cards": "^2.9.3", + "tsparticles-shape-circle": "^2.9.3", + "tsparticles-shape-heart": "^2.9.3", + "tsparticles-shape-image": "^2.9.3", + "tsparticles-shape-polygon": "^2.9.3", + "tsparticles-shape-square": "^2.9.3", + "tsparticles-shape-star": "^2.9.3", + "tsparticles-shape-text": "^2.9.3", + "tsparticles-updater-angle": "^2.9.3", + "tsparticles-updater-color": "^2.9.3", + "tsparticles-updater-life": "^2.9.3", + "tsparticles-updater-opacity": "^2.9.3", + "tsparticles-updater-out-modes": "^2.9.3", + "tsparticles-updater-roll": "^2.9.3", + "tsparticles-updater-size": "^2.9.3", + "tsparticles-updater-tilt": "^2.9.3", + "tsparticles-updater-wobble": "^2.9.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + } + }, + "node_modules/tsparticles-engine": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-engine/-/tsparticles-engine-2.9.3.tgz", + "integrity": "sha512-iAD8LyRH//kx10fDMm6AfQV6dRHs1ZacUUHqVwfutcqM4x1IV2ygpjk0X87LKCnBxYeIMG78+tlxXpnpwUccOg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "hasInstallScript": true + }, + "node_modules/tsparticles-move-base": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-move-base/-/tsparticles-move-base-2.9.3.tgz", + "integrity": "sha512-6/uO7N9HbVJokG8sjPF8YjJzkcnwELoZEkaiABX0mGxdICYCyjpjOdOfwF7UCf8Ctqh2/kxQjv4fk0Aj2Z3nag==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-plugin-emitters": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-plugin-emitters/-/tsparticles-plugin-emitters-2.9.3.tgz", + "integrity": "sha512-G0rs7lL9xjbFGkWr+XDsDpyghTjiHq7oPAZyUe0c/3p0JETwQgZ63/egluYU1p3uWJj34KjgjHD3GZqjyfI95Q==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-plugin-motion": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-plugin-motion/-/tsparticles-plugin-motion-2.9.3.tgz", + "integrity": "sha512-VUDhNO5PTCkub392FPFDEri1hTpUFJDFMUuLF537gUlpft57lgEtTetoNCyR/6q9gLl2M/jcMZgiQkFqLa1Qgg==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-cards": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-cards/-/tsparticles-shape-cards-2.9.3.tgz", + "integrity": "sha512-1agei5hqZ6xsn8UAEnCvlGZcoTTgy9Dle2sDpFBR17KxRmtJkD/XgtQrDv9xWiB6JIG5FiLpGXDGR65KgeEKyA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-circle": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-circle/-/tsparticles-shape-circle-2.9.3.tgz", + "integrity": "sha512-d+PjFELhoCzPf2G+XKIew3Ho/Ql2fHzY0TrrIKVHzHufqWdQCWrhxNri2v0POLJFkcIYqvFThxM23I/cyKPgQw==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-heart": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-heart/-/tsparticles-shape-heart-2.9.3.tgz", + "integrity": "sha512-AsRbzKYIB5rLyXU3vBS4uDthCSCwb9KMdRI2OV3sawPxtWAprYnjtTDDAhnz8ETxbw0E0lNMoDf6qYioTlRwJQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-image": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-image/-/tsparticles-shape-image-2.9.3.tgz", + "integrity": "sha512-yV3FAcqJ91EYG59OJ1SmShbogVs/uyk12u6LFTJnD2pmfdNwTeGpKMr3Cus5xJHQwJnFWufwkpOlBUxw55J/5g==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-polygon": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-polygon/-/tsparticles-shape-polygon-2.9.3.tgz", + "integrity": "sha512-qw580qr2VQveN1Q3kllhieW4GzB3t8fjlIRKZ0QG05npCG+ewBdXbD5G/9yfjGa1fTwCbHCfLoAFojjV15MBmg==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-square": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-square/-/tsparticles-shape-square-2.9.3.tgz", + "integrity": "sha512-VjRNALTt34arsN2UAxaWa43gvdaQQbk7OluLB912u1UzLFbdCccE/sr7pjyLqYaf6F+ndnjnzVygNb/kRxX1uQ==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-star": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-star/-/tsparticles-shape-star-2.9.3.tgz", + "integrity": "sha512-/nJdrHEq05dcVwLK+8i+QD3do+RNWrSvU1efVsOMzgLajH5s2mlSfyFcUSCQrmnmP7d6MpYZpbxa2KnpDSfW8g==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-text": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-text/-/tsparticles-shape-text-2.9.3.tgz", + "integrity": "sha512-V9U8VE2am1JWabiHAhTzAg0uG8j92BnfwmgRfWjg/w4eMFF2uyyBHQDHIFzhZFDbDbqIxttXngkfivAqRdUzhw==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-angle": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-angle/-/tsparticles-updater-angle-2.9.3.tgz", + "integrity": "sha512-Z8VLOw2UUxrvV3YH44My5kmeBUcJUHTSCMRUIqFvgvxDs0Q/g2eVWkr1L+Crpw6PE5FJMdDGWRjWwxMwNdVfuQ==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-color": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-color/-/tsparticles-updater-color-2.9.3.tgz", + "integrity": "sha512-eBJ7ZNsG3uCQlpfEf2FocsHLlMnd/vgWPZtOr2Iu7KA2OR3zy7u62D/oiRZkZEWtjhh5GlPrsy7njo6oToRBNQ==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-life": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-life/-/tsparticles-updater-life-2.9.3.tgz", + "integrity": "sha512-VUeWBCLKoLd69+C9CFHjVG0SaqCbMgQqag6NIGMqTmaaZNFcn1H8rheIG9NU70UOTsYRMPfwmZK1SKnqAK6jQQ==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-opacity": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-opacity/-/tsparticles-updater-opacity-2.9.3.tgz", + "integrity": "sha512-ON5t2qeegnm+MsmaF6ZvhUmKLzk/zXozsw9Dsgw8iJYX8WmQmp2VC72COTzADW495ovwGjBiR1KFelM/GVfHgg==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-out-modes": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-out-modes/-/tsparticles-updater-out-modes-2.9.3.tgz", + "integrity": "sha512-LEcAIeK8b3ovLGuuTob1L3o57XodqRuvDjtUT2TiNIC6cf3QMAnqujwAyvBLJrYAuwr7rG1fXEEt9tovFYg+tw==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-roll": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-roll/-/tsparticles-updater-roll-2.9.3.tgz", + "integrity": "sha512-I/9vB1wA3RKwfeRPlw7nrxUW8uxcajwba+gxFEcIDx2C+OA2UVIuGzOQE59O2sppqLqwrcLOm3ayTt5se1qbpw==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-size": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-size/-/tsparticles-updater-size-2.9.3.tgz", + "integrity": "sha512-6qQ8T+7wt/B4BD5K1LWEXrfan+h2utSY1zNhE1cTcAQUDrrU06g/tfMkbrpMdduu6RWwGtoC4OsciCnBuiLEYQ==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-tilt": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-tilt/-/tsparticles-updater-tilt-2.9.3.tgz", + "integrity": "sha512-x1EDyvBfqgBh1021lohf2shn+V6U9WhMasGD+fKugwRxNZ0nAe5DK0wop/26L2MUIb+AbIg2sXPdxuv1zE7G7w==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-wobble": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-wobble/-/tsparticles-updater-wobble-2.9.3.tgz", + "integrity": "sha512-/Doid0P/OjaO9cUzD/Z3j0GNA+8X3DUvVsOo/5mPt914PJBbcWYGpweE8u75ZPcHe9OM5u6CHFMf3PMurCEBCw==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index eefcc18..36422db 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "", "main": "dist/index.js", "scripts": { - "build": "tsc", + "build": "tsc && sass src/sass/dashboard-mod.scss static/css/dashboard-mod.css", "prestart": "npm run build", "start": "node .", "test": "echo \"Error: no test specified\" && exit 1" @@ -29,7 +29,8 @@ "jquery": "^3.6.4", "lodash": "^4.17.21", "prisma": "^4.13.0", - "signale": "^1.4.0" + "signale": "^1.4.0", + "tsparticles-confetti": "^2.9.3" }, "devDependencies": { "@types/express": "^4.17.17", @@ -40,6 +41,7 @@ "eslint-config-prettier": "^8.8.0", "prisma-dbml-generator": "^0.10.0", "prisma-docs-generator": "^0.7.0", + "sass": "^1.62.1", "typescript": "^5.0.4" } } diff --git a/src/frontend/dashboard.eta.html b/src/frontend/dashboard.eta.html index 3b652cc..897ef48 100644 --- a/src/frontend/dashboard.eta.html +++ b/src/frontend/dashboard.eta.html @@ -23,7 +23,7 @@ -
Bad Request!
+# | +Name | Description | Action | @@ -86,10 +108,12 @@||
---|---|---|---|---|---|
<%= user.id %> | -<%= user.name %> | +<%= user.name %> | <%= user.description %> | -+ | + + + |